From 6375c5a08ddd8edfc1b793d1ede87d6af46db90f Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 19:27:53 -0700 Subject: [PATCH 01/15] Add scoped system APIs and authoring fixtures for Runtime 1.6 --- Editor/editorfe/package-lock.json | 3 +- Editor/editorfe/package.json | 3 +- Editor/editorfe/src/dataAPICatalog.d.ts | 4 +- Editor/editorfe/src/dataAPICatalog.js | 5 +- Editor/editorfe/src/scriptWidgetAPI.js | 3 +- Editor/editorfe/src/systemAPICatalog.js | 636 ++++++++++++++++++ Editor/editorfe/test/dataAPICatalog.test.js | 4 +- README.md | 3 + README_CN.md | 4 + Scripts/release-readiness.sh | 1 + Scripts/test-system-services.mjs | 31 + .../AI/PromptBuilder.swift | 21 + .../Common/ScriptManager.swift | 6 +- .../Common/ScriptMetadata.swift | 8 + .../Common/ScriptWidgetPackage.swift | 2 +- .../Common/ScriptWidgetSystemAccessView.swift | 149 ++++ .../Resource/widget.schema.json | 2 +- .../API/ScriptWidgetRuntimeAlarms.swift | 120 ++++ .../API/ScriptWidgetRuntimeCalendar.swift | 4 + .../ScriptWidgetRuntimeCalendarWrites.swift | 77 +++ .../API/ScriptWidgetRuntimeContacts.swift | 51 ++ .../API/ScriptWidgetRuntimeDocuments.swift | 89 +++ .../API/ScriptWidgetRuntimeHealth.swift | 5 +- .../ScriptWidgetRuntimeHealthHistory.swift | 63 ++ .../Widget/API/ScriptWidgetRuntimeHome.swift | 136 ++++ .../Widget/API/ScriptWidgetRuntimeMaps.swift | 143 ++++ .../ScriptWidgetRuntimeNotifications.swift | 135 ++++ .../API/ScriptWidgetRuntimeReminders.swift | 2 +- .../ScriptWidgetRuntimeSystemServices.swift | 203 ++++++ .../API/ScriptWidgetRuntimeWeather.swift | 76 +++ .../Widget/Runtime/ScriptWidgetRuntime.swift | 17 +- .../references/runtime-api.md | 28 +- .../RuntimeExecutionTests.swift | 20 + .../RuntimeUnitTests.swift | 6 +- .../SystemServiceTests.swift | 122 ++++ .../Resources/api-catalog.json | 2 +- .../Resources/validation-host.js | 8 +- .../ScriptWidgetCLI.xcodeproj/project.pbxproj | 44 ++ Tools/ScriptWidgetCLI/Tests/smoke.py | 11 + Tools/ScriptWidgetCLI/Worker/WorkerMain.swift | 1 + Web/preview-engine/package.json | 5 +- Web/preview-engine/src/contract.js | 4 +- Web/preview-engine/src/kernel.js | 132 +++- Web/preview-engine/src/package/manifest.js | 4 +- Web/preview-engine/src/types.d.ts | 4 +- .../test/packagePreflight.test.js | 8 +- .../test/systemServices.test.js | 81 +++ Web/studio/package-lock.json | 3 +- Web/studio/package.json | 3 +- Web/studio/src/components/ActionTestPanel.tsx | 2 +- Web/studio/src/components/MockDataPanel.tsx | 6 +- Web/studio/src/mockData.ts | 6 +- Web/studio/test/calendar.test.ts | 2 +- Web/studio/test/mockData.test.ts | 15 +- Web/studio/test/systemExamples.test.ts | 31 + docs/README.md | 2 + docs/data-api-catalog.md | 426 ++++++++++++ docs/examples/alarm-focus-timer/README.md | 5 + docs/examples/alarm-focus-timer/main.jsx | 34 + docs/examples/alarm-focus-timer/widget.json | 45 ++ docs/examples/calendar-focus/README.md | 5 + docs/examples/calendar-focus/main.jsx | 34 + docs/examples/calendar-focus/widget.json | 28 + docs/examples/document-data/README.md | 5 + docs/examples/document-data/main.jsx | 16 + docs/examples/document-data/widget.json | 18 + docs/examples/health-history/README.md | 5 + docs/examples/health-history/main.jsx | 15 + docs/examples/health-history/widget.json | 18 + docs/examples/home-light/README.md | 5 + docs/examples/home-light/main.jsx | 19 + docs/examples/home-light/widget.json | 32 + docs/examples/map-place/README.md | 5 + docs/examples/map-place/main.jsx | 14 + docs/examples/map-place/widget.json | 18 + docs/examples/notification-reminder/README.md | 5 + docs/examples/notification-reminder/main.jsx | 19 + .../notification-reminder/widget.json | 32 + docs/examples/selected-contacts/README.md | 5 + docs/examples/selected-contacts/main.jsx | 14 + docs/examples/selected-contacts/widget.json | 18 + docs/examples/weather-forecast/README.md | 5 + docs/examples/weather-forecast/main.jsx | 17 + docs/examples/weather-forecast/widget.json | 21 + .../system-services/health-history-web.png | Bin 0 -> 288572 bytes .../notification-reminder-web.png | Bin 0 -> 290282 bytes docs/scriptwidget-runtime-api.md | 28 +- docs/system-services-api.md | 169 +++++ iOS/ScriptWidget.xcodeproj/project.pbxproj | 72 ++ iOS/ScriptWidget/App/ScriptWidgetApp.swift | 1 + .../App/Scripts/ScriptWidgetHomeView.swift | 7 +- iOS/ScriptWidget/Info.plist | 6 + iOS/ScriptWidget/ScriptWidget.entitlements | 2 + .../assets/index-BaJfekQk.js | 59 -- .../assets/index-DIlVDbPO.js | 59 ++ .../StudioEditor.bundle/index.html | 2 +- iOS/ScriptWidgetWidget/Info.plist | 6 + .../ScriptWidgetAlarmLiveActivity.swift | 42 ++ iOS/ScriptWidgetWidget/ScriptWidgetMain.swift | 1 + .../ScriptWidgetWidget.entitlements | 2 + .../ScriptWidgetMac.xcodeproj/project.pbxproj | 68 ++ .../App/ScriptWidgetMacApp.swift | 1 + macOS/ScriptWidgetMac/Info.plist | 6 + .../ScriptWidgetMac/Sidebar/SidebarView.swift | 5 + .../assets/index-BaJfekQk.js | 59 -- .../assets/index-DIlVDbPO.js | 59 ++ .../StudioEditor.bundle/index.html | 2 +- macOS/ScriptWidgetMac/macOS.entitlements | 4 + macOS/ScriptWidgetMacWidget/Info.plist | 6 + .../ScriptWidgetMacWidget.entitlements | 2 + 110 files changed, 3939 insertions(+), 168 deletions(-) create mode 100644 Editor/editorfe/src/systemAPICatalog.js create mode 100644 Scripts/test-system-services.mjs create mode 100644 Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealthHistory.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift create mode 100644 Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift create mode 100644 Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift create mode 100644 Web/preview-engine/test/systemServices.test.js create mode 100644 Web/studio/test/systemExamples.test.ts create mode 100644 docs/examples/alarm-focus-timer/README.md create mode 100644 docs/examples/alarm-focus-timer/main.jsx create mode 100644 docs/examples/alarm-focus-timer/widget.json create mode 100644 docs/examples/calendar-focus/README.md create mode 100644 docs/examples/calendar-focus/main.jsx create mode 100644 docs/examples/calendar-focus/widget.json create mode 100644 docs/examples/document-data/README.md create mode 100644 docs/examples/document-data/main.jsx create mode 100644 docs/examples/document-data/widget.json create mode 100644 docs/examples/health-history/README.md create mode 100644 docs/examples/health-history/main.jsx create mode 100644 docs/examples/health-history/widget.json create mode 100644 docs/examples/home-light/README.md create mode 100644 docs/examples/home-light/main.jsx create mode 100644 docs/examples/home-light/widget.json create mode 100644 docs/examples/map-place/README.md create mode 100644 docs/examples/map-place/main.jsx create mode 100644 docs/examples/map-place/widget.json create mode 100644 docs/examples/notification-reminder/README.md create mode 100644 docs/examples/notification-reminder/main.jsx create mode 100644 docs/examples/notification-reminder/widget.json create mode 100644 docs/examples/selected-contacts/README.md create mode 100644 docs/examples/selected-contacts/main.jsx create mode 100644 docs/examples/selected-contacts/widget.json create mode 100644 docs/examples/weather-forecast/README.md create mode 100644 docs/examples/weather-forecast/main.jsx create mode 100644 docs/examples/weather-forecast/widget.json create mode 100644 docs/images/system-services/health-history-web.png create mode 100644 docs/images/system-services/notification-reminder-web.png create mode 100644 docs/system-services-api.md delete mode 100644 iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-BaJfekQk.js create mode 100644 iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js create mode 100644 iOS/ScriptWidgetWidget/LiveActivity/ScriptWidgetAlarmLiveActivity.swift delete mode 100644 macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-BaJfekQk.js create mode 100644 macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js diff --git a/Editor/editorfe/package-lock.json b/Editor/editorfe/package-lock.json index 30c192a9..5f5f0af6 100644 --- a/Editor/editorfe/package-lock.json +++ b/Editor/editorfe/package-lock.json @@ -22,7 +22,8 @@ }, "devDependencies": { "vite": "^7.0.0" - } + }, + "license": "Apache-2.0" }, "node_modules/@codemirror/autocomplete": { "version": "6.20.3", diff --git a/Editor/editorfe/package.json b/Editor/editorfe/package.json index be645548..7956005b 100644 --- a/Editor/editorfe/package.json +++ b/Editor/editorfe/package.json @@ -25,5 +25,6 @@ }, "devDependencies": { "vite": "^7.0.0" - } + }, + "license": "Apache-2.0" } diff --git a/Editor/editorfe/src/dataAPICatalog.d.ts b/Editor/editorfe/src/dataAPICatalog.d.ts index 343701a8..883a1546 100644 --- a/Editor/editorfe/src/dataAPICatalog.d.ts +++ b/Editor/editorfe/src/dataAPICatalog.d.ts @@ -1,11 +1,11 @@ export type DataAPIValue = null | boolean | number | string | DataAPIValue[] | { [key: string]: DataAPIValue }; export interface DataAPI { id: string; - group: "device" | "system" | "health" | "location" | "calendar" | "reminders" | "photos" | "services" | "music"; + group: "device" | "system" | "health" | "location" | "calendar" | "reminders" | "photos" | "services" | "music" | "notifications" | "maps" | "weather" | "alarms" | "documents" | "contacts" | "home"; value: DataAPIValue; legacy?: string[]; platforms: ("ios" | "macos")[]; - authorization: "none" | "healthRead" | "locationWhenInUse" | "calendarRead" | "remindersRead" | "remindersWrite" | "photosRead" | "serviceAccount" | "musicRead"; + authorization: "none" | "healthRead" | "locationWhenInUse" | "calendarRead" | "remindersRead" | "remindersWrite" | "photosRead" | "serviceAccount" | "musicRead" | "systemAccess"; notes: string; arguments: string[]; asynchronous: boolean; diff --git a/Editor/editorfe/src/dataAPICatalog.js b/Editor/editorfe/src/dataAPICatalog.js index 9ea86dca..79c5d104 100644 --- a/Editor/editorfe/src/dataAPICatalog.js +++ b/Editor/editorfe/src/dataAPICatalog.js @@ -1,3 +1,4 @@ +import { systemAPICatalog } from "./systemAPICatalog.js"; // Descriptive data API metadata, shared by Studio completion and Web mocks. // Native JSExport protocols remain authoritative. This catalog grants no access. const sampleStart = "2026-01-01T00:00:00Z"; @@ -67,7 +68,7 @@ const groupPolicy = { health: { platforms: ["ios"], authorization: "healthRead", notes: "Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain." }, location: { platforms: ["ios"], authorization: "locationWhenInUse", notes: "Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale." }, }; -export const dataAPICatalog = samples.map((sample) => { +export const dataAPICatalog = [...samples.map((sample) => { const method = sample.id.split(".")[1]; const asynchronous = (sample.group === "music" && method === "current") || sample.group === "services" || (["calendar", "reminders", "photos"].includes(sample.group) && !["isAvailable", "authorizationStatus"].includes(method)) || (sample.group === "health" && !["isAvailable", "authorizationStatus"].includes(method)) || (sample.group === "location" && ["current", "requestAuthorization"].includes(method)); @@ -83,4 +84,4 @@ export const dataAPICatalog = samples.map((sample) => { operation: sample.group === "reminders" && ["create", "update", "setCompleted"].includes(method) ? "write" : method === "requestAuthorization" ? "authorization" : ["isAvailable", "authorizationStatus", "isAuthorizedForWidgetUpdates"].includes(method) ? "availability" : "read", mock: "editable", }; -}); +}), ...systemAPICatalog]; diff --git a/Editor/editorfe/src/scriptWidgetAPI.js b/Editor/editorfe/src/scriptWidgetAPI.js index 492fa819..19e53d0f 100644 --- a/Editor/editorfe/src/scriptWidgetAPI.js +++ b/Editor/editorfe/src/scriptWidgetAPI.js @@ -6,7 +6,7 @@ import { dataAPICatalog } from "./dataAPICatalog.js"; // authority; tests verify that this metadata stays aligned with it. export const scriptWidgetAPI = { "schemaVersion": 1, - "runtimeVersion": "1.5", + "runtimeVersion": "1.6", "documentation": "Public JSX surface shared by ScriptWidget Runtime and Studio.", "platforms": { "ios": "16.0", @@ -68,6 +68,7 @@ export const scriptWidgetAPI = { ...Object.fromEntries(storageAPICatalog.map((api) => [api.id, api])), ...Object.fromEntries(dataAPICatalog.map((api) => [api.id, { documentation: api.notes, + minimumRuntimeVersion: api.minimumRuntimeVersion, arguments: api.arguments, returns: api.asynchronous ? "Promise" : typeof api.value === "object" ? "json" : typeof api.value, }])), diff --git a/Editor/editorfe/src/systemAPICatalog.js b/Editor/editorfe/src/systemAPICatalog.js new file mode 100644 index 00000000..73a003e7 --- /dev/null +++ b/Editor/editorfe/src/systemAPICatalog.js @@ -0,0 +1,636 @@ +// Runtime 1.6 system capabilities; metadata never grants native access. +export const systemAPICatalog = [ + { + "id": "$notifications.status", + "group": "notifications", + "value": { + "authorization": "authorized" + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$notifications.pending", + "group": "notifications", + "value": [], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$notifications.schedule", + "group": "notifications", + "value": { + "key": "daily", + "status": "scheduled" + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$notifications.cancel", + "group": "notifications", + "value": { + "key": "daily", + "status": "cancellationRequested" + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "key" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$health.dailyStatistics", + "group": "health", + "value": { + "metric": "steps", + "unit": "count", + "aggregation": "sum", + "timeZone": "UTC", + "items": [ + { + "date": "2026-01-01", + "value": 6840, + "hasSamples": true + } + ] + }, + "platforms": [ + "ios" + ], + "authorization": "healthRead", + "notes": "Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$calendar.create", + "group": "calendar", + "value": { + "id": "sample.event", + "calendarID": "sample.calendar", + "status": "applied", + "replayed": false + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$calendar.update", + "group": "calendar", + "value": { + "id": "sample.event", + "calendarID": "sample.calendar", + "status": "applied", + "replayed": false + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$weather.forecast", + "group": "weather", + "value": { + "provider": "MET Norway", + "attribution": { + "text": "Weather data from MET Norway", + "url": "https://www.met.no/en/free-meteorological-data/Download-services" + }, + "latitude": 37.33, + "longitude": -122.01, + "fetchedAt": "2026-01-01T12:00:00Z", + "isStale": false, + "hours": [ + { + "time": "2026-01-01T12:00:00Z", + "temperatureC": 21, + "windMetersPerSecond": 2, + "precipitationMM": 0, + "condition": "partlycloudy_day" + } + ] + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$alarms.status", + "group": "alarms", + "value": { + "authorization": "authorized" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$alarms.pending", + "group": "alarms", + "value": [], + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$alarms.schedule", + "group": "alarms", + "value": { + "key": "focus", + "status": "scheduled", + "replayed": false + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$alarms.cancel", + "group": "alarms", + "value": { + "key": "focus", + "status": "requested" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "key" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$alarms.stop", + "group": "alarms", + "value": { + "key": "focus", + "status": "requested" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "key" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$alarms.pause", + "group": "alarms", + "value": { + "key": "focus", + "status": "requested" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "key" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$alarms.resume", + "group": "alarms", + "value": { + "key": "focus", + "status": "requested" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "key" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$documents.list", + "group": "documents", + "value": [ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample.json", + "type": "json", + "bytes": 17 + }, + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "Sample.csv", + "type": "csv", + "bytes": 24 + } + ], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$documents.readJSON", + "group": "documents", + "value": { + "goal": 12, + "done": 7 + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "id" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$documents.readCSV", + "group": "documents", + "value": { + "headers": [ + "day", + "value" + ], + "rows": [ + [ + "Monday", + "7" + ], + [ + "Tuesday", + "9" + ] + ], + "truncated": false + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "id" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$contacts.selected", + "group": "contacts", + "value": [ + { + "id": "sample.contact", + "name": "Alex Example", + "organization": "Sample", + "phones": [ + "+1 202 555 0100" + ], + "emails": [ + "alex@example.com" + ] + } + ], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$maps.search", + "group": "maps", + "value": [ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } + ], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$maps.geocode", + "group": "maps", + "value": [ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } + ], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "address" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$maps.reverseGeocode", + "group": "maps", + "value": [ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } + ], + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$maps.snapshot", + "group": "maps", + "value": { + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==", + "width": 256, + "height": 256, + "provider": "Apple Maps" + }, + "platforms": [ + "ios", + "macos" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$home.items", + "group": "home", + "value": [ + { + "id": "sample.light", + "name": "Living Room Lamp", + "kind": "power", + "value": true, + "isCached": true, + "metric": "power", + "unit": "boolean" + }, + { + "id": "scene-sample", + "name": "Evening", + "kind": "scene", + "value": null, + "isCached": true, + "metric": "scene", + "unit": "none" + } + ], + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift", + "operation": "read", + "mock": "editable" + }, + { + "id": "$home.setPower", + "group": "home", + "value": { + "id": "sample.light", + "value": true, + "status": "acknowledged" + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift", + "operation": "write", + "mock": "editable" + }, + { + "id": "$home.runScene", + "group": "home", + "value": { + "id": "scene-sample", + "status": "acknowledged", + "replayed": false + }, + "platforms": [ + "ios" + ], + "authorization": "systemAccess", + "notes": "Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.", + "arguments": [ + "options" + ], + "asynchronous": true, + "minimumRuntimeVersion": "1.6", + "nativeSource": "Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift", + "operation": "write", + "mock": "editable" + } +]; diff --git a/Editor/editorfe/test/dataAPICatalog.test.js b/Editor/editorfe/test/dataAPICatalog.test.js index 7fa19f71..81ebf09c 100644 --- a/Editor/editorfe/test/dataAPICatalog.test.js +++ b/Editor/editorfe/test/dataAPICatalog.test.js @@ -7,7 +7,7 @@ import { scriptWidgetAPI } from "../src/scriptWidgetAPI.js"; test("editor metadata uses the native public API version rather than an app version", async () => { const source = await readFile(new URL("../../../Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift", import.meta.url), "utf8"); assert.ok(source.includes(`static let nativeRuntimeAPIVersion = "${scriptWidgetAPI.runtimeVersion}"`)); - for (const api of dataAPICatalog) assert.ok(["1.0", "1.3", "1.4"].includes(api.minimumRuntimeVersion)); + for (const api of dataAPICatalog) assert.ok(["1.0", "1.3", "1.4", "1.6"].includes(api.minimumRuntimeVersion)); }); test("data catalog exactly covers native JSExport data methods and Promise semantics", async () => { @@ -26,7 +26,7 @@ test("data catalog exactly covers native JSExport data methods and Promise seman assert.ok(scriptWidgetAPI.functions[entry.id], `${entry.id} missing from completion metadata`); assert.ok(entry.notes.length > 20); assert.ok(entry.platforms.length); - assert.ok(["none", "healthRead", "locationWhenInUse", "calendarRead", "remindersRead", "remindersWrite", "photosRead", "serviceAccount", "musicRead"].includes(entry.authorization)); + assert.ok(["none", "healthRead", "locationWhenInUse", "calendarRead", "remindersRead", "remindersWrite", "photosRead", "serviceAccount", "musicRead", "systemAccess"].includes(entry.authorization)); assert.ok(["availability", "authorization", "read", "write"].includes(entry.operation)); assert.equal(entry.mock, "editable"); assert.notEqual(JSON.stringify(entry.value), undefined, entry.id); diff --git a/README.md b/README.md index 7f187550..f09f36d0 100644 --- a/README.md +++ b/README.md @@ -413,3 +413,6 @@ Inspired by: **Project Link:** [https://github.com/everettjf/ScriptWidget](https://github.com/everettjf/ScriptWidget) +## System capabilities under development + +Runtime 1.6 adds opt-in notifications, HealthKit daily history, owned calendar writes, normalized forecasts, AlarmKit timers, imported JSON/CSV, selected contacts, MapKit places/snapshots and selected HomeKit controls. Native user grants and OS permissions are separate from exported widgets; Web Studio offers isolated editable mocks. See the [contracts, nine examples and device acceptance checklist](docs/system-services-api.md). Physical-device verification is required before release. diff --git a/README_CN.md b/README_CN.md index f3f7f485..108a810f 100644 --- a/README_CN.md +++ b/README_CN.md @@ -85,3 +85,7 @@ ScriptWidget 仓库中的源代码使用 [Apache 2.0 License](LICENSE) 发布。 ScriptWidget 名称、Logo、截图与 App Store 商店宣传素材不包含在 Apache 2.0 许可范围内;这些品牌及宣传资产的权利归各自权利人所有。 [Discord](https://discord.gg/eGzEaP6TzR) + +## 正在开发的系统能力 + +Runtime 1.6 新增通知提醒、健康历史、日历写入、天气、闹钟、文件导入、联系人、地图和 HomeKit。每个组件独立授权,Web Studio 提供隔离的模拟数据。[API 文档、九个示例及真机验收清单](docs/system-services-api.md)。当前仍需完成真机验收后再发布。 diff --git a/Scripts/release-readiness.sh b/Scripts/release-readiness.sh index ff0ae4a6..b44e07d1 100755 --- a/Scripts/release-readiness.sh +++ b/Scripts/release-readiness.sh @@ -37,6 +37,7 @@ if [ "${SCRIPTWIDGET_SKIP_XCODE:-0}" != "1" ]; then node Scripts/test-service-authorization.mjs node Scripts/test-storage-atomic.mjs node Scripts/test-icloud-json.mjs + node Scripts/test-system-services.mjs node Scripts/test-storage-files.mjs sh Scripts/macos-widget-link-tests.sh xcodebuild -quiet -project macOS/ScriptWidgetMac.xcodeproj -scheme ScriptWidgetRuntimeTests \ diff --git a/Scripts/test-system-services.mjs b/Scripts/test-system-services.mjs new file mode 100644 index 00000000..9be1672e --- /dev/null +++ b/Scripts/test-system-services.mjs @@ -0,0 +1,31 @@ +// Compile production pure validators/grants and their actual XCTest cases. +// No app host, account, HealthKit query, network or system write is invoked. +import {execFile} from "node:child_process"; +import {promisify} from "node:util"; +import {mkdtemp,readFile,writeFile,rm} from "node:fs/promises"; +import {tmpdir} from "node:os"; +import {join,resolve} from "node:path"; +import {fileURLToPath} from "node:url"; +const exec=promisify(execFile), repo=fileURLToPath(new URL("..",import.meta.url)); +const temporary=await mkdtemp(join(tmpdir(),"scriptwidget-system-tests-")); +const read=path=>readFile(resolve(repo,path),"utf8"); +function section(source,start,end){const a=source.indexOf(start),b=end?source.indexOf(end,a):source.length;if(a<0||b<=a)throw Error(`Source boundary changed: ${start}`);return source.slice(a,b);} +try{ + const developer=(await exec("xcode-select",["-p"])).stdout.trim(); + const platform=join(developer,"Platforms/MacOSX.platform/Developer"),frameworks=join(platform,"Library/Frameworks"),libraries=join(platform,"usr/lib"); + const services=await read("Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift"); + const packages=await read("Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift"); + let helpers="import Foundation\nimport Darwin\nimport CryptoKit\n"+section(packages,"enum ScriptWidgetMetadataFile {","/// Keeps private execution resources") + +section(services,"enum ScriptWidgetSystemServiceError:","struct ScriptWidgetSystemServiceContext") + +section(services,"enum ScriptWidgetSystemOptions {","protocol ScriptWidgetSystemMutationRequest") + +section(services,"protocol ScriptWidgetSystemMutationRequest {","extension ScriptWidgetReminderMutation") + +section(services,"struct ScriptWidgetNativeMutation:",null); + for(const [file,start,end] of [["Notifications","struct ScriptWidgetNotificationOptions","@objc protocol"],["CalendarWrites","struct ScriptWidgetCalendarMutation","enum ScriptWidgetRuntimeCalendarWrites"],["HealthHistory","struct ScriptWidgetHealthHistoryOptions","enum ScriptWidgetRuntimeHealthHistory"],["Alarms","struct ScriptWidgetAlarmOptions","@objc protocol"],["Documents","enum ScriptWidgetDocumentData","@objc protocol"],["Weather","struct ScriptWidgetWeatherOptions","@objc protocol"]])helpers+=section(await read(`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${file}.swift`),start,end); + await writeFile(join(temporary,"helpers.swift"),helpers); + const testSource=(await read("Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift")).replace("@testable import ScriptWidget",""); + await writeFile(join(temporary,"main.swift"),testSource+`\nlet suite=SystemServiceTests.defaultTestSuite\nsuite.run()\nguard let run=suite.testRun,run.executionCount>=8,run.totalFailureCount==0 else {exit(1)}\n`); + const binary=join(temporary,"tests"); + await exec("xcrun",["swiftc","-F",frameworks,"-I",libraries,"-L",libraries,...[frameworks,libraries,join(platform,"Library/PrivateFrameworks"),resolve(developer,"../SharedFrameworks")].flatMap(p=>["-Xlinker","-rpath","-Xlinker",p]), + ...["Widget/API/ScriptWidgetStorageLock.swift","Widget/API/ScriptWidgetStorageNamespaces.swift","Common/ScriptWidgetCloudJSON.swift"].map(p=>resolve(repo,"Shared/ScriptWidgetRuntime",p)),join(temporary,"helpers.swift"),join(temporary,"main.swift"),"-o",binary],{timeout:60000}); + const result=await exec(binary,[],{timeout:30000});process.stdout.write(result.stdout+result.stderr); +}catch(error){process.stderr.write(error.stdout??"");process.stderr.write(error.stderr??"");throw error;}finally{await rm(temporary,{recursive:true,force:true});} diff --git a/Shared/ScriptWidgetRuntime/AI/PromptBuilder.swift b/Shared/ScriptWidgetRuntime/AI/PromptBuilder.swift index 32740135..0d7b71fe 100644 --- a/Shared/ScriptWidgetRuntime/AI/PromptBuilder.swift +++ b/Shared/ScriptWidgetRuntime/AI/PromptBuilder.swift @@ -219,6 +219,27 @@ enum PromptBuilder { query/prompt from future entries or Live Activity presentations. Health Overview supports overview/sleep/activity/workouts parameters; Web Studio supplies editable simulated aggregates, not native access. + Runtime 1.6 adds $notifications.status/pending/schedule/cancel, + $alarms.status/pending/schedule/cancel/stop/pause/resume, + $calendar.create/update, $health.dailyStatistics, + $documents.list/readJSON/readCSV, $contacts.selected, + $maps.search/geocode/reverseGeocode/snapshot, + $weather.forecast and $home.items/setPower/runScene. + These require Package 2.0 minimumRuntimeVersion 1.6. Declare the + matching permission; Calendar writes also require calendarWrite. + Weather requires weather, network and api.met.no; return and display + provider attribution. New capabilities need native per-widget System + Access except Health, which uses Health Settings review. Copies do + not inherit grants. All calls share eight queries and reject in future + entries/Live Activities; writes require explicit native user actions. + Persist a canonical requestID UUID before calendar/alarm/scene writes; + uncertain outcomes require inspection, never a blind new operation. + Native replay receipts are bounded and completed ones expire after + seven days. Documents use imported native UUIDs, never arbitrary paths. + Contacts/Home expose native selections only. Home values are cached, + and scene actions may require system authentication. AlarmKit needs + iOS/iPadOS 26; native macOS must show unavailable. Mocks do not prove + native authorization, system delivery or physical accessory state. 16. Location needs the location package permission and approval in the main app. Widget access is separate: use isAuthorizedForWidgetUpdates when explaining widget setup, never infer permission from cached data. diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptManager.swift b/Shared/ScriptWidgetRuntime/Common/ScriptManager.swift index 9545df85..1da09ff2 100644 --- a/Shared/ScriptWidgetRuntime/Common/ScriptManager.swift +++ b/Shared/ScriptWidgetRuntime/Common/ScriptManager.swift @@ -1027,17 +1027,21 @@ final class ScriptManager: @unchecked Sendable { guard let scriptDirPath = self.getPackagePathFromPackageName(packageName: packageName) else { return false } let package = ScriptWidgetPackage(path: scriptDirPath) let deleteResult: Bool + var retiredOwner: String? if let storageContext { do { guard scriptDirectory.standardizedFileURL.resolvingSymlinksInPath() == storageContext.libraryRoot else { throw ScriptWidgetStorageNamespaceError.conflict } + retiredOwner = (try? storageContext.boundDirectory(name: packageName, role: .source))?.ownerID try storageContext.relocate(name: packageName) deleteResult = true } catch { return false } } else { deleteResult = package.delete() } if deleteResult { - NotificationCenter.default.post(name: Self.packageRemovedNotification, object: packageName) + var info: [String: Any] = [:] + if let retiredOwner, let storageContext { info = ["retiredOwner": retiredOwner, "storageContext": storageContext] } + NotificationCenter.default.post(name: Self.packageRemovedNotification, object: packageName, userInfo: info) } let deleteBuildResult = removeBuildScriptPackage(package: package) diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptMetadata.swift b/Shared/ScriptWidgetRuntime/Common/ScriptMetadata.swift index a15c8f62..37a4fb37 100644 --- a/Shared/ScriptWidgetRuntime/Common/ScriptMetadata.swift +++ b/Shared/ScriptWidgetRuntime/Common/ScriptMetadata.swift @@ -60,6 +60,7 @@ enum WidgetPackagePermission: String, Codable, CaseIterable, Identifiable { case music case storage case icloud + case notifications, calendarWrite, maps, weather, alarms, documents, contacts, home case files var id: String { rawValue } @@ -306,6 +307,13 @@ enum WidgetPackageManifestValidator { error("unsupported_minimum_runtime", "This package requires a newer or incompatible ScriptWidget Runtime. Update the app before running it.") } } + let systemPermissions: Set = [.notifications, .calendarWrite, .maps, .weather, .alarms, .documents, .contacts, .home] + if manifest.permissions.contains(where: { systemPermissions.contains($0) }), !WidgetRuntimeRequirement.supports("1.6", current: manifest.minimumRuntimeVersion ?? "0.0") { + error("system_runtime", "System service capabilities require minimumRuntimeVersion 1.6 or later.") + } + if manifest.permissions.contains(.calendarWrite), !manifest.permissions.contains(.calendar) { + error("calendar_write_permission", "calendarWrite also requires calendar.") + } if manifest.permissions.contains(.icloud), !WidgetRuntimeRequirement.supports("1.5", current: manifest.minimumRuntimeVersion ?? "0.0") { error("icloud_runtime", "iCloud JSON requires minimumRuntimeVersion 1.5 or later.") } diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift index 6fcfa8d5..97b9a030 100644 --- a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift +++ b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift @@ -433,7 +433,7 @@ struct ScriptWidgetBuildManifest: Codable, Equatable { enum ScriptWidgetBuildContract { static let runtimeAPIVersion = "1.0" - static let nativeRuntimeAPIVersion = "1.5" + static let nativeRuntimeAPIVersion = "1.6" static let compilerFingerprint = "scriptwidget-babel-v3" } diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift new file mode 100644 index 00000000..736883c7 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift @@ -0,0 +1,149 @@ +import SwiftUI +import UniformTypeIdentifiers +import Contacts +import UserNotifications +#if os(iOS) && canImport(AlarmKit) +import AlarmKit +#endif + +struct ScriptWidgetSystemAccessView: View { + let package: ScriptWidgetPackage + @Environment(\.dismiss) private var dismiss + @State private var grant = ScriptWidgetSystemAccessGrant() + @State private var original = ScriptWidgetSystemAccessGrant() + @State private var message = "" + @State private var contacts: [ScriptWidgetContactChoice] = [] + @State private var home: [ScriptWidgetHomeChoice] = [] + @State private var importing = false + @State private var busy = false + static func supports(_ package: ScriptWidgetPackage) -> Bool { + package.readManifest()?.permissions.contains(where: { ScriptWidgetSystemAccessGrant.capabilities.contains($0.rawValue) }) == true + } + static func store(_ package: ScriptWidgetPackage) throws -> ScriptWidgetSystemAccessStore { + guard let scope = package.managedScope, let binding = scope.binding else { throw ScriptWidgetSystemServiceError.permissionDenied } + try scope.validate(name: package.name) + return .init(container: scope.context.container, owner: binding.ownerID, validate: { try scope.validate(name: package.name) }) + } + var body: some View { + NavigationStack { + Form { + Section("Access for This Widget") { + Text(package.name).font(.headline) + Text("Only enable capabilities you want this installed widget to use. Copies require their own access. System writes require a button or declared action.") + ForEach((package.readManifest()?.permissions ?? []).filter { ScriptWidgetSystemAccessGrant.capabilities.contains($0.rawValue) }, id: \.rawValue) { permission in + Toggle(Self.label(permission.rawValue), isOn: Binding(get: { grant.permissions.contains(permission.rawValue) }, set: { on in + grant.permissions.removeAll { $0 == permission.rawValue }; if on { grant.permissions.append(permission.rawValue) } + })) + } + Button("Save Access and Selections") { run { + let store = try Self.store(package); try store.save(grant, expected: original); reload(); message = "Access saved. System authorization may also be required below." + } } + Text("Turning access off takes effect for subsequent system calls. It does not delete imported files or cancel previously scheduled notifications or alarms; cancel those before revoking access.").font(.footnote) + } + if declared("notifications") { + Section("Notifications") { + Button("Authorize Notifications") { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { granted, _ in DispatchQueue.main.async { message = granted ? "Notifications authorized." : "Notifications are not authorized." } } + } + } + } + if declared("alarms") { + Section("Alarms") { + #if os(iOS) && canImport(AlarmKit) + if #available(iOS 26.0, *) { + Button("Authorize Alarms") { Task { do { let status = try await AlarmManager.shared.requestAuthorization(); message = "Alarm authorization: \(String(describing: status))" } catch { message = "Alarm authorization could not complete." } } } + } else { Text("Alarms require iOS or iPadOS 26 or later.") } + #else + Text("AlarmKit is unavailable on this platform.") + #endif + } + } + if declared("documents") { + Section("Imported Data Files") { + Text("Import JSON or CSV as a private copy, up to 256 KiB per file and eight files per widget. The original file is never modified. Reimport to capture later edits.") + Button("Import JSON or CSV") { importing = true } + .disabled(!original.permissions.contains("documents")) + ForEach(grant.documents, id: \.id) { item in + VStack(alignment: .leading) { Text(item.name); Text("\(item.type) · \(item.bytes) bytes · \(item.id)").font(.caption).textSelection(.enabled) } + } + Text("File identifiers are available through $documents.list().") + } + } + if declared("contacts") { + Section("Selected Contacts") { + Text("The widget can read names, organization, up to three phone numbers and three email addresses for selected contacts only. The picker lists up to 200 contacts the system shares with this app; at most 20 can be selected.") + Button("Authorize and Load Contacts") { + CNContactStore().requestAccess(for: .contacts) { allowed, _ in + ScriptWidgetSystemServices.queue.async { + let values = allowed ? (try? ScriptWidgetContactProvider.choices()) ?? [] : [] + DispatchQueue.main.async { contacts = values; message = allowed ? "Choose contacts and save access." : "Contacts are not authorized." } + } + } + } + ForEach(contacts) { item in Toggle(item.name, isOn: selection(\.contacts, id: item.id)) } + } + } + if declared("home") { + Section("Selected Home Accessories and Scenes") { + Text("Selected power controls can be switched by explicit actions. Selected scenes may also operate locks, doors or other accessories according to your Home configuration; choose only scenes you trust this widget to run. Sensor readings are cached HomeKit values, not guaranteed live readings.") + #if os(iOS) + Button("Authorize and Load Home") { + ScriptWidgetHomeProvider.shared.load { result in + switch result { case .success(let values): home = values; message = "Choose items and save access."; case .failure: message = "Home could not be loaded. Check system authorization, then retry." } + } + } + ForEach(home) { item in Toggle("\(item.name) (\(item.kind))", isOn: selection(\.home, id: item.id)) } + #else + Text("Native HomeKit access is currently supported on iPhone and iPad.") + #endif + } + } + if declared("calendarWrite") { Section("Calendar Writes") { Text("Authorize Calendar and select calendars in app Settings. This API creates single events and updates only events this installation created. Recurring-event edits and deletion are not exposed.") } } + if declared("maps") || declared("weather") { Section("Network Services") { Text("Map requests send the supplied place or coordinate to Apple Maps. Weather sends rounded coordinates to MET Norway and also requires network permission for api.met.no. No current device location is read automatically.") } } + if !message.isEmpty { Section { Text(message).accessibilityIdentifier("system-access-message") } } + } + .disabled(busy) + .navigationTitle("System Access") + .toolbar { ToolbarItem(placement: .confirmationAction) { Button("Done") { dismiss() } } } + .task { reload() } + .fileImporter(isPresented: $importing, allowedContentTypes: [.json, .commaSeparatedText], allowsMultipleSelection: false) { result in + run { + let url = try result.get().first! + let opened = url.startAccessingSecurityScopedResource(); defer { if opened { url.stopAccessingSecurityScopedResource() } } + let keys = try url.resourceValues(forKeys: [.isRegularFileKey, .isSymbolicLinkKey, .fileSizeKey]) + guard keys.isRegularFile == true, keys.isSymbolicLink != true, let size = keys.fileSize, size <= 262144 else { throw ScriptWidgetSystemServiceError.invalidOptions } + let data = try ScriptWidgetDocumentData.importedFile(url) + guard data.count <= 262144 else { throw ScriptWidgetSystemServiceError.limitExceeded } + let type = url.pathExtension.lowercased() + if type == "json" { _ = try ScriptWidgetDocumentData.json(data) } + else if type == "csv" { _ = try ScriptWidgetDocumentData.csv(data) } + else { throw ScriptWidgetSystemServiceError.invalidOptions } + let store = try Self.store(package) + let before = try store.load(); var next = before + guard before.permissions.contains("documents"), before.documents.count < 8 else { throw ScriptWidgetSystemServiceError.permissionDenied } + let id = UUID().uuidString.lowercased() + next.documents.append(.init(id: id, name: String(url.lastPathComponent.prefix(80)), type: type, bytes: data.count)) + try store.validate() + guard ScriptWidgetPackageFiles.write(data, root: store.container, relative: store.directory + "/documents/" + id) else { throw ScriptWidgetSystemServiceError.unavailable } + try store.save(next, expected: before) + reload(); message = "Imported a private data copy. The original file is unchanged." + } + } + } + #if os(macOS) + .frame(minWidth: 560, minHeight: 600) + #endif + } + private static func label(_ name: String) -> String { + ["notifications":"Schedule local notifications", "calendarWrite":"Create and update this widget’s events", "maps":"Look up places and generate maps", "weather":"Fetch weather for supplied coordinates", "alarms":"Schedule alarms and timers", "documents":"Read imported JSON and CSV copies", "contacts":"Read selected contacts", "home":"Read and control selected Home items"][name] ?? name + } + private func declared(_ name: String) -> Bool { package.readManifest()?.permissions.contains(where: { $0.rawValue == name }) == true } + private func selection(_ path: WritableKeyPath, id: String) -> Binding { + Binding(get: { grant[keyPath: path].contains(id) }, set: { on in + grant[keyPath: path].removeAll { $0 == id } + if on && grant[keyPath: path].count < 20 { grant[keyPath: path].append(id) } + }) + } + private func reload() { do { let value = try Self.store(package).load(); grant = value; original = value } catch { message = ScriptWidgetSystemServices.safeError(error) } } + private func run(_ work: () throws -> Void) { do { try work() } catch { message = ScriptWidgetSystemServices.safeError(error) } } +} diff --git a/Shared/ScriptWidgetRuntime/Resource/widget.schema.json b/Shared/ScriptWidgetRuntime/Resource/widget.schema.json index afb4b19a..d9cdc1e2 100644 --- a/Shared/ScriptWidgetRuntime/Resource/widget.schema.json +++ b/Shared/ScriptWidgetRuntime/Resource/widget.schema.json @@ -27,7 +27,7 @@ }, "permissions": { "type": "array", "uniqueItems": true, - "items": { "enum": ["network", "location", "health", "calendar", "reminders", "remindersWrite", "photos", "services", "music", "storage", "icloud", "files"] } + "items": { "enum": ["network", "location", "health", "calendar", "reminders", "remindersWrite", "photos", "services", "music", "storage", "icloud", "notifications", "calendarWrite", "maps", "weather", "alarms", "documents", "contacts", "home", "files"] } }, "networkDomains": { "type": "array", "uniqueItems": true, diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift new file mode 100644 index 00000000..b1dd7b51 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift @@ -0,0 +1,120 @@ +import Foundation +import JavaScriptCore +#if os(iOS) && canImport(AlarmKit) +import AlarmKit +import SwiftUI +#endif + +struct ScriptWidgetAlarmOptions { + let key: String + let title: String + let date: Date? + let seconds: Double? + init(_ options: [String: Any], now: Date = Date()) throws { + try ScriptWidgetSystemOptions.fields(options, ["requestID", "key", "title", "date", "seconds"]) + key = try ScriptWidgetSystemOptions.text(options["key"], maximum: 64) + guard ScriptWidgetSystemOptions.validKey(key), (options["date"] == nil) != (options["seconds"] == nil) else { throw ScriptWidgetSystemServiceError.invalidOptions } + title = try ScriptWidgetSystemOptions.text(options["title"], maximum: 128) + date = try options["date"].map(ScriptWidgetSystemOptions.date) + seconds = try options["seconds"].map { try ScriptWidgetSystemOptions.number($0, range: 60...86400) } + if let date { guard date > now, date.timeIntervalSince(now) <= 366 * 86400 else { throw ScriptWidgetSystemServiceError.invalidOptions } } + } + static func id(owner: String, key: String) throws -> UUID { + guard ScriptWidgetSystemOptions.validKey(key), UUID(uuidString: owner) != nil else { throw ScriptWidgetSystemServiceError.invalidOptions } + let hex = Array(ScriptWidgetCloudJSONStore.hash(Data((owner + ":alarm:" + key).utf8)).prefix(32)) + return UUID(uuidString: String(hex[0..<8]) + "-" + String(hex[8..<12]) + "-" + String(hex[12..<16]) + "-" + String(hex[16..<20]) + "-" + String(hex[20..<32]))! + } +} +@objc protocol ScriptWidgetRuntimeAlarmsExports: JSExport { + static func status() -> ScriptWidgetRuntimePromise + static func pending() -> ScriptWidgetRuntimePromise + static func schedule(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func cancel(_ key: String) -> ScriptWidgetRuntimePromise + static func stop(_ key: String) -> ScriptWidgetRuntimePromise + static func pause(_ key: String) -> ScriptWidgetRuntimePromise + static func resume(_ key: String) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeAlarms: NSObject, ScriptWidgetRuntimeAlarmsExports { + static func status() -> ScriptWidgetRuntimePromise { run("status") } + static func pending() -> ScriptWidgetRuntimePromise { run("pending") } + static func schedule(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { run("schedule", options ?? [:]) } + static func cancel(_ key: String) -> ScriptWidgetRuntimePromise { run("cancel", ["key": key]) } + static func stop(_ key: String) -> ScriptWidgetRuntimePromise { run("stop", ["key": key]) } + static func pause(_ key: String) -> ScriptWidgetRuntimePromise { run("pause", ["key": key]) } + static func resume(_ key: String) -> ScriptWidgetRuntimePromise { run("resume", ["key": key]) } + static func retire(owner: String, backend: any ScriptWidgetStorageBackend) { + #if os(iOS) && canImport(AlarmKit) + if #available(iOS 26.0, *) { + guard let keys = try? backend.readValue(forKey: "ScriptWidget.SystemServices.alarmKeys.v1." + owner) as? [String], keys.count <= 32 else { return } + for key in keys where ScriptWidgetSystemOptions.validKey(key) { + if let id = try? ScriptWidgetAlarmOptions.id(owner: owner, key: key) { try? AlarmManager.shared.cancel(id: id) } + } + } + #endif + } + private static func run(_ method: String, _ options: [String: Any] = [:]) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.alarms, writing: !["status", "pending"].contains(method)) { context, finish in + #if os(iOS) && canImport(AlarmKit) + guard #available(iOS 26.0, *) else { throw ScriptWidgetSystemServiceError.unavailable } + let manager = AlarmManager.shared + if method == "status" { finish(.success(["authorization": String(describing: manager.authorizationState)])); return } + guard manager.authorizationState == .authorized else { throw ScriptWidgetSystemServiceError.permissionDenied } + let backend = context.state.executionSnapshot!.context.defaults + let indexKey = context.access.privateKey("alarmKeys") + guard let operationResult = ScriptWidgetStorageLock.withExclusiveAccess(container: context.access.container, namespace: indexKey, operation: { Result { + guard backend.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } + let raw = try backend.readValue(forKey: indexKey) + guard raw == nil || raw is [String], let keys = (raw as? [String] ?? []) as [String]?, keys.count <= 32, keys.allSatisfy(ScriptWidgetSystemOptions.validKey), Set(keys).count == keys.count else { throw ScriptWidgetSystemServiceError.unavailable } + if method == "pending" { + let alarms = try manager.alarms + let rows = try keys.compactMap { key -> [String: Any]? in + let id = try ScriptWidgetAlarmOptions.id(owner: context.owner, key: key) + guard let alarm = alarms.first(where: { $0.id == id }) else { return nil } + return ["key": key, "state": String(describing: alarm.state)] + } + return rows + } + let key = try ScriptWidgetSystemOptions.text(options["key"], maximum: 64) + let id = try ScriptWidgetAlarmOptions.id(owner: context.owner, key: key) + if method != "schedule" { + try context.validate() + switch method { case "cancel": try manager.cancel(id: id); case "stop": try manager.stop(id: id); case "pause": try manager.pause(id: id); default: try manager.resume(id: id) } + return ["key": key, "status": "requested"] + } + let value = try ScriptWidgetAlarmOptions(options) + let request = try ScriptWidgetNativeMutation(options, scope: "alarms", operation: "schedule") + let ledgerKey = context.access.privateKey("alarmReceipts") + let result = try ScriptWidgetReminderMutationLedger.perform(request, container: context.access.container, backend: backend, key: ledgerKey, validate: context.validate) { beforeCommit in + guard keys.contains(key) || keys.count < 32 else { throw ScriptWidgetSystemServiceError.limitExceeded } + // Never silently replace a running alarm. Cancel explicitly first. + guard try !manager.alarms.contains(where: { $0.id == id }) else { throw ScriptWidgetSystemServiceError.staleRequest } + try backend.writeValue(Array(Set(keys + [key])).sorted(), forKey: indexKey) + guard backend.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } + try beforeCommit() + let box = ScriptWidgetSystemCompletionBox() + Task { + do { + try context.validate() + let alert = AlarmPresentation.Alert(title: LocalizedStringResource(stringLiteral: value.title), stopButton: AlarmButton(text: "Stop", textColor: .white, systemImageName: "stop.fill")) + let presentation = AlarmPresentation(alert: alert, countdown: value.seconds.map { _ in .init(title: LocalizedStringResource(stringLiteral: value.title)) }) + let attributes = AlarmAttributes(presentation: presentation, metadata: ScriptWidgetAlarmMetadata(), tintColor: .teal) + let configuration: AlarmManager.AlarmConfiguration = value.seconds.map { .timer(duration: $0, attributes: attributes) } ?? .alarm(schedule: value.date.map { .fixed($0) }, attributes: attributes) + _ = try await manager.schedule(id: id, configuration: configuration) + box.finish(.success(id.uuidString.lowercased())) + } catch { box.finish(.failure(ScriptWidgetSystemServiceError.outcomeUnknown)) } + } + return try box.wait() + } + return ["key": key, "status": "scheduled", "replayed": result["replayed"] ?? false] + } }) else { throw ScriptWidgetSystemServiceError.unavailable } + finish(.success(try operationResult.get())) + #else + _ = context; throw ScriptWidgetSystemServiceError.unavailable + #endif + } + } +} +#if os(iOS) && canImport(AlarmKit) +@available(iOS 26.0, *) +struct ScriptWidgetAlarmMetadata: AlarmMetadata { } +#endif diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift index 8d2d7b77..0fdb1098 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift @@ -12,6 +12,8 @@ import EventKit static func authorizationStatus() -> String static func requestAuthorization() -> ScriptWidgetRuntimePromise static func calendars() -> ScriptWidgetRuntimePromise + static func create(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func update(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise static func events(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise } @@ -409,6 +411,8 @@ struct ScriptWidgetCalendarProvider { static func calendars() -> ScriptWidgetRuntimePromise { read(query: nil, error: nil) } + static func create(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { ScriptWidgetRuntimeCalendarWrites.mutate(options ?? [:], updating: false) } + static func update(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { ScriptWidgetRuntimeCalendarWrites.mutate(options ?? [:], updating: true) } static func events(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { do { return read(query: try ScriptWidgetCalendarQuery(options), error: nil) } catch { return read(query: nil, error: error.localizedDescription) } diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift new file mode 100644 index 00000000..9fb79ed4 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift @@ -0,0 +1,77 @@ +import Foundation +import JavaScriptCore +import EventKit + +struct ScriptWidgetCalendarMutation: ScriptWidgetSystemMutationRequest { + let requestID: String + let listID: String + let fingerprint: String + let title: String + let start: Date + let end: Date + let allDay: Bool + let eventID: String? + init(_ options: [String: Any], updating: Bool) throws { + try ScriptWidgetSystemOptions.fields(options, updating ? ["requestID", "calendarID", "id", "title", "start", "end", "allDay"] : ["requestID", "calendarID", "title", "start", "end", "allDay"]) + requestID = try ScriptWidgetSystemOptions.text(options["requestID"], maximum: 36) + guard UUID(uuidString: requestID)?.uuidString.lowercased() == requestID else { throw ScriptWidgetSystemServiceError.invalidOptions } + listID = try ScriptWidgetSystemOptions.text(options["calendarID"], maximum: 256) + title = try ScriptWidgetSystemOptions.text(options["title"], maximum: 512) + start = try ScriptWidgetSystemOptions.date(options["start"]); end = try ScriptWidgetSystemOptions.date(options["end"]) + guard end > start, end.timeIntervalSince(start) <= 366 * 86400 else { throw ScriptWidgetSystemServiceError.invalidOptions } + allDay = try options["allDay"].map(ScriptWidgetSystemOptions.boolean) ?? false + eventID = updating ? try ScriptWidgetSystemOptions.text(options["id"], maximum: 2048) : nil + fingerprint = ScriptWidgetCloudJSONStore.hash(try JSONSerialization.data(withJSONObject: ["operation": updating ? "update" : "create", "options": options], options: [.sortedKeys, .withoutEscapingSlashes])) + } +} + +enum ScriptWidgetRuntimeCalendarWrites { + static func mutate(_ options: [String: Any], updating: Bool) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.calendarWrite, writing: true) { context, finish in + let request = try ScriptWidgetCalendarMutation(options, updating: updating) + guard context.state.package.readManifest()?.permissions.contains(.calendar) == true, + ScriptWidgetRuntimeCalendar.systemAuthorizationStatus() == "authorized" else { throw ScriptWidgetSystemServiceError.permissionDenied } + let snapshot = context.state.executionSnapshot! + let selected = try ScriptWidgetCalendarSelection.load(container: snapshot.context.container) + guard selected.allows(request.listID) else { throw ScriptWidgetSystemServiceError.permissionDenied } + let store = EKEventStore() + guard let calendar = store.calendar(withIdentifier: request.listID), calendar.allowedEntityTypes.contains(.event), calendar.allowsContentModifications else { throw ScriptWidgetSystemServiceError.permissionDenied } + let ownershipKey = context.access.privateKey("ownedEvents") + guard let response = ScriptWidgetStorageLock.withExclusiveAccess(container: snapshot.context.container, namespace: ownershipKey, operation: { Result { + guard snapshot.context.defaults.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } + let raw = try snapshot.context.defaults.readValue(forKey: ownershipKey) + guard raw == nil || raw is [String: String] else { throw ScriptWidgetSystemServiceError.unavailable } + var owned = raw as? [String: String] ?? [:] + guard owned.count <= 128, owned.allSatisfy({ !$0.key.isEmpty && $0.key.utf8.count <= 2048 && $0.value.utf8.count <= 256 }) else { throw ScriptWidgetSystemServiceError.limitExceeded } + let event: EKEvent + if let id = request.eventID { + guard owned[id] == request.listID, let existing = store.event(withIdentifier: id), existing.calendar.calendarIdentifier == request.listID, + !existing.hasRecurrenceRules else { throw ScriptWidgetSystemServiceError.permissionDenied } + event = existing + } else { + guard owned.count < 128 else { throw ScriptWidgetSystemServiceError.limitExceeded } + event = EKEvent(eventStore: store); event.calendar = calendar + } + event.title = request.title; event.startDate = request.start; event.endDate = request.end; event.isAllDay = request.allDay + let result = try selected.withStableAccess(container: snapshot.context.container, kind: .calendar) { + try ScriptWidgetReminderMutationLedger.perform(request, container: snapshot.context.container, backend: snapshot.context.defaults, + key: context.access.privateKey("calendarReceipts"), validate: { + try context.validate() + guard ScriptWidgetRuntimeCalendar.systemAuthorizationStatus() == "authorized" else { throw ScriptWidgetSystemServiceError.permissionDenied } + }) { beforeCommit in + try beforeCommit() + try store.save(event, span: .thisEvent, commit: true) + guard let id = event.eventIdentifier else { throw ScriptWidgetSystemServiceError.outcomeUnknown } + return id + } + } + guard let id = result["id"] as? String else { throw ScriptWidgetSystemServiceError.outcomeUnknown } + owned[id] = request.listID + try snapshot.context.defaults.writeValue(owned, forKey: ownershipKey) + guard snapshot.context.defaults.synchronize() else { throw ScriptWidgetSystemServiceError.outcomeUnknown } + return ["id": id, "calendarID": request.listID, "status": "applied", "replayed": result["replayed"] ?? false] + } }) else { throw ScriptWidgetSystemServiceError.unavailable } + finish(.success(try response.get())) + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift new file mode 100644 index 00000000..982e4fee --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift @@ -0,0 +1,51 @@ +import Foundation +import JavaScriptCore +import Contacts + +struct ScriptWidgetContactChoice: Identifiable { + let id: String + let name: String +} +enum ScriptWidgetContactProvider { + static var authorized: Bool { + let status = CNContactStore.authorizationStatus(for: .contacts) + #if os(iOS) + if #available(iOS 18.0, *), status == .limited { return true } + #endif + return status == .authorized + } + static let keys = [CNContactIdentifierKey, CNContactGivenNameKey, CNContactFamilyNameKey, CNContactOrganizationNameKey, CNContactPhoneNumbersKey, CNContactEmailAddressesKey] + static func choices() throws -> [ScriptWidgetContactChoice] { + guard authorized else { throw ScriptWidgetSystemServiceError.permissionDenied } + let request = CNContactFetchRequest(keysToFetch: [CNContactIdentifierKey as CNKeyDescriptor, CNContactGivenNameKey as CNKeyDescriptor, CNContactFamilyNameKey as CNKeyDescriptor]) + request.sortOrder = .userDefault + var result: [ScriptWidgetContactChoice] = [] + try CNContactStore().enumerateContacts(with: request) { contact, stop in + result.append(.init(id: contact.identifier, name: String((contact.givenName + " " + contact.familyName).prefix(256)))) + if result.count == 200 { stop.pointee = true } + } + return result + } + static func selected(_ ids: [String]) throws -> [[String: Any]] { + guard authorized, ids.count <= 20 else { throw ScriptWidgetSystemServiceError.permissionDenied } + if ids.isEmpty { return [] } + let contacts = try CNContactStore().unifiedContacts(matching: CNContact.predicateForContacts(withIdentifiers: ids), keysToFetch: keys.map { $0 as CNKeyDescriptor }) + return contacts.prefix(20).filter { ids.contains($0.identifier) }.map { contact in + ["id": contact.identifier, "name": String((contact.givenName + " " + contact.familyName).prefix(256)), "organization": String(contact.organizationName.prefix(256)), + "phones": contact.phoneNumbers.prefix(3).map { String($0.value.stringValue.prefix(128)) }, "emails": contact.emailAddresses.prefix(3).map { String(($0.value as String).prefix(256)) }] + } + } +} +@objc protocol ScriptWidgetRuntimeContactsExports: JSExport { + static func selected() -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeContacts: NSObject, ScriptWidgetRuntimeContactsExports { + static func selected() -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.contacts) { context, finish in + let ids = try context.access.load().contacts + let result = try ScriptWidgetContactProvider.selected(ids) + guard ScriptWidgetContactProvider.authorized else { throw ScriptWidgetSystemServiceError.permissionDenied } + finish(.success(result)) + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift new file mode 100644 index 00000000..2f33c258 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift @@ -0,0 +1,89 @@ +import Foundation +import Darwin +import JavaScriptCore + +/// Bounded RFC-4180-style CSV parser. JSON/CSV are imported as private copies; +/// no bookmark, user pathname or executable document is exposed to scripts. +enum ScriptWidgetDocumentData { + static func importedFile(_ url: URL) throws -> Data { + // The security-scoped picker authorizes this exact native URL. Opening + // the parent directory is unnecessary and can fail in the Mac sandbox. + let fd = open(url.path, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC) + guard fd >= 0 else { throw ScriptWidgetSystemServiceError.unavailable } + defer { close(fd) } + var before = stat() + guard fstat(fd, &before) == 0, before.st_mode & S_IFMT == S_IFREG, before.st_nlink == 1, + before.st_size >= 0, before.st_size <= 262144 else { throw ScriptWidgetSystemServiceError.invalidOptions } + var result = Data(); var buffer = [UInt8](repeating: 0, count: 8192) + while true { + let count = Darwin.read(fd, &buffer, buffer.count) + if count < 0 && errno == EINTR { continue } + guard count >= 0, result.count + count <= 262144 else { throw ScriptWidgetSystemServiceError.limitExceeded } + if count == 0 { break }; result.append(contentsOf: buffer.prefix(count)) + } + var after = stat(), current = stat() + guard fstat(fd, &after) == 0, lstat(url.path, ¤t) == 0, + before.st_dev == after.st_dev, before.st_ino == after.st_ino, after.st_ino == current.st_ino, after.st_dev == current.st_dev, + before.st_size == after.st_size, before.st_size == result.count, after.st_nlink == 1, current.st_mode & S_IFMT == S_IFREG, + before.st_mtimespec.tv_sec == after.st_mtimespec.tv_sec, before.st_mtimespec.tv_nsec == after.st_mtimespec.tv_nsec, + before.st_ctimespec.tv_sec == after.st_ctimespec.tv_sec, before.st_ctimespec.tv_nsec == after.st_ctimespec.tv_nsec else { throw ScriptWidgetSystemServiceError.scopeChanged } + return result + } + static func csv(_ data: Data) throws -> [String: Any] { + guard data.count <= 262144, var text = String(data: data, encoding: .utf8) else { throw ScriptWidgetSystemServiceError.invalidOptions } + if text.hasPrefix("\u{feff}") { text.removeFirst() } + var rows: [[String]] = [], row: [String] = [], field = "" + var quoted = false, closed = false, cursor = text.startIndex + func finishField() throws { + guard field.utf8.count <= 8192, row.count < 32 else { throw ScriptWidgetSystemServiceError.limitExceeded } + row.append(field); field = ""; closed = false + } + func finishRow() throws { + try finishField() + guard rows.count < 501 else { throw ScriptWidgetSystemServiceError.limitExceeded } + rows.append(row); row = [] + } + while cursor < text.endIndex { + let c = text[cursor]; cursor = text.index(after: cursor) + if quoted { + if c == "\"" { + if cursor < text.endIndex && text[cursor] == "\"" { field.append("\""); cursor = text.index(after: cursor) } + else { quoted = false; closed = true } + } else { field.append(c) } + } else if c == "\"" { + guard field.isEmpty && !closed else { throw ScriptWidgetSystemServiceError.invalidOptions }; quoted = true + } else if c == "," { try finishField() } + else if c == "\r\n" || c == "\n" || c == "\r" { try finishRow() } + else { guard !closed else { throw ScriptWidgetSystemServiceError.invalidOptions }; field.append(c) } + guard field.utf8.count <= 8192 else { throw ScriptWidgetSystemServiceError.limitExceeded } + } + guard !quoted else { throw ScriptWidgetSystemServiceError.invalidOptions } + if !field.isEmpty || !row.isEmpty || closed { try finishRow() } + guard let headers = rows.first, !headers.isEmpty, headers.allSatisfy({ !$0.isEmpty }), Set(headers).count == headers.count, + rows.dropFirst().allSatisfy({ $0.count == headers.count }) else { throw ScriptWidgetSystemServiceError.invalidOptions } + return ["headers": headers, "rows": Array(rows.dropFirst()), "truncated": false] + } + static func json(_ data: Data) throws -> Any { + guard data.count <= 262144 else { throw ScriptWidgetSystemServiceError.limitExceeded } + let object = try JSONSerialization.jsonObject(with: data) + guard object is [String: Any] || object is [Any] else { throw ScriptWidgetSystemServiceError.invalidOptions }; return object + } +} +@objc protocol ScriptWidgetRuntimeDocumentsExports: JSExport { + static func list() -> ScriptWidgetRuntimePromise + static func readJSON(_ id: String) -> ScriptWidgetRuntimePromise + static func readCSV(_ id: String) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeDocuments: NSObject, ScriptWidgetRuntimeDocumentsExports { + static func list() -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.documents) { context, finish in + finish(.success(try context.access.load().documents.map { ["id": $0.id, "name": $0.name, "type": $0.type, "bytes": $0.bytes] as [String: Any] })) + } + } + static func readJSON(_ id: String) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.documents) { context, finish in finish(.success(try ScriptWidgetDocumentData.json(context.access.readDocument(id, type: "json")))) } + } + static func readCSV(_ id: String) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.documents) { context, finish in finish(.success(try ScriptWidgetDocumentData.csv(context.access.readDocument(id, type: "csv")))) } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift index 9a1c23a1..8faee4cd 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift @@ -44,6 +44,7 @@ enum ScriptWidgetHealthAccessPolicy { static func sleepSummary(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise static func activitySummary(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise static func workouts(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func dailyStatistics(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise } #if canImport(HealthKit) @@ -74,7 +75,7 @@ import HealthKit readTypes.insert(HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!) readTypes.insert(HKObjectType.activitySummaryType()) readTypes.insert(HKObjectType.workoutType()) - for identifier in [HKQuantityTypeIdentifier.distanceWalkingRunning, .distanceCycling, .distanceSwimming] { + for identifier in [HKQuantityTypeIdentifier.distanceWalkingRunning, .distanceCycling, .distanceSwimming, .dietaryWater, .bodyMass] { if let type = HKObjectType.quantityType(forIdentifier: identifier) { readTypes.insert(type) } } return readTypes @@ -672,3 +673,5 @@ extension ScriptWidgetRuntimeHealth { } } } + +extension ScriptWidgetRuntimeHealth { @objc static func dailyStatistics(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { ScriptWidgetRuntimeHealthHistory.read(options ?? [:]) } } diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealthHistory.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealthHistory.swift new file mode 100644 index 00000000..888a3683 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealthHistory.swift @@ -0,0 +1,63 @@ +import Foundation +import JavaScriptCore +#if canImport(HealthKit) +import HealthKit +#endif + +struct ScriptWidgetHealthHistoryOptions { + let metric: String + let days: Int + static let metrics: Set = ["steps", "activeEnergy", "walkingDistance", "water", "bodyMass", "heartRate"] + init(_ options: [String: Any]) throws { + try ScriptWidgetSystemOptions.fields(options, ["metric", "days"]) + metric = try ScriptWidgetSystemOptions.text(options["metric"], maximum: 32) + let n = try ScriptWidgetSystemOptions.number(options["days"] ?? 7, range: 1...31) + guard Self.metrics.contains(metric), n.rounded() == n else { throw ScriptWidgetSystemServiceError.invalidOptions }; days = Int(n) + } +} + +enum ScriptWidgetRuntimeHealthHistory { + static func read(_ options: [String: Any]) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.health, grant: false) { context, finish in + let value = try ScriptWidgetHealthHistoryOptions(options) + #if canImport(HealthKit) && !os(macOS) + guard HKHealthStore.isHealthDataAvailable() else { throw ScriptWidgetSystemServiceError.unavailable } + let identifier: HKQuantityTypeIdentifier + let unit: HKUnit + let aggregation: HKStatisticsOptions + switch value.metric { + case "steps": identifier = .stepCount; unit = .count(); aggregation = .cumulativeSum + case "activeEnergy": identifier = .activeEnergyBurned; unit = .kilocalorie(); aggregation = .cumulativeSum + case "walkingDistance": identifier = .distanceWalkingRunning; unit = .meter(); aggregation = .cumulativeSum + case "water": identifier = .dietaryWater; unit = .literUnit(with: .milli); aggregation = .cumulativeSum + case "bodyMass": identifier = .bodyMass; unit = .gramUnit(with: .kilo); aggregation = .discreteAverage + default: identifier = .heartRate; unit = HKUnit.count().unitDivided(by: .minute()); aggregation = .discreteAverage + } + let store = HKHealthStore() + var calendar = Calendar(identifier: .gregorian); calendar.timeZone = .current + let today = calendar.startOfDay(for: Date()) + let start = calendar.date(byAdding: .day, value: 1 - value.days, to: today)! + let end = Date() + let query = HKStatisticsCollectionQuery(quantityType: HKObjectType.quantityType(forIdentifier: identifier)!, quantitySamplePredicate: HKQuery.predicateForSamples(withStart: start, end: end), options: aggregation, anchorDate: start, intervalComponents: DateComponents(day: 1)) + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + query.initialResultsHandler = { _, collection, error in + cancellation.complete() + guard error == nil, let collection else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + var rows: [[String: Any]] = [] + collection.enumerateStatistics(from: start, to: end) { stat, _ in + let quantity = aggregation == .cumulativeSum ? stat.sumQuantity() : stat.averageQuantity() + let n = quantity?.doubleValue(for: unit) + let parts = calendar.dateComponents([.year, .month, .day], from: stat.startDate) + rows.append(["date": String(format: "%04d-%02d-%02d", parts.year!, parts.month!, parts.day!), "value": n.flatMap { $0.isFinite && $0 >= 0 ? $0 : nil } as Any? ?? NSNull(), "hasSamples": n != nil]) + } + guard rows.count <= value.days else { finish(.failure(ScriptWidgetSystemServiceError.limitExceeded)); return } + finish(.success(["metric": value.metric, "unit": unit.unitString, "aggregation": aggregation == .cumulativeSum ? "sum" : "average", "timeZone": calendar.timeZone.identifier, "items": rows])) + } + guard cancellation.install({ store.stop(query) }) else { throw ScriptWidgetSystemServiceError.unavailable } + store.execute(query) + #else + _ = context; _ = value; throw ScriptWidgetSystemServiceError.unavailable + #endif + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift new file mode 100644 index 00000000..e85e066d --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift @@ -0,0 +1,136 @@ +import Foundation +import JavaScriptCore +#if os(iOS) +import HomeKit +#endif + +struct ScriptWidgetHomeChoice: Identifiable { + let id: String + let name: String + let kind: String +} +#if os(iOS) +final class ScriptWidgetHomeProvider: NSObject, HMHomeManagerDelegate { + static let shared = ScriptWidgetHomeProvider() + private var manager: HMHomeManager! + private var loaded = false + private var waiters: [(Result<[ScriptWidgetHomeChoice], Error>) -> Void] = [] + override init() { super.init(); manager = HMHomeManager(); manager.delegate = self } + func homeManagerDidUpdateHomes(_ manager: HMHomeManager) { loaded = true; let callbacks = waiters; waiters = []; callbacks.forEach { $0(.success(choices())) } } + func load(_ finish: @escaping (Result<[ScriptWidgetHomeChoice], Error>) -> Void) { + if loaded { finish(.success(choices())) } + else if waiters.count < 8 { + waiters.append(finish) + DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in + guard let self, !self.loaded else { return }; let pending = self.waiters; self.waiters = []; pending.forEach { $0(.failure(ScriptWidgetSystemServiceError.unavailable)) } + } + } + else { finish(.failure(ScriptWidgetSystemServiceError.limitExceeded)) } + } + private var characteristics: [(HMCharacteristic, String)] { + var result: [(HMCharacteristic, String)] = [] + let types = [HMCharacteristicTypePowerState, HMCharacteristicTypeCurrentTemperature, HMCharacteristicTypeCurrentRelativeHumidity, HMCharacteristicTypeMotionDetected, HMCharacteristicTypeContactState] + for home in manager.homes.prefix(8) { + for accessory in home.accessories.prefix(64) { + for service in accessory.services.prefix(32) { + for characteristic in service.characteristics.prefix(32) where types.contains(characteristic.characteristicType) { + result.append((characteristic, String((home.name + " · " + accessory.name + " · " + service.name).prefix(256)))) + if result.count == 200 { return result } + } + } + } + } + return result + } + func choices() -> [ScriptWidgetHomeChoice] { + let values = characteristics.prefix(200).map { ScriptWidgetHomeChoice(id: $0.0.uniqueIdentifier.uuidString.lowercased(), name: $0.1, kind: $0.0.characteristicType == HMCharacteristicTypePowerState ? "power" : "sensor") } + let scenes = manager.homes.prefix(8).flatMap { home in home.actionSets.prefix(32).map { ScriptWidgetHomeChoice(id: "scene-" + $0.uniqueIdentifier.uuidString.lowercased(), name: String((home.name + " · " + $0.name).prefix(256)), kind: "scene") } } + return Array((values + scenes).prefix(200)) + } + func values(_ ids: [String]) throws -> [[String: Any]] { + guard manager.authorizationStatus.contains(.authorized) else { throw ScriptWidgetSystemServiceError.permissionDenied } + return choices().filter { ids.contains($0.id) }.map { choice in + let characteristic = characteristics.first { $0.0.uniqueIdentifier.uuidString.lowercased() == choice.id }?.0 + let metric: String + let unit: String + switch characteristic?.characteristicType { + case HMCharacteristicTypePowerState: metric = "power"; unit = "boolean" + case HMCharacteristicTypeCurrentTemperature: metric = "temperature"; unit = "celsius" + case HMCharacteristicTypeCurrentRelativeHumidity: metric = "humidity"; unit = "percent" + case HMCharacteristicTypeMotionDetected: metric = "motion"; unit = "boolean" + case HMCharacteristicTypeContactState: metric = "contactState"; unit = "enum" + default: metric = "scene"; unit = "none" + } + return ["metric": metric, "unit": unit, "id": choice.id, "name": choice.name, "kind": choice.kind, "value": characteristic?.value as Any? ?? NSNull(), "isCached": true] + } + } + func setPower(_ id: String, on: Bool, validate: () throws -> Void, finish: @escaping (Result) -> Void) throws { + guard manager.authorizationStatus.contains(.authorized), let characteristic = characteristics.first(where: { $0.0.uniqueIdentifier.uuidString.lowercased() == id })?.0, + characteristic.characteristicType == HMCharacteristicTypePowerState, characteristic.properties.contains(HMCharacteristicPropertyWritable) else { throw ScriptWidgetSystemServiceError.permissionDenied } + try validate() + characteristic.writeValue(on) { error in finish(error == nil ? .success(["id": id, "status": "acknowledged", "value": on]) : .failure(ScriptWidgetSystemServiceError.outcomeUnknown)) } + } + func scene(_ id: String, validate: () throws -> Void, finish: @escaping (Result) -> Void) throws { + guard manager.authorizationStatus.contains(.authorized) else { throw ScriptWidgetSystemServiceError.permissionDenied } + for home in manager.homes { + if let scene = home.actionSets.first(where: { "scene-" + $0.uniqueIdentifier.uuidString.lowercased() == id }) { + try validate() + home.executeActionSet(scene) { error in finish(error == nil ? .success(id) : .failure(ScriptWidgetSystemServiceError.outcomeUnknown)) }; return + } + } + throw ScriptWidgetSystemServiceError.permissionDenied + } +} +#endif +@objc protocol ScriptWidgetRuntimeHomeExports: JSExport { + static func items() -> ScriptWidgetRuntimePromise + static func setPower(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func runScene(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeHome: NSObject, ScriptWidgetRuntimeHomeExports { + static func items() -> ScriptWidgetRuntimePromise { perform("items", [:]) } + static func setPower(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { perform("power", options ?? [:]) } + static func runScene(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { perform("scene", options ?? [:]) } + private static func perform(_ method: String, _ options: [String: Any]) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.home, writing: method != "items") { context, finish in + #if os(iOS) + let ids = try context.access.load().home + if method == "items" && ids.isEmpty { finish(.success([[String: Any]]())); return } + if method != "items" { + try ScriptWidgetSystemOptions.fields(options, method == "scene" ? ["id", "requestID"] : ["id", "on"]) + guard let id = options["id"] as? String, ids.contains(id) else { throw ScriptWidgetSystemServiceError.permissionDenied } + } + if method == "scene" { + let request = try ScriptWidgetNativeMutation(options, scope: "home", operation: "scene") + let result = try ScriptWidgetReminderMutationLedger.perform(request, container: context.access.container, backend: context.state.executionSnapshot!.context.defaults, + key: context.access.privateKey("homeReceipts"), validate: context.validate) { beforeCommit in + try beforeCommit() + let box = ScriptWidgetSystemCompletionBox() + DispatchQueue.main.async { + let provider = ScriptWidgetHomeProvider.shared + provider.load { result in + do { _ = try result.get(); try provider.scene(options["id"] as! String, validate: context.validate) { result in box.finish(result.flatMap { ($0 as? String).map(Result.success) ?? .failure(ScriptWidgetSystemServiceError.unavailable) }) } } + catch { box.finish(.failure(error)) } + } + } + return try box.wait() + } + finish(.success(["id": options["id"]!, "status": "acknowledged", "replayed": result["replayed"] ?? false])); return + } + let on = method == "power" ? try ScriptWidgetSystemOptions.boolean(options["on"]) : false + DispatchQueue.main.async { + let provider = ScriptWidgetHomeProvider.shared + provider.load { result in + do { + _ = try result.get(); try context.validate() + if method == "items" { finish(.success(try provider.values(ids))) } + else { try provider.setPower(options["id"] as! String, on: on, validate: context.validate, finish: finish) } + } catch { finish(.failure(error)) } + } + } + #else + _ = context; throw ScriptWidgetSystemServiceError.unavailable + #endif + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift new file mode 100644 index 00000000..665cee8d --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift @@ -0,0 +1,143 @@ +import Foundation +import JavaScriptCore +import MapKit +#if os(macOS) +import AppKit +#else +import UIKit +#endif + +struct ScriptWidgetMapOptions { + let coordinate: CLLocationCoordinate2D + let radius: Double + init(_ options: [String: Any], fields: Set) throws { + try ScriptWidgetSystemOptions.fields(options, fields.union(["latitude", "longitude", "radiusMeters"])) + coordinate = .init(latitude: try ScriptWidgetSystemOptions.number(options["latitude"], range: -90...90), longitude: try ScriptWidgetSystemOptions.number(options["longitude"], range: -180...180)) + radius = try ScriptWidgetSystemOptions.number(options["radiusMeters"] ?? 2000, range: 100...50000) + } + var region: MKCoordinateRegion { .init(center: coordinate, latitudinalMeters: radius * 2, longitudinalMeters: radius * 2) } +} +@objc protocol ScriptWidgetRuntimeMapsExports: JSExport { + static func search(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func geocode(_ address: String) -> ScriptWidgetRuntimePromise + static func reverseGeocode(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func snapshot(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeMaps: NSObject, ScriptWidgetRuntimeMapsExports { + static func search(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { + lookup { request in + let value = try ScriptWidgetMapOptions(options ?? [:], fields: ["query"]) + request.naturalLanguageQuery = try ScriptWidgetSystemOptions.text(options?["query"], maximum: 256); request.region = value.region + } + } + static func geocode(_ address: String) -> ScriptWidgetRuntimePromise { + if #available(iOS 26.0, macOS 26.0, *) { return modernGeocode(address: address) } + return lookup { request in request.naturalLanguageQuery = try ScriptWidgetSystemOptions.text(address, maximum: 256); request.resultTypes = .address } + } + private static func lookup(_ configure: @escaping (MKLocalSearch.Request) throws -> Void) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.maps) { context, finish in + DispatchQueue.main.async { + do { + try context.validate() + let request = MKLocalSearch.Request(); try configure(request) + let search = MKLocalSearch(request: request) + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + guard cancellation.install({ search.cancel() }) else { throw ScriptWidgetSystemServiceError.unavailable } + search.start { response, error in + cancellation.complete() + guard error == nil, let response else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + let rows = response.mapItems.prefix(5).map(mapItem) + finish(.success(rows)) + } + } catch { finish(.failure(error)) } + } + } + } + static func reverseGeocode(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.maps) { context, finish in + let value = try ScriptWidgetMapOptions(options ?? [:], fields: []) + if #available(iOS 26.0, macOS 26.0, *) { + DispatchQueue.main.async { + do { + try context.validate() + guard let request = MKReverseGeocodingRequest(location: CLLocation(latitude: value.coordinate.latitude, longitude: value.coordinate.longitude)) else { throw ScriptWidgetSystemServiceError.invalidOptions } + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + guard cancellation.install({ request.cancel() }) else { throw ScriptWidgetSystemServiceError.unavailable } + request.getMapItems { items, error in + cancellation.complete() + guard error == nil else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + finish(.success((items ?? []).prefix(5).map(mapItem))) + } + } catch { finish(.failure(error)) } + } + return + } + let geocoder = CLGeocoder() + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + guard cancellation.install({ geocoder.cancelGeocode() }) else { throw ScriptWidgetSystemServiceError.unavailable } + geocoder.reverseGeocodeLocation(CLLocation(latitude: value.coordinate.latitude, longitude: value.coordinate.longitude)) { places, error in + cancellation.complete() + guard error == nil else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + finish(.success((places ?? []).prefix(5).map { place in + ["name": String((place.name ?? "").prefix(256)), "address": String([place.name, place.locality, place.administrativeArea, place.country].compactMap { $0 }.joined(separator: ", ").prefix(512)), "latitude": place.location?.coordinate.latitude ?? value.coordinate.latitude, "longitude": place.location?.coordinate.longitude ?? value.coordinate.longitude] as [String: Any] + })) + } + } + } + private static func mapItem(_ item: MKMapItem) -> [String: Any] { + let coordinate: CLLocationCoordinate2D + let address: String + if #available(iOS 26.0, macOS 26.0, *) { coordinate = item.location.coordinate; address = item.address?.fullAddress ?? "" } + else { coordinate = item.placemark.coordinate; address = item.placemark.title ?? "" } + return ["name": String((item.name ?? "").prefix(256)), "address": String(address.prefix(512)), "latitude": coordinate.latitude, "longitude": coordinate.longitude] + } + @available(iOS 26.0, macOS 26.0, *) + private static func modernGeocode(address: String) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.maps) { context, finish in + let text = try ScriptWidgetSystemOptions.text(address, maximum: 256) + DispatchQueue.main.async { + do { + try context.validate() + guard let request = MKGeocodingRequest(addressString: text) else { throw ScriptWidgetSystemServiceError.invalidOptions } + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + guard cancellation.install({ request.cancel() }) else { throw ScriptWidgetSystemServiceError.unavailable } + request.getMapItems { items, error in + cancellation.complete() + guard error == nil else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + finish(.success((items ?? []).prefix(5).map(mapItem))) + } + } catch { finish(.failure(error)) } + } + } + } + static func snapshot(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.maps) { context, finish in + let value = try ScriptWidgetMapOptions(options ?? [:], fields: ["size"]) + let size = try ScriptWidgetSystemOptions.number(options?["size"] ?? 256, range: 128...512) + guard size.rounded() == size else { throw ScriptWidgetSystemServiceError.invalidOptions } + DispatchQueue.main.async { + do { + try context.validate() + let config = MKMapSnapshotter.Options(); config.region = value.region; config.size = .init(width: size, height: size) + #if os(iOS) + config.scale = 1 + #endif + let snapshotter = MKMapSnapshotter(options: config) + let cancellation = ScriptWidgetQueryCancellation(session: context.state.executionSession) + guard cancellation.install({ snapshotter.cancel() }) else { throw ScriptWidgetSystemServiceError.unavailable } + snapshotter.start { result, error in + cancellation.complete() + guard error == nil, let result else { finish(.failure(ScriptWidgetSystemServiceError.unavailable)); return } + #if os(macOS) + let bytes = result.image.tiffRepresentation.flatMap(NSBitmapImageRep.init(data:))?.representation(using: .jpeg, properties: [.compressionFactor: 0.7]) + #else + let bytes = result.image.jpegData(compressionQuality: 0.7) + #endif + guard let bytes, bytes.count <= 262144 else { finish(.failure(ScriptWidgetSystemServiceError.limitExceeded)); return } + finish(.success(["image": "data:image/jpeg;base64," + bytes.base64EncodedString(), "width": size, "height": size, "provider": "Apple Maps"])) + } + } catch { finish(.failure(error)) } + } + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift new file mode 100644 index 00000000..a52f95aa --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift @@ -0,0 +1,135 @@ +import Foundation +import JavaScriptCore +import UserNotifications + +struct ScriptWidgetNotificationOptions { + let key: String + let title: String + let body: String + let date: Date? + let dailyHour: Int? + let dailyMinute: Int? + init(_ options: [String: Any], now: Date = Date()) throws { + try ScriptWidgetSystemOptions.fields(options, ["key", "title", "body", "date", "daily"]) + key = try ScriptWidgetSystemOptions.text(options["key"], maximum: 64) + guard ScriptWidgetSystemOptions.validKey(key) else { throw ScriptWidgetSystemServiceError.invalidOptions } + title = try ScriptWidgetSystemOptions.text(options["title"], maximum: 256) + body = try ScriptWidgetSystemOptions.text(options["body"], maximum: 1024) + guard (options["date"] == nil) != (options["daily"] == nil) else { throw ScriptWidgetSystemServiceError.invalidOptions } + date = try options["date"].map(ScriptWidgetSystemOptions.date) + if let date { guard date > now, date.timeIntervalSince(now) <= 366 * 86400 else { throw ScriptWidgetSystemServiceError.invalidOptions } } + if let raw = options["daily"] { + guard let daily = raw as? [String: Any] else { throw ScriptWidgetSystemServiceError.invalidOptions } + try ScriptWidgetSystemOptions.fields(daily, ["hour", "minute"]) + let hour = try ScriptWidgetSystemOptions.number(daily["hour"], range: 0...23), minute = try ScriptWidgetSystemOptions.number(daily["minute"], range: 0...59) + guard hour.rounded() == hour, minute.rounded() == minute else { throw ScriptWidgetSystemServiceError.invalidOptions } + dailyHour = Int(hour); dailyMinute = Int(minute) + } else { dailyHour = nil; dailyMinute = nil } + } +} +@objc protocol ScriptWidgetRuntimeNotificationsExports: JSExport { + static func status() -> ScriptWidgetRuntimePromise + static func pending() -> ScriptWidgetRuntimePromise + static func schedule(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise + static func cancel(_ key: String) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeNotifications: NSObject, ScriptWidgetRuntimeNotificationsExports { + static func status() -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.notifications) { _, finish in + UNUserNotificationCenter.current().getNotificationSettings { settings in + let status: String + switch settings.authorizationStatus { case .authorized: status = "authorized"; case .provisional: status = "provisional"; case .ephemeral: status = "ephemeral"; case .denied: status = "denied"; case .notDetermined: status = "notDetermined"; @unknown default: status = "unavailable" } + finish(.success(["authorization": status])) + } + } + } + static func pending() -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.notifications) { context, finish in + let prefix = "sw." + context.owner + ".notification." + UNUserNotificationCenter.current().getPendingNotificationRequests { items in + let rows = items.filter { $0.identifier.hasPrefix(prefix) }.prefix(32).map { item -> [String: Any] in + let nextDate = (item.trigger as? UNTimeIntervalNotificationTrigger)?.nextTriggerDate() ?? (item.trigger as? UNCalendarNotificationTrigger)?.nextTriggerDate() + return ["key": String(item.identifier.dropFirst(prefix.count)), "title": item.content.title, "body": item.content.body, + "repeats": item.trigger?.repeats ?? false, "date": nextDate.map { ISO8601DateFormatter().string(from: $0) } as Any? ?? NSNull()] + } + finish(.success(rows)) + } + } + } + static func schedule(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.notifications, writing: true) { context, finish in + let value = try ScriptWidgetNotificationOptions(options ?? [:]) + let id = try context.scopedID(value.key, group: "notification") + let center = UNUserNotificationCenter.current() + // Coordinate capacity checks across both app/extension processes. + guard let result = ScriptWidgetStorageLock.withExclusiveAccess(container: context.access.container, namespace: "ScriptWidget.Notifications.Queue.v1", operation: { () -> Result in + let box = ScriptWidgetSystemCompletionBox() + let deadline = Date().addingTimeInterval(2.4) + center.getNotificationSettings { settings in + guard settings.authorizationStatus == .authorized || settings.authorizationStatus == .provisional else { box.finish(.failure(ScriptWidgetSystemServiceError.permissionDenied)); return } + center.getPendingNotificationRequests { items in + do { + try context.validate() + guard Date() < deadline else { throw ScriptWidgetSystemServiceError.outcomeUnknown } + let replacing = items.contains(where: { $0.identifier == id }) + guard replacing || items.count < 60, + replacing || items.filter({ $0.identifier.hasPrefix("sw." + context.owner + ".notification.") }).count < 32 else { throw ScriptWidgetSystemServiceError.limitExceeded } + let content = UNMutableNotificationContent(); content.title = value.title; content.body = value.body + let trigger: UNNotificationTrigger + if let hour = value.dailyHour, let minute = value.dailyMinute { + trigger = UNCalendarNotificationTrigger(dateMatching: DateComponents(hour: hour, minute: minute), repeats: true) + } else { + trigger = UNTimeIntervalNotificationTrigger(timeInterval: max(1, value.date!.timeIntervalSinceNow), repeats: false) + } + try context.validate() + center.add(.init(identifier: id, content: content, trigger: trigger)) { error in + box.finish(error == nil ? .success(id) : .failure(ScriptWidgetSystemServiceError.outcomeUnknown)) + } + } catch { box.finish(.failure(error)) } + } + } + return Result { try box.wait() } + }) else { throw ScriptWidgetSystemServiceError.unavailable } + _ = try result.get() + finish(.success(["key": value.key, "status": "scheduled"])) + } + } + static func cancel(_ key: String) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.notifications, writing: true) { context, finish in + let id = try context.scopedID(key, group: "notification") + try context.validate() + UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [id]) + finish(.success(["key": key, "status": "cancellationRequested"])) + } + } +} + +extension ScriptWidgetSystemServices { + private static let deletionObserver = NotificationCenter.default.addObserver(forName: ScriptManager.packageRemovedNotification, object: nil, queue: nil) { event in + guard let owner = event.userInfo?["retiredOwner"] as? String, + let context = event.userInfo?["storageContext"] as? ScriptWidgetPackageStorageContext else { return } + retireSchedules(owner: owner, container: context.container, backend: context.defaults) + } + static func startLifecycle() { _ = deletionObserver } + /// Called only after native package deletion has retired its installation. + /// Calendar events, imported data and other user records are never deleted. + static func retireSchedules(owner: String, container: URL, backend: any ScriptWidgetStorageBackend) { + guard UUID(uuidString: owner)?.uuidString.lowercased() == owner, + ["com.everettjf.scriptwidget", "com.everettjf.scriptwidget.widget", "com.everettjf.scriptwidget.macwidget"].contains(Bundle.main.bundleIdentifier ?? ""), + NSClassFromString("XCTestCase") == nil, NSClassFromString("XCTest.XCTestCase") == nil, + ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] == nil else { return } + queue.async { + _ = ScriptWidgetStorageLock.withExclusiveAccess(container: container, namespace: "ScriptWidget.Notifications.Queue.v1") { + let box = ScriptWidgetSystemCompletionBox() + let prefix = "sw." + owner + ".notification." + UNUserNotificationCenter.current().getPendingNotificationRequests { requests in + let ids = requests.filter { $0.identifier.hasPrefix(prefix) }.map(\.identifier) + UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: ids) + box.finish(.success(owner)) + } + _ = try? box.wait() + } + ScriptWidgetRuntimeAlarms.retire(owner: owner, backend: backend) + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift index b6b590e4..6902f1aa 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift @@ -609,7 +609,7 @@ enum ScriptWidgetReminderMutationLedger { let formatVersion: Int var entries: [Entry] } - static func perform(_ request: ScriptWidgetReminderMutation, container: URL, + static func perform(_ request: Request, container: URL, backend: any ScriptWidgetStorageBackend, key: String, now: Date = Date(), validate: @escaping () throws -> Void, write: (_ beforeCommit: () throws -> Void) throws -> String) throws -> [String: Any] { diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift new file mode 100644 index 00000000..f856ff70 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift @@ -0,0 +1,203 @@ +import Foundation +import CoreFoundation +import JavaScriptCore +import CryptoKit + +// Public native system capability adapters share one execution/identity gate. +// Grants are installation-local metadata, never authored package contents. +enum ScriptWidgetSystemServiceError: String, Error, LocalizedError { + case invalidOptions = "invalid_options", permissionDenied = "permission_denied", unavailable, queryLimit = "query_limit", readOnly = "read_only", scopeChanged = "scope_changed", limitExceeded = "limit_exceeded", outcomeUnknown = "outcome_unknown", staleRequest = "request_conflict" + var errorDescription: String? { "[\(rawValue)] System operation could not complete. Existing user data is preserved." } +} + +struct ScriptWidgetSystemAccessGrant: Codable, Equatable { + var version = 1 + var generation = UUID().uuidString.lowercased() + var permissions: [String] = [] + var contacts: [String] = [] + var home: [String] = [] + var documents: [Document] = [] + struct Document: Codable, Equatable { + let id: String + let name: String + let type: String + let bytes: Int + } + static let capabilities: Set = ["notifications", "calendarWrite", "alarms", "documents", "contacts", "home", "maps", "weather"] + var isValid: Bool { + version == 1 && UUID(uuidString: generation)?.uuidString.lowercased() == generation && + Set(permissions).count == permissions.count && Set(permissions).isSubset(of: Self.capabilities) && + contacts.count <= 20 && home.count <= 20 && [contacts, home].allSatisfy { ids in Set(ids).count == ids.count && ids.allSatisfy { !$0.isEmpty && $0.utf8.count <= 1024 && !$0.unicodeScalars.contains(where: CharacterSet.controlCharacters.contains) } } && + documents.count <= 8 && Set(documents.map(\.id)).count == documents.count && documents.allSatisfy { + UUID(uuidString: $0.id)?.uuidString.lowercased() == $0.id && !$0.name.isEmpty && $0.name.utf8.count <= 255 && ["json", "csv"].contains($0.type) && (0...262144).contains($0.bytes) + } + } +} + +struct ScriptWidgetSystemAccessStore { + let container: URL + let owner: String + let validate: () throws -> Void + var directory: String { "SystemAccess.v1/" + owner } + var path: String { directory + "/grant.json" } + func privateKey(_ kind: String) -> String { "ScriptWidget.SystemServices." + kind + ".v1." + owner } + func load() throws -> ScriptWidgetSystemAccessGrant { + try validate() + guard UUID(uuidString: owner)?.uuidString.lowercased() == owner else { throw ScriptWidgetSystemServiceError.permissionDenied } + guard let data = ScriptWidgetPackageFiles.read(root: container, relative: path, maximumBytes: 32768) else { + if ScriptWidgetPackageFiles.safeURL(root: container, relative: path) != nil, ScriptWidgetPackageFiles.kind(root: container, relative: path) == nil { return .init() } + throw ScriptWidgetSystemServiceError.unavailable + } + let value = try JSONDecoder().decode(ScriptWidgetSystemAccessGrant.self, from: data) + guard value.isValid, + try ScriptWidgetCloudJSONStore.hash(JSONSerialization.data(withJSONObject: JSONSerialization.jsonObject(with: data), options: .sortedKeys)) == ScriptWidgetCloudJSONStore.hash(JSONSerialization.data(withJSONObject: JSONSerialization.jsonObject(with: JSONEncoder().encode(value)), options: .sortedKeys)) else { throw ScriptWidgetSystemServiceError.unavailable } + return value + } + func save(_ grant: ScriptWidgetSystemAccessGrant, expected: ScriptWidgetSystemAccessGrant) throws { + guard grant.isValid else { throw ScriptWidgetSystemServiceError.invalidOptions } + guard let result = ScriptWidgetStorageLock.withExclusiveAccess(container: container, namespace: path, operation: { Result { + try validate() + let current = try load() + // Missing grants have no durable generation yet. + guard ScriptWidgetPackageFiles.kind(root: container, relative: path) == nil || current == expected else { throw ScriptWidgetSystemServiceError.scopeChanged } + var value = grant; value.generation = UUID().uuidString.lowercased() + guard ScriptWidgetPackageFiles.write(try JSONEncoder().encode(value), root: container, relative: path) else { throw ScriptWidgetSystemServiceError.unavailable } + } }) else { throw ScriptWidgetSystemServiceError.unavailable } + try result.get() + } + func readDocument(_ id: String, type: String) throws -> Data { + let grant = try load() + guard grant.permissions.contains("documents"), let item = grant.documents.first(where: { $0.id == id && $0.type == type }), + let data = ScriptWidgetPackageFiles.read(root: container, relative: directory + "/documents/" + item.id, maximumBytes: 262144), data.count == item.bytes else { throw ScriptWidgetSystemServiceError.permissionDenied } + return data + } +} + +struct ScriptWidgetSystemServiceContext { + let state: ScriptWidgetRunningState + let permission: WidgetPackagePermission + let writing: Bool + let grantRequired: Bool + let initialGrant: ScriptWidgetSystemAccessGrant? + var access: ScriptWidgetSystemAccessStore { + let snapshot = state.executionSnapshot! + return .init(container: snapshot.context.container, owner: snapshot.binding.ownerID, validate: { try snapshot.validateIdentity() }) + } + func validate() throws { + guard state.isCurrentExecution, state.previewStorage == nil, let snapshot = state.executionSnapshot, + let manifest = state.package.readManifest(), manifest.permissions.contains(permission), + WidgetPackageManifestValidator.validate(manifest, package: state.package, checkEntryExists: false).isValid, + WidgetRuntimeRequirement.supports("1.6", current: manifest.minimumRuntimeVersion ?? "0.0") else { throw ScriptWidgetSystemServiceError.permissionDenied } + try snapshot.validateIdentity() + guard !state.isTimelineProjection, !state.isLiveActivityPresentation, + !writing || state.isUserInitiatedAction else { throw ScriptWidgetSystemServiceError.readOnly } + if grantRequired { + let grant = try access.load() + guard grant.permissions.contains(permission.rawValue), initialGrant == nil || grant == initialGrant else { throw ScriptWidgetSystemServiceError.permissionDenied } + } + } + var owner: String { state.executionSnapshot!.binding.ownerID } + func scopedID(_ key: String, group: String) throws -> String { + guard ScriptWidgetSystemOptions.validKey(key) else { throw ScriptWidgetSystemServiceError.invalidOptions } + return "sw." + owner + "." + group + "." + key + } +} + +enum ScriptWidgetSystemServices { + static let queue = DispatchQueue(label: "ScriptWidget.SystemServices", qos: .userInitiated) + static func perform(_ permission: WidgetPackagePermission, writing: Bool = false, grant: Bool = true, + operation: @escaping (ScriptWidgetSystemServiceContext, @escaping (Result) -> Void) throws -> Void) -> ScriptWidgetRuntimePromise { + let state = JSContext.current()?.scriptWidgetRunningState + return ScriptWidgetRuntimePromise { resolve, reject in + guard let state, state.executionSnapshot != nil else { reject.call(withArguments: [ScriptWidgetSystemServiceError.permissionDenied.localizedDescription]); return } + var context = ScriptWidgetSystemServiceContext(state: state, permission: permission, writing: writing, grantRequired: grant, initialGrant: nil) + do { + try context.validate() + context = .init(state: state, permission: permission, writing: writing, grantRequired: grant, initialGrant: grant ? try context.access.load() : nil) + guard state.executionSession.registerDataQuery() else { throw ScriptWidgetSystemServiceError.queryLimit } + } catch { reject.call(withArguments: [safeError(error)]); return } + let captured = context + let finish: (Result) -> Void = { result in + state.executionSession.callbackQueue.async { + guard state.isCurrentExecution else { return } + do { try captured.validate(); resolve.call(withArguments: [try result.get()]) } + catch { reject.call(withArguments: [safeError(error)]) } + } + } + queue.async { + do { try captured.validate(); try operation(captured, finish) } + catch { finish(.failure(error)) } + } + } + } + static func safeError(_ error: Error) -> String { + if let failure = error as? ScriptWidgetReminderMutationLedger.Failure { + switch failure { + case .uncertain: return ScriptWidgetSystemServiceError.outcomeUnknown.localizedDescription + case .conflict: return ScriptWidgetSystemServiceError.staleRequest.localizedDescription + case .full: return ScriptWidgetSystemServiceError.limitExceeded.localizedDescription + case .busy, .corrupt: return ScriptWidgetSystemServiceError.unavailable.localizedDescription + } + } + return (error as? ScriptWidgetSystemServiceError)?.localizedDescription ?? "[system_failed] System operation failed; review the result before retrying a write." + } +} + +/// Strict bounded inputs used by the native adapters and deterministic tests. +enum ScriptWidgetSystemOptions { + static func validKey(_ key: String) -> Bool { key.range(of: "^[a-zA-Z0-9_-]{1,64}$", options: .regularExpression) != nil } + static func fields(_ options: [String: Any], _ allowed: Set) throws { + guard Set(options.keys).isSubset(of: allowed), JSONSerialization.isValidJSONObject(options), + try JSONSerialization.data(withJSONObject: options).count <= 16384 else { throw ScriptWidgetSystemServiceError.invalidOptions } + } + static func text(_ value: Any?, maximum: Int = 256) throws -> String { + guard let text = value as? String, !text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty, + text.utf8.count <= maximum, !text.unicodeScalars.contains(where: CharacterSet.controlCharacters.contains) else { throw ScriptWidgetSystemServiceError.invalidOptions } + return text + } + static func number(_ value: Any?, range: ClosedRange) throws -> Double { + guard let n = value as? NSNumber, CFGetTypeID(n) != CFBooleanGetTypeID(), n.doubleValue.isFinite, range.contains(n.doubleValue) else { throw ScriptWidgetSystemServiceError.invalidOptions } + return n.doubleValue + } + static func date(_ value: Any?) throws -> Date { + let text = try text(value, maximum: 64) + let formatter = ISO8601DateFormatter(); formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + guard text.contains("T"), let date = ISO8601DateFormatter().date(from: text) ?? formatter.date(from: text), date.timeIntervalSince1970.isFinite else { throw ScriptWidgetSystemServiceError.invalidOptions } + return date + } + static func boolean(_ value: Any?) throws -> Bool { + guard let n = value as? NSNumber, CFGetTypeID(n) == CFBooleanGetTypeID() else { throw ScriptWidgetSystemServiceError.invalidOptions }; return n.boolValue + } +} + +protocol ScriptWidgetSystemMutationRequest { + var requestID: String { get } + var fingerprint: String { get } + var listID: String { get } +} +extension ScriptWidgetReminderMutation: ScriptWidgetSystemMutationRequest { } + +/// Worker-only bounded bridge for native asynchronous mutation acknowledgments. +/// A timeout leaves the durable prepared receipt in place; never auto-retry it. +final class ScriptWidgetSystemCompletionBox { + private let lock = NSLock() + private var result: Result? + private let semaphore = DispatchSemaphore(value: 0) + func finish(_ value: Result) { lock.lock(); if result == nil { result = value; semaphore.signal() }; lock.unlock() } + func wait() throws -> String { + guard semaphore.wait(timeout: .now() + 2.5) == .success else { throw ScriptWidgetSystemServiceError.outcomeUnknown } + lock.lock(); defer { lock.unlock() }; return try result!.get() + } +} + +struct ScriptWidgetNativeMutation: ScriptWidgetSystemMutationRequest { + let requestID: String + let fingerprint: String + let listID: String + init(_ options: [String: Any], scope: String, operation: String) throws { + requestID = try ScriptWidgetSystemOptions.text(options["requestID"], maximum: 36) + guard UUID(uuidString: requestID)?.uuidString.lowercased() == requestID else { throw ScriptWidgetSystemServiceError.invalidOptions } + listID = scope + fingerprint = ScriptWidgetCloudJSONStore.hash(try JSONSerialization.data(withJSONObject: ["operation": operation, "options": options], options: [.sortedKeys, .withoutEscapingSlashes])) + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift new file mode 100644 index 00000000..33f167d1 --- /dev/null +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift @@ -0,0 +1,76 @@ +import Foundation +import JavaScriptCore + +struct ScriptWidgetWeatherOptions { + let latitude: Double + let longitude: Double + let hours: Int + init(_ options: [String: Any]) throws { + try ScriptWidgetSystemOptions.fields(options, ["latitude", "longitude", "hours"]) + latitude = (try ScriptWidgetSystemOptions.number(options["latitude"], range: -90...90) * 100).rounded() / 100 + longitude = (try ScriptWidgetSystemOptions.number(options["longitude"], range: -180...180) * 100).rounded() / 100 + let count = try ScriptWidgetSystemOptions.number(options["hours"] ?? 24, range: 1...48) + guard count.rounded() == count else { throw ScriptWidgetSystemServiceError.invalidOptions }; hours = Int(count) + } + var url: URL { URL(string: "https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=\(latitude)&lon=\(longitude)")! } + static func normalize(_ data: Data, options: Self, now: Date = Date()) throws -> [String: Any] { + guard data.count <= 2 * 1024 * 1024, + let root = try JSONSerialization.jsonObject(with: data) as? [String: Any], let properties = root["properties"] as? [String: Any], let series = properties["timeseries"] as? [[String: Any]], series.count <= 300 else { throw ScriptWidgetSystemServiceError.unavailable } + var rows: [[String: Any]] = [] + for item in series { + guard let time = item["time"] as? String, let date = (try? ScriptWidgetSystemOptions.date(time)), date >= now.addingTimeInterval(-3600), + let values = item["data"] as? [String: Any], let instant = values["instant"] as? [String: Any], let details = instant["details"] as? [String: Any] else { continue } + let temperature = try ScriptWidgetSystemOptions.number(details["air_temperature"], range: -150...100) + let wind = try ScriptWidgetSystemOptions.number(details["wind_speed"], range: 0...200) + let next = values["next_1_hours"] as? [String: Any] + let precipitation = (next?["details"] as? [String: Any])?["precipitation_amount"] + let symbol = (next?["summary"] as? [String: Any])?["symbol_code"] as? String + rows.append(["time": time, "temperatureC": temperature, "windMetersPerSecond": wind, + "precipitationMM": try precipitation.map { try ScriptWidgetSystemOptions.number($0, range: 0...1000) } as Any? ?? NSNull(), "condition": symbol.map { String($0.prefix(64)) } as Any? ?? NSNull()]) + if rows.count == options.hours { break } + } + guard !rows.isEmpty else { throw ScriptWidgetSystemServiceError.unavailable } + return ["provider": "MET Norway", "attribution": ["text": "Weather data from MET Norway", "url": "https://www.met.no/en/free-meteorological-data/Download-services"], "latitude": options.latitude, "longitude": options.longitude, + "fetchedAt": ISO8601DateFormatter().string(from: now), "isStale": false, "hours": rows] + } +} +@objc protocol ScriptWidgetRuntimeWeatherExports: JSExport { + static func forecast(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise +} +@objc final class ScriptWidgetRuntimeWeather: NSObject, ScriptWidgetRuntimeWeatherExports { + static func forecast(_ options: [String: Any]?) -> ScriptWidgetRuntimePromise { + ScriptWidgetSystemServices.perform(.weather) { context, finish in + let value = try ScriptWidgetWeatherOptions(options ?? [:]) + guard ScriptWidgetNetworkPolicy.packageAllows(value.url, package: context.state.package) else { throw ScriptWidgetSystemServiceError.permissionDenied } + let key = context.access.privateKey("weatherCache") + let backend = context.state.executionSnapshot!.context.defaults + var cached: [String: Any]? + if let data = try backend.readValue(forKey: key) as? Data, data.count <= 128 * 1024, + let object = try JSONSerialization.jsonObject(with: data) as? [String: Any], + object["latitude"] as? Double == value.latitude, object["longitude"] as? Double == value.longitude, + let stamp = object["fetchedAt"] as? String, let date = (try? ScriptWidgetSystemOptions.date(stamp)), + Date().timeIntervalSince(date) >= 0, Date().timeIntervalSince(date) <= 6 * 3600, + let hours = object["hours"] as? [[String: Any]], hours.count >= value.hours { + var result = object; result["hours"] = Array(hours.prefix(value.hours)); result["isStale"] = Date().timeIntervalSince(date) >= 3600 + cached = result + if result["isStale"] as? Bool == false { finish(.success(result)); return } + } + var task: URLSessionDataTask! + task = context.state.fetchManager.makeTask(httpMethod: "GET", url: value.url, params: ["headers": ["User-Agent": "ScriptWidget/27.1 https://github.com/everettjf/scriptwidget"], "timeoutInterval": 3], redirectValidator: { ScriptWidgetNetworkPolicy.allowsRedirect($0, state: context.state) }) { data, response, error in + context.state.executionSession.complete(task) + do { + try context.validate() + guard ScriptWidgetNetworkPolicy.packageAllows(value.url, package: context.state.package), error == nil, + (response as? HTTPURLResponse)?.statusCode == 200, let data else { throw ScriptWidgetSystemServiceError.unavailable } + let normalized = try ScriptWidgetWeatherOptions.normalize(data, options: value) + let encoded = try JSONSerialization.data(withJSONObject: normalized) + guard encoded.count <= 128 * 1024 else { throw ScriptWidgetSystemServiceError.limitExceeded } + try backend.writeValue(encoded, forKey: key) + finish(.success(normalized)) + } catch { finish(cached.map(Result.success) ?? .failure(error)) } + } + guard context.state.executionSession.register(task) else { task.cancel(); throw ScriptWidgetSystemServiceError.queryLimit } + task.resume() + } + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetRuntime.swift b/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetRuntime.swift index 8a539023..d87cddf8 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetRuntime.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetRuntime.swift @@ -80,7 +80,15 @@ enum ScriptWidgetRuntimeContract { static let maximumElementDepth = 64 static let maximumPropsPerElement = 128 - static let globalAPIs = ["$calendar","$component","$console","$device","$dynamic_island","$element","$error","$fetch","$file","$getenv","$health","$http","$icloud","$import","$location","$music","$photos","$reminders","$render","$runtime","$services","$storage","$system","$xml","console","fetch"] + static let globalAPIs = [ + "$alarms", "$calendar", "$component", "$console", "$contacts", + "$device", "$documents", "$dynamic_island", "$element", "$error", + "$fetch", "$file", "$getenv", "$health", "$home", + "$http", "$icloud", "$import", "$location", "$maps", + "$music", "$notifications", "$photos", "$reminders", "$render", + "$runtime", "$services", "$storage", "$system", "$weather", + "$xml", "console", "fetch" + ] static func validateSource(_ source: String) -> ScriptWidgetError? { validateByteCount(source.utf8.count, maximum: maximumSourceBytes, label: "Source") @@ -522,6 +530,13 @@ class ScriptWidgetRuntime { runtimeContext["$http"] = ScriptWidgetRuntimeHttp.self runtimeContext["$file"] = ScriptWidgetRuntimeFile.self runtimeContext["$icloud"] = ScriptWidgetRuntimeCloudJSON.self + runtimeContext["$notifications"] = ScriptWidgetRuntimeNotifications.self + runtimeContext["$maps"] = ScriptWidgetRuntimeMaps.self + runtimeContext["$weather"] = ScriptWidgetRuntimeWeather.self + runtimeContext["$alarms"] = ScriptWidgetRuntimeAlarms.self + runtimeContext["$documents"] = ScriptWidgetRuntimeDocuments.self + runtimeContext["$contacts"] = ScriptWidgetRuntimeContacts.self + runtimeContext["$home"] = ScriptWidgetRuntimeHome.self runtimeContext["$system"] = ScriptWidgetRuntimeSystem.self runtimeContext["$calendar"] = ScriptWidgetRuntimeCalendar.self runtimeContext["$photos"] = ScriptWidgetRuntimePhotos.self diff --git a/Skills/scriptwidget-creator/references/runtime-api.md b/Skills/scriptwidget-creator/references/runtime-api.md index cd8a13cb..7bc87d32 100644 --- a/Skills/scriptwidget-creator/references/runtime-api.md +++ b/Skills/scriptwidget-creator/references/runtime-api.md @@ -1,6 +1,6 @@ # ScriptWidget Runtime API -> Generated from Studio's static API metadata (schema v1, runtime 1.5). The native runtime switch is authoritative. Do not edit by hand. +> Generated from Studio's static API metadata (schema v1, runtime 1.6). The native runtime switch is authoritative. Do not edit by hand. ## Components @@ -885,6 +885,32 @@ Interactive widget toggle. A declared actionID requires a package-relative stora - `$location.isAuthorizedForWidgetUpdates`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. - `$location.requestAuthorization`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. - `$location.current`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. +- `$notifications.status`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.pending`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.schedule`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.cancel`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$health.dailyStatistics`: Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data. +- `$calendar.create`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created. +- `$calendar.update`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created. +- `$weather.forecast`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.status`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.pending`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.schedule`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.cancel`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.stop`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.pause`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.resume`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.list`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.readJSON`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.readCSV`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$contacts.selected`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.search`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.geocode`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.reverseGeocode`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.snapshot`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.items`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.setPower`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.runScene`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. - `$icloud.readJSON`: Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload. - `$icloud.writeJSON`: Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual. - `$icloud.resolveJSON`: Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain. diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift index 5dceb9db..c1e12681 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift @@ -5824,3 +5824,23 @@ extension RuntimeExecutionTests { } } } + + +extension RuntimeExecutionTests { + func testSystemCapabilitiesDenyUnmanagedAndPreviewPackages() throws { + let calls = ["$notifications.status()", "$calendar.create({})", "$health.dailyStatistics({metric:'steps'})", "$weather.forecast({latitude:0,longitude:0})", "$alarms.pending()", "$documents.list()", "$contacts.selected()", "$maps.geocode('park')", "$home.items()"] + for readonly in [false, true] { + for call in calls { + let temp = makeTempPackage() + defer { try? FileManager.default.removeItem(at:temp.path) } + let package = ScriptWidgetPackage(path:temp.path,readonly:readonly) + let runtime = ScriptWidgetRuntime(package:package,environments:["widget-size":"medium"]) + let result = runtime.executeJSXSyncForWidget("try { await \(call); $render(unexpected); } catch(e) { $render({String(e)}); }") + XCTAssertNil(result.1) + let tree = snapshot(try XCTUnwrap(result.0)) + XCTAssertTrue(tree.contains("permission_denied"),call) + XCTAssertFalse(tree.contains("unexpected"),call) + } + } + } +} diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index 68150bef..d9359753 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -390,7 +390,7 @@ final class ScriptWidgetErrorTests: XCTestCase { final class RuntimeContractTests: XCTestCase { func testPublicAPIVersionAndGlobalsAreFixed() { - XCTAssertEqual(ScriptWidgetRuntimeContract.apiVersion, "1.5") + XCTAssertEqual(ScriptWidgetRuntimeContract.apiVersion, "1.6") XCTAssertEqual(ScriptWidgetRuntimeContract.globalAPIs, ScriptWidgetRuntimeContract.globalAPIs.sorted()) XCTAssertTrue(ScriptWidgetRuntimeContract.globalAPIs.contains("$render")) XCTAssertTrue(ScriptWidgetRuntimeContract.globalAPIs.contains("$runtime")) @@ -2150,8 +2150,8 @@ final class CalendarSourceSelectionTests: XCTestCase { final class WidgetRuntimeRequirementTests: XCTestCase { func testOnlyCanonicalSameMajorRequirementsAreSupported() { - for value in ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5"] { XCTAssertTrue(WidgetRuntimeRequirement.supports(value), value) } - for value in ["1.6", "1.10", "2.0", "0.9", "01.3", "1.03", "1.3.0", "1", "1.9999", ">=1.3", " 1.3"] { + for value in ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6"] { XCTAssertTrue(WidgetRuntimeRequirement.supports(value), value) } + for value in ["1.7", "1.10", "2.0", "0.9", "01.3", "1.03", "1.3.0", "1", "1.9999", ">=1.3", " 1.3"] { XCTAssertFalse(WidgetRuntimeRequirement.supports(value), value) } XCTAssertTrue(WidgetRuntimeRequirement.supports("1.9", current: "1.10")) diff --git a/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift b/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift new file mode 100644 index 00000000..0977ab9a --- /dev/null +++ b/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift @@ -0,0 +1,122 @@ +import XCTest +import Foundation +@testable import ScriptWidget + +final class SystemServiceTests: XCTestCase { + func testNotificationNamesDatesAndUnknownFieldsFailClosed() throws { + let valid: [String: Any] = ["key": "daily", "title": "Read", "body": "A chapter", "date": "2026-10-28T12:00:00Z"] + let now = ISO8601DateFormatter().date(from: "2026-10-27T12:00:00Z")! + XCTAssertEqual(try ScriptWidgetNotificationOptions(valid, now: now).key, "daily") + for patch: [String: Any] in [["key":"../other"],["key":""],["date":"2020-01-01T00:00:00Z"],["title":"a\nprivate"],["url":"https://example.com"]] { + XCTAssertThrowsError(try ScriptWidgetNotificationOptions(valid.merging(patch, uniquingKeysWith: { _, b in b }), now: now)) + } + } + func testCalendarMutationRequiresCanonicalIDAndBoundedDates() throws { + let input: [String: Any] = ["requestID":"11111111-1111-4111-8111-111111111111", "calendarID":"calendar", "title":"Focus", "start":"2026-10-28T12:00:00Z", "end":"2026-10-28T13:00:00Z"] + let first = try ScriptWidgetCalendarMutation(input, updating: false) + XCTAssertEqual(first.listID, "calendar") + XCTAssertThrowsError(try ScriptWidgetCalendarMutation(input, updating: true)) + for patch: [String: Any] in [["end":"2026-10-28T11:00:00Z"],["allDay":1],["requestID":"not-a-uuid"],["recurrence":"daily"]] { + XCTAssertThrowsError(try ScriptWidgetCalendarMutation(input.merging(patch, uniquingKeysWith: { _,b in b }), updating: false)) + } + } + func testHealthHistoryBoundsAndTypes() throws { + for metric in ScriptWidgetHealthHistoryOptions.metrics { XCTAssertEqual(try ScriptWidgetHealthHistoryOptions(["metric":metric]).days,7) } + for input: [String: Any] in [["metric":"all"],["metric":"steps","days":true],["metric":"steps","days":32],["metric":"steps","days":1.5],["metric":"steps","rawSamples":true]] { XCTAssertThrowsError(try ScriptWidgetHealthHistoryOptions(input)) } + } + func testAlarmIDsAreStableAndIsolatedByOwner() throws { + let a="11111111-1111-4111-8111-111111111111", b="22222222-2222-4222-8222-222222222222" + XCTAssertEqual(try ScriptWidgetAlarmOptions.id(owner:a,key:"focus"),try ScriptWidgetAlarmOptions.id(owner:a,key:"focus")) + XCTAssertNotEqual(try ScriptWidgetAlarmOptions.id(owner:a,key:"focus"),try ScriptWidgetAlarmOptions.id(owner:b,key:"focus")) + XCTAssertThrowsError(try ScriptWidgetAlarmOptions(["key":"focus","title":"Focus","seconds":0])) + XCTAssertThrowsError(try ScriptWidgetAlarmOptions(["key":"focus","title":"Focus","seconds":60,"date":"2026-11-01T12:00:00Z"])) + } + func testCSVQuotesRowsAndBinaryBounds() throws { + let parsed=try ScriptWidgetDocumentData.csv(Data("name,value\r\n\"A,B\",\"quote \"\"here\"\"\"\r\n".utf8)) + XCTAssertEqual(parsed["headers"] as? [String],["name","value"]) + XCTAssertEqual(parsed["rows"] as? [[String]],[["A,B","quote \"here\""]]) + for text in ["a,a\n1,2", "a,b\n1", "a\n\"unclosed", "a\n\"closed\"x"] { XCTAssertThrowsError(try ScriptWidgetDocumentData.csv(Data(text.utf8))) } + XCTAssertThrowsError(try ScriptWidgetDocumentData.csv(Data([0xff,0xfe]))) + XCTAssertThrowsError(try ScriptWidgetDocumentData.json(Data(repeating:32,count:262145))) + XCTAssertThrowsError(try ScriptWidgetDocumentData.csv(Data(("a\n"+Array(repeating:"1",count:501).joined(separator:"\n")).utf8))) + } + func testWeatherCoordinatePrecisionAndMalformedResponses() throws { + let options=try ScriptWidgetWeatherOptions(["latitude":37.33495,"longitude":-122.00902]) + XCTAssertEqual(options.latitude,37.33); XCTAssertEqual(options.longitude,-122.01) + XCTAssertThrowsError(try ScriptWidgetWeatherOptions(["latitude":91,"longitude":0])) + XCTAssertThrowsError(try ScriptWidgetWeatherOptions(["latitude":0,"longitude":0,"hours":true])) + XCTAssertThrowsError(try ScriptWidgetWeatherOptions.normalize(Data("{}".utf8),options:options)) + } + func testNativeGrantsCannotBeImportedOrInheritedByAnotherOwner() throws { + let root=FileManager.default.temporaryDirectory.appendingPathComponent("SystemGrantTests-"+UUID().uuidString) + try FileManager.default.createDirectory(at:root,withIntermediateDirectories:true) + defer { try? FileManager.default.removeItem(at:root) } + let a=ScriptWidgetSystemAccessStore(container:root,owner:UUID().uuidString.lowercased(),validate:{}) + let b=ScriptWidgetSystemAccessStore(container:root,owner:UUID().uuidString.lowercased(),validate:{}) + let before=try a.load();var grant=before;grant.permissions=["documents"] + let id=UUID().uuidString.lowercased();let bytes=Data("{\"keep\":true}".utf8) + grant.documents=[.init(id:id,name:"Data.json",type:"json",bytes:bytes.count)] + XCTAssertTrue(ScriptWidgetPackageFiles.write(bytes,root:root,relative:a.directory+"/documents/"+id)) + try a.save(grant,expected:before) + XCTAssertEqual(try a.readDocument(id,type:"json"),bytes) + XCTAssertThrowsError(try b.readDocument(id,type:"json")) + XCTAssertThrowsError(try a.readDocument("../private",type:"json")) + XCTAssertThrowsError(try a.readDocument(id,type:"csv")) + let current=try a.load();var revoked=current;revoked.permissions=[];try a.save(revoked,expected:current) + XCTAssertThrowsError(try a.readDocument(id,type:"json")) + XCTAssertEqual(ScriptWidgetPackageFiles.read(root:root,relative:a.directory+"/documents/"+id),bytes) + XCTAssertThrowsError(try a.save(grant,expected:current)) + } + func testNativeGrantUnknownFieldsAndLinksFailClosed() throws { + let root=FileManager.default.temporaryDirectory.appendingPathComponent("SystemGrantTests-"+UUID().uuidString) + try FileManager.default.createDirectory(at:root,withIntermediateDirectories:true) + defer { try? FileManager.default.removeItem(at:root) } + let store=ScriptWidgetSystemAccessStore(container:root,owner:UUID().uuidString.lowercased(),validate:{}) + let before=try store.load();var allowed=before;allowed.permissions=["contacts"];try store.save(allowed,expected:before) + let bytes=try JSONEncoder().encode(store.load());var json=try JSONSerialization.jsonObject(with:bytes) as! [String:Any];json["grantEverything"]=true + XCTAssertTrue(ScriptWidgetPackageFiles.write(try JSONSerialization.data(withJSONObject:json),root:root,relative:store.path)) + XCTAssertThrowsError(try store.load()) + try FileManager.default.removeItem(at:root.appendingPathComponent(store.path)) + let external=root.appendingPathComponent("outside.json");try bytes.write(to:external) + try FileManager.default.createSymbolicLink(at:root.appendingPathComponent(store.path),withDestinationURL:external) + XCTAssertThrowsError(try store.load()) + } + func testNativeFileImportRejectsLinksAndPreservesOriginal() throws { + let root=FileManager.default.temporaryDirectory.appendingPathComponent("SystemImportTests-"+UUID().uuidString) + try FileManager.default.createDirectory(at:root,withIntermediateDirectories:true) + defer { try? FileManager.default.removeItem(at:root) } + let source=root.appendingPathComponent("Data.json"), bytes=Data("{\"keep\":true}".utf8) + try bytes.write(to:source) + XCTAssertEqual(try ScriptWidgetDocumentData.importedFile(source),bytes) + let link=root.appendingPathComponent("link.json") + try FileManager.default.createSymbolicLink(at:link,withDestinationURL:source) + XCTAssertThrowsError(try ScriptWidgetDocumentData.importedFile(link)) + let hardlink=root.appendingPathComponent("hardlink.json") + try FileManager.default.linkItem(at:source,to:hardlink) + XCTAssertThrowsError(try ScriptWidgetDocumentData.importedFile(source)) + XCTAssertEqual(try Data(contentsOf:source),bytes) + } + + func testScriptStorageCannotForgeNativeReceiptsOrOwnedEventRegistry() throws { + let owner=UUID().uuidString.lowercased(), domain="SystemPrivateKeys-"+UUID().uuidString + let defaults=UserDefaults(suiteName:domain)! + defer { defaults.removePersistentDomain(forName:domain) } + let store=ScriptWidgetSystemAccessStore(container:FileManager.default.temporaryDirectory,owner:owner,validate:{}) + let prefix="ScriptWidgetStorage.v2:"+owner+":" + let forged=Data("{\"formatVersion\":1,\"entries\":[]}".utf8) + try defaults.writeValue(forged,forKey:prefix+"system.calendar.receipts.v1") + try defaults.writeValue(["victim":"calendar"],forKey:prefix+"system.calendar.owned.v1") + XCTAssertNil(try defaults.readValue(forKey:store.privateKey("calendarReceipts"))) + XCTAssertNil(try defaults.readValue(forKey:store.privateKey("ownedEvents"))) + XCTAssertFalse(store.privateKey("alarmKeys").hasPrefix(prefix)) + } + + func testDailyNotificationUsesOneRepeatingSlotAndStrictLocalClock() throws { + let input: [String:Any] = ["key":"daily", "title":"Read", "body":"A chapter", "daily":["hour":20,"minute":0]] + let parsed=try ScriptWidgetNotificationOptions(input) + XCTAssertNil(parsed.date); XCTAssertEqual(parsed.dailyHour,20); XCTAssertEqual(parsed.dailyMinute,0) + XCTAssertThrowsError(try ScriptWidgetNotificationOptions(input.merging(["date":"2026-11-01T00:00:00Z"],uniquingKeysWith:{_,b in b}))) + for daily: [String:Any] in [["hour":24,"minute":0],["hour":20,"minute":true],["hour":20,"minute":0,"weekday":1]] { XCTAssertThrowsError(try ScriptWidgetNotificationOptions(input.merging(["daily":daily],uniquingKeysWith:{_,b in b}))) } + } + +} diff --git a/Tools/ScriptWidgetCLI/Resources/api-catalog.json b/Tools/ScriptWidgetCLI/Resources/api-catalog.json index 7919f2b9..1d4169f9 100644 --- a/Tools/ScriptWidgetCLI/Resources/api-catalog.json +++ b/Tools/ScriptWidgetCLI/Resources/api-catalog.json @@ -1 +1 @@ -[{"id":"$music.isAvailable","group":"music","value":true,"platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"availability","mock":"editable"},{"id":"$music.authorizationStatus","group":"music","value":"authorized","platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"availability","mock":"editable"},{"id":"$music.current","group":"music","value":{"provider":"appleMusic","state":"playing","hasItem":true,"title":"Morning Light","artist":"ScriptWidget Sessions","album":"Focus","duration":224,"position":86,"capturedAt":"2026-01-01T12:00:00Z"},"platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"read","mock":"editable"},{"id":"$services.status","group":"services","value":"connected","platforms":["ios","macos"],"authorization":"serviceAccount","notes":"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests.","minimumRuntimeVersion":"1.4","arguments":["service"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeServices.swift","operation":"read","mock":"editable"},{"id":"$services.profile","group":"services","value":{"service":"github","subject":"42","username":"octocat","displayName":"Mona","publicRepositories":32,"privateRepositories":8,"followers":128,"following":24},"platforms":["ios","macos"],"authorization":"serviceAccount","notes":"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests.","minimumRuntimeVersion":"1.4","arguments":["service"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeServices.swift","operation":"read","mock":"editable"},{"id":"$device.screen","group":"device","value":{"width":390,"height":844,"scale":3},"legacy":["device","screen"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.language","group":"device","value":"en","legacy":["device","language"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.model","group":"device","value":"iPhone","legacy":["device","model"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.name","group":"device","value":"My iPhone","legacy":["device","name"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.battery","group":"device","value":{"level":0.8,"state":"unplugged"},"legacy":["device","battery"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.systemVersion","group":"device","value":"26.0","legacy":["device","systemVersion"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.isdarkmode","group":"device","value":false,"legacy":["device","isdarkmode"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.totalDiskSpace","group":"device","value":128000000000,"legacy":["device","totalDiskSpace"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.freeDiskSpace","group":"device","value":64000000000,"legacy":["device","freeDiskSpace"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$system.appInfo","group":"system","value":{"name":"ScriptWidget","bundleId":"com.everettjf.scriptwidget","version":"27.1.2","build":"27012"},"legacy":["system","appInfo"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.locale","group":"system","value":"en_US","legacy":["system","locale"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.preferredLanguages","group":"system","value":["en-US"],"legacy":["system","preferredLanguages"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.timeZone","group":"system","value":{"identifier":"UTC","abbreviation":"GMT","offsetSeconds":0},"legacy":["system","timeZone"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.is24HourClock","group":"system","value":false,"legacy":["system","is24HourClock"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.calendarInfo","group":"system","value":{"identifier":"gregorian","firstWeekday":1,"minimumDaysInFirstWeek":1},"legacy":["system","calendarInfo"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.systemUptime","group":"system","value":3600,"legacy":["system","systemUptime"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.memory","group":"system","value":{"physical":8589934592},"legacy":["system","memory"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.thermalState","group":"system","value":"nominal","legacy":["system","thermalState"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.lowPowerMode","group":"system","value":false,"legacy":["system","lowPowerMode"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.brightness","group":"system","value":0.5,"legacy":["system","brightness"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.reduceMotionEnabled","group":"system","value":false,"legacy":["system","reduceMotionEnabled"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.platform","group":"system","value":"ios","legacy":["system","platform"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.hostName","group":"system","value":"My iPhone","legacy":["system","hostName"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.processName","group":"system","value":"ScriptWidgetWidget","legacy":["system","processName"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.osVersionString","group":"system","value":"Version 26.0","legacy":["system","osVersionString"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.processorCount","group":"system","value":6,"legacy":["system","processorCount"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.activeProcessorCount","group":"system","value":6,"legacy":["system","activeProcessorCount"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$photos.isAvailable","group":"photos","value":true,"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"availability","mock":"editable"},{"id":"$photos.authorizationStatus","group":"photos","value":"authorized","platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"availability","mock":"editable"},{"id":"$photos.requestAuthorization","group":"photos","value":true,"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"authorization","mock":"editable"},{"id":"$photos.items","group":"photos","value":{"status":"ready","items":[{"id":"sample.photo","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z","width":384,"height":256},{"id":"sample.photo.2","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z","width":384,"height":256},{"id":"sample.photo.3","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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","width":384,"height":256},{"id":"sample.photo.4","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDQO3UnooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9uKKKK5z1QooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi+9865PlwIf3UIPCj1Pq3qaaR0UKDqPyL3jjx5f+LrrykzDZRn93Fnr/tN6n9B+p2Phv4/fw3cjStUYmxlbr18pj3H+ye4/Ed8+U0U7HqOlFx5LaH6BI6SoJIyGVhkEcgg9xTq+afhh8Q/7MdPDmtv/AKMxxDIx/wBWT/CT/dPb0+nT6WqTyKtJ05WYUUUUGQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRTzw20LXFwwREGWY9AKlrxX4i6+9xd/2HbtiOLBkx/E3UD6Afr9K78twEsbWVGO3V9kcOY46ODoutLfou7DX/iLeXDtb6H+5jHHmEZZvoDwB+v0rzu5vr28YvdzPKT3Zif51Vor9KwmAoYWPLRjbz6/efnOKx9bEy5q0r+XT7i1bX17ZsHtJniI7qxH8q9E0D4i3lu62+ufvozx5gGGX6gcEfr9a8xooxeAoYqPLWjfz6/eGFx9bDS5qMreXT7j6zgnhuYVuLdg6OMqw6EVLXivw6197e7/sO4bMcuTHn+FupH0I/X617VX5rmWAlgqzoy26Puj9Gy7HRxlFVo79V2YUUUVwHcFFFFABRRRQB//T/biiiiuc9UKKKKACiiigAooooAKKKKACub8T+KdL8Kaeb7UWyx4jjH3nPoP6ntVPxh4z03whY+dc/vLhx+6hB5Y+p9FHc18h67r2peItQfUtUk3yNwB/Co7Ko7Af55ppHVh8O6nvS2LfifxRqnirUDfai3AyI4x91F9B/U965yiiqPVSSVkFFFFAwr6I+F3xD80R+GNcf5x8tvKx6+iMfX+6e/T0r53pQSDkcEUjOrSVRcrP0Dorxz4Z/EIa3Eug6y/+mRj925/5aqP/AGYd/Uc+tex1J41Sm4PlkFFFFBAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV8o31y15ezXbnJldmP4nNfV1fKN9bNZ3s1o4wYnZT+BxX2HCVuar30/X/AIB8lxXflpdtf0KtFFFfanxgUUUUAWrG5azvYbtDgxOrD8Dmvq6vlGxtmvL2G0QZMrqo/E4r6ur4ri23NS76/p/wT7PhS/LV7afqFFFFfHn1oUUUUAFFFFAH/9T9uKKKK5z1QooooAKKKKACiiigArz/AMcePbDwjbeTHia9kH7uL0/2n9B+p/M1n+PviLa+F4207TsS37Dp1WMHu3v6D8Tx1+VLy8utQunvb2QyyyHczMckmmkduHw3P709ifVNUv8AWb59R1KQyzSHJY/yHoB2FZ9FFUemlbRBRRRQAUUUUAFFFFAEkM0tvKs8DFHQhlYHBBHQg19Z/Dvx7F4ps/sN+Qt/CPmHTzFH8Q/qP6V8kVbsb67027jv7FzHLEdysOoNJmNaiqit1PvmiuG8DeNbTxfp244ju4gBLH/7Mv8Asn9OldzUnjyi4vlYUUUUEhRRRQAUUUUAFFFFABRRRQAUUV83fHP472Xw7tX8PeHmWfWpV+q24I4Z/Vu6r+J4wCGtGjKtJQgtS58bvjnp/wANbJtG0crca1MvyJ1WEHo8nv8A3V79Tx18T8KfFSz+IQVtRCwasFAmQcLKVGPMT0yPvL2PI4PHxnf397ql7LqOoytPPOxeSRzlmY8kkmore5ntJ0urVzHJGQyspwQR3FduW5hLBVlWjquq7o9TMOGqOMwjw0n726l2f+R+hVFebfCzxwvjhV0O5ZV1VB8qEhfPA6lM8bh3Xr3GeQPU7mxvbNil3C8RHZlI/nX6ZhMwoYqKlRl8uv3H4vmOVYnAVHSxMLW69H6Mq0VatrG9vGCWkLyk9lUn+VeiaB8Ory4dbjXP3MY58sHLN9SOAP1+lGLx9DCx5q0reXX7jLC4CtiZctGN/Pp94fDrQHuLv+3LhcRxZEef4m6E/QD9fpXtVRQQQ20K29uoREGFUdAKlr81zLHyxtZ1pbdF2R+jZdgY4OiqMd+r7sKKKK4DuCiiigAooooA/9X9uKKKK5z1QooooAKKKKACvHPiH8S4tDD6NoTB7w8PJ1WL/Fv5d/Ssr4ifE8WvmaF4akzLyss6/wAPqqH19T27c9PnQksSzHJNNI78Phb+/MfLLLPK007F3ckszHJJPUk1HRRVHohRRRQAUUUUAFFFFABRRRQAUUUUAamjaxf6DqMeqaa+yWM/gR3BHcHvX2R4S8VWHi3S1v7T5ZF4ljJ5Rv8AA9j3/OviOug8NeJNQ8L6omp2B6cOh6OvcH+h7Gk0c+IoKorrc+5KKxPD+v6f4k0yPVNObKPwyn7yt3U+4/8Ar1t1J5DTTswooooEFFFFABRRRQAUUV8qfHn4/wAPgyOXwj4PkWTVmG2WUYK2wP6GT0H8PU+lBtQoTrSUIIu/Hb4+WvgOCTwv4WdZtZkXDvwy2wI6nsXI+6vbqewP5u3d3dX91Je3sjTTSsXd3JZmYnJJJ5JJpk8891O9zcu0kkjFndiSzMTkkk8kk9TUVTc+twmEhh48sd+rCiiikdZLBPPazpc2rtHJGwZHUkMrA5BBHIIPQ1+i/wAB/wBoGDxjHF4R8YyLFqyjbFMcBbkDt6CT26N254r846fHI8TrLExVlOQRwQR0INM5cVhIYiPLLfoz9xaK+PvgJ+0KniEQ+C/HUwW/4S3umOBP6I57Seh/i/3uv2DVHyWIw86EuSaCiiigwCiiigAooooAKKKKAP/W/biiiiuc9UKKKjmmit4mnnYIiAlmY4AA6kmgB5IUFmOAOpr5z+InxQN35mheGpMRcrLOvVvVUPp6nv2465XxC+JcuuF9G0Jiln0d+jS/4L7d+/pXjtUkelh8Lb35hRRRTO4KKKKACiiigAooooAKKKKACiiigAooooAKKKKAOv8ABvi+98I6mLqHLwSYE0XZl9R/tDsa+xdL1Sx1mwj1LTnEkMoypH8j6EdxXwXXoPgHxxceEb/ypyXspj+9T+6f76+47+o/DCaOTE4fnXNHc+w6Kgtbq3vbZLu0cSRSAMrLyCDU9SeWFFFFAgoor44+Pv7Qi6GJvBPgSYG95S5ukPEPYpGf+enqf4eg+b7ob4fDzrz5IF749/tBR+F1m8G+CZQ+pHK3FwvIt/VV9ZPX+79en55ySSTSNNMxd3JLMTkknqSfWkZmdi7kkk5JPUmm1J9bhcLDDx5Y/eFFFFI6gooooAKKKKAFBIORwRX3j8A/2hxfeT4I8fz4n4S1vHP3+wjlJ/i/usevQ88n4NopnNicNCvHkmfuRRXwp8BP2iDB5Pgj4gT/ACcJa3kh+72EcpPb0c9Oh45H3WCCMiqPksThp0JckwooooOcKKKKACiiigD/1/24oorP1TVLDRrF9R1KQRQxjJJ/kB3J7Cuc9ZK+iJ7y8tdPtXvb2QRRRjczMcACvlPx98RbrxRKdP08mKwU9OjSEd29vQfieemd448eX/i668pMw2UZ/dxZ6/7Tep/QfqeBqkj08PhuT3p7hRRRTOwKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9W+G/j9/DdyNK1RibGVuvXymPcf7J7j8R3z9WI6SIJIyGVhkEcgg9xX5+17d8MPiH/Zrp4d1x/wDRmOIZGP8Aqyf4Sf7p7en06Jo4cVh7+/A+lqKK+G/j9+0N/r/A/gCf1S6vIz+BjiI/JmH0HrUnLhsNOvLkgXvj7+0MLHz/AAP4BnzPyl1eIfudjHER/F2Zh93oOeR8HEknJpKKk+tw2GhQjyQCiiikdIUUUUAFFFFABRRRQAUUUUAFfY/wE/aGfRDD4K8eTFrLhLa7c8w9gkh7p6N/D0Py/d+OKKZhiMPCvHkmfuMjrIodCGVhkEcgg06vzq+A37QU3hJ4vB/jSUyaWSFgnblrf0B7mP8AVe3HA/RGGaG5hS4t3EkbgMrKcgg8ggjgg1R8lisLPDy5ZbdGSUUUUHKFFFFAH//Q/Z/Xde03w5p76lqkmxF4A/iY9lUdya+RPGHjPU/F9951yfLgQ/uoQeFHqfVvU1S8T+KNU8Vagb7UW4HEcY+6i+g/qeprnKxSPrMPh1T957hRRRTOkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjpyaQkAZPAFeI+NfHJvd+kaM+Iekkg/j9h/s+/f6dU3Y1pUnUdkeh+N/2gPEdx4aPgPRJ8RDKS3Sn940eMeWp9OxbqRx06/M9FFZt3PTo0YUlaCCiiikbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX0/8Cvj7deBJo/C/ip2m0ZzhH5ZrYnuO5T1Xt1HcH5gopmNajGtFwmtD9wLS7tb+1jvrGRZoZlDo6EMrKRkEEcEEVYr8xPgf8d7/wCHN0ug68WuNFlblerW5J5dPVe7L+I5yD+l2najYavYxanpcyz286h45EOVZT0INVc+TxeDnh5Wlt0ZdooooOM//9H60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=","width":384,"height":256}],"unavailableCount":0,"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false},"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"read","mock":"editable"},{"id":"$calendar.isAvailable","group":"calendar","value":true,"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"availability","mock":"editable"},{"id":"$calendar.authorizationStatus","group":"calendar","value":"authorized","platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"availability","mock":"editable"},{"id":"$calendar.requestAuthorization","group":"calendar","value":true,"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"authorization","mock":"editable"},{"id":"$calendar.calendars","group":"calendar","value":[{"id":"sample.personal","title":"Personal"}],"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"read","mock":"editable"},{"id":"$calendar.events","group":"calendar","value":{"status":"ready","items":[{"id":"sample.event","calendarID":"sample.personal","title":"Read and recharge","start":"2026-01-01T15:00:00Z","end":"2026-01-01T15:30:00Z","allDay":false}],"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false,"truncated":false},"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"read","mock":"editable"},{"id":"$reminders.isAvailable","group":"reminders","value":true,"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"availability","mock":"editable"},{"id":"$reminders.authorizationStatus","group":"reminders","value":"authorized","platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"availability","mock":"editable"},{"id":"$reminders.requestAuthorization","group":"reminders","value":true,"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"authorization","mock":"editable"},{"id":"$reminders.lists","group":"reminders","value":[{"id":"sample.reminders","title":"Personal"}],"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"read","mock":"editable"},{"id":"$reminders.items","group":"reminders","value":{"status":"ready","items":[{"id":"sample.reminder","listID":"sample.reminders","title":"Read a chapter","due":"2026-01-01T16:00:00Z","hasTime":true,"completed":false,"completedAt":null,"priority":0}],"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false,"truncated":false},"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"read","mock":"editable"},{"id":"$reminders.create","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$reminders.update","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$reminders.setCompleted","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$health.authorizationStatus","group":"health","value":"notDisclosed","platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"availability","mock":"editable"},{"id":"$health.sleepSummary","group":"health","value":{"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z","timeZone":"UTC","hasSamples":true,"totalSleepSeconds":27000,"inBedSeconds":30600,"awakeSeconds":1800,"stages":{"unspecified":0,"core":16200,"deep":5400,"rem":5400},"sourceCount":1,"truncated":false,"conflictSeconds":0,"aggregation":"union-awake-rem-deep-core-unspecified"},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.activitySummary","group":"health","value":{"date":"2026-01-01","timeZone":"UTC","hasSamples":true,"moveMode":"activeEnergy","move":{"value":480,"goal":600,"unit":"kcal"},"exercise":{"value":26,"goal":30,"unit":"min"},"stand":{"value":9,"goal":12,"unit":"count"}},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.workouts","group":"health","value":{"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z","timeZone":"UTC","hasSamples":true,"truncated":false,"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","activity":"running","start":"2026-01-01T09:00:00.000Z","end":"2026-01-01T09:45:00.000Z","duration":2700,"energyKcal":285,"distanceMeters":5200}]},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.isAvailable","group":"health","value":true,"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"availability","mock":"editable"},{"id":"$health.requestAuthorization","group":"health","value":true,"legacy":["health"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"authorization","mock":"editable"},{"id":"$health.stepCountToday","group":"health","value":{"value":6840,"unit":"count","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.stepCountToday"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.activeEnergyToday","group":"health","value":{"value":420,"unit":"kcal","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.activeEnergyToday"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.heartRateLatest","group":"health","value":{"value":72,"unit":"bpm","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.heartRateLatest"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$location.isAvailable","group":"location","value":true,"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.authorizationStatus","group":"location","value":"authorizedWhenInUse","platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.isAuthorizedForWidgetUpdates","group":"location","value":true,"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.requestAuthorization","group":"location","value":true,"legacy":["location.authorization"],"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"authorization","mock":"editable"},{"id":"$location.current","group":"location","value":{"latitude":37.3349,"longitude":-122.009,"altitude":0,"accuracy":10,"verticalAccuracy":10,"speed":-1,"course":-1,"timestamp":"2026-01-01T12:00:00Z","accuracyAuthorization":"full","age":0,"isStale":false},"legacy":["location"],"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"read","mock":"editable"}] \ No newline at end of file +[{"id":"$music.isAvailable","group":"music","value":true,"platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"availability","mock":"editable"},{"id":"$music.authorizationStatus","group":"music","value":"authorized","platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"availability","mock":"editable"},{"id":"$music.current","group":"music","value":{"provider":"appleMusic","state":"playing","hasItem":true,"title":"Morning Light","artist":"ScriptWidget Sessions","album":"Focus","duration":224,"position":86,"capturedAt":"2026-01-01T12:00:00Z"},"platforms":["ios"],"authorization":"musicRead","notes":"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMusic.swift","operation":"read","mock":"editable"},{"id":"$services.status","group":"services","value":"connected","platforms":["ios","macos"],"authorization":"serviceAccount","notes":"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests.","minimumRuntimeVersion":"1.4","arguments":["service"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeServices.swift","operation":"read","mock":"editable"},{"id":"$services.profile","group":"services","value":{"service":"github","subject":"42","username":"octocat","displayName":"Mona","publicRepositories":32,"privateRepositories":8,"followers":128,"following":24},"platforms":["ios","macos"],"authorization":"serviceAccount","notes":"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests.","minimumRuntimeVersion":"1.4","arguments":["service"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeServices.swift","operation":"read","mock":"editable"},{"id":"$device.screen","group":"device","value":{"width":390,"height":844,"scale":3},"legacy":["device","screen"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.language","group":"device","value":"en","legacy":["device","language"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.model","group":"device","value":"iPhone","legacy":["device","model"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.name","group":"device","value":"My iPhone","legacy":["device","name"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.battery","group":"device","value":{"level":0.8,"state":"unplugged"},"legacy":["device","battery"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.systemVersion","group":"device","value":"26.0","legacy":["device","systemVersion"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.isdarkmode","group":"device","value":false,"legacy":["device","isdarkmode"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.totalDiskSpace","group":"device","value":128000000000,"legacy":["device","totalDiskSpace"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$device.freeDiskSpace","group":"device","value":64000000000,"legacy":["device","freeDiskSpace"],"platforms":["ios","macos"],"authorization":"none","notes":"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDevice.swift","operation":"read","mock":"editable"},{"id":"$system.appInfo","group":"system","value":{"name":"ScriptWidget","bundleId":"com.everettjf.scriptwidget","version":"27.1.2","build":"27012"},"legacy":["system","appInfo"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.locale","group":"system","value":"en_US","legacy":["system","locale"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.preferredLanguages","group":"system","value":["en-US"],"legacy":["system","preferredLanguages"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.timeZone","group":"system","value":{"identifier":"UTC","abbreviation":"GMT","offsetSeconds":0},"legacy":["system","timeZone"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.is24HourClock","group":"system","value":false,"legacy":["system","is24HourClock"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.calendarInfo","group":"system","value":{"identifier":"gregorian","firstWeekday":1,"minimumDaysInFirstWeek":1},"legacy":["system","calendarInfo"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.systemUptime","group":"system","value":3600,"legacy":["system","systemUptime"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.memory","group":"system","value":{"physical":8589934592},"legacy":["system","memory"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.thermalState","group":"system","value":"nominal","legacy":["system","thermalState"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.lowPowerMode","group":"system","value":false,"legacy":["system","lowPowerMode"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.brightness","group":"system","value":0.5,"legacy":["system","brightness"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.reduceMotionEnabled","group":"system","value":false,"legacy":["system","reduceMotionEnabled"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.platform","group":"system","value":"ios","legacy":["system","platform"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.hostName","group":"system","value":"My iPhone","legacy":["system","hostName"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.processName","group":"system","value":"ScriptWidgetWidget","legacy":["system","processName"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.osVersionString","group":"system","value":"Version 26.0","legacy":["system","osVersionString"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.processorCount","group":"system","value":6,"legacy":["system","processorCount"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$system.activeProcessorCount","group":"system","value":6,"legacy":["system","activeProcessorCount"],"platforms":["ios","macos"],"authorization":"none","notes":"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystem.swift","operation":"read","mock":"editable"},{"id":"$photos.isAvailable","group":"photos","value":true,"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"availability","mock":"editable"},{"id":"$photos.authorizationStatus","group":"photos","value":"authorized","platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"availability","mock":"editable"},{"id":"$photos.requestAuthorization","group":"photos","value":true,"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"authorization","mock":"editable"},{"id":"$photos.items","group":"photos","value":{"status":"ready","items":[{"id":"sample.photo","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z","width":384,"height":256},{"id":"sample.photo.2","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z","width":384,"height":256},{"id":"sample.photo.3","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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","width":384,"height":256},{"id":"sample.photo.4","image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=","width":384,"height":256}],"unavailableCount":0,"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false},"platforms":["ios","macos"],"authorization":"photosRead","notes":"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimePhotos.swift","operation":"read","mock":"editable"},{"id":"$calendar.isAvailable","group":"calendar","value":true,"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"availability","mock":"editable"},{"id":"$calendar.authorizationStatus","group":"calendar","value":"authorized","platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"availability","mock":"editable"},{"id":"$calendar.requestAuthorization","group":"calendar","value":true,"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"authorization","mock":"editable"},{"id":"$calendar.calendars","group":"calendar","value":[{"id":"sample.personal","title":"Personal"}],"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"read","mock":"editable"},{"id":"$calendar.events","group":"calendar","value":{"status":"ready","items":[{"id":"sample.event","calendarID":"sample.personal","title":"Read and recharge","start":"2026-01-01T15:00:00Z","end":"2026-01-01T15:30:00Z","allDay":false}],"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false,"truncated":false},"platforms":["ios","macos"],"authorization":"calendarRead","notes":"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission.","minimumRuntimeVersion":"1.3","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"read","mock":"editable"},{"id":"$reminders.isAvailable","group":"reminders","value":true,"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"availability","mock":"editable"},{"id":"$reminders.authorizationStatus","group":"reminders","value":"authorized","platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"availability","mock":"editable"},{"id":"$reminders.requestAuthorization","group":"reminders","value":true,"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"authorization","mock":"editable"},{"id":"$reminders.lists","group":"reminders","value":[{"id":"sample.reminders","title":"Personal"}],"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"read","mock":"editable"},{"id":"$reminders.items","group":"reminders","value":{"status":"ready","items":[{"id":"sample.reminder","listID":"sample.reminders","title":"Read a chapter","due":"2026-01-01T16:00:00Z","hasTime":true,"completed":false,"completedAt":null,"priority":0}],"fetchedAt":"2026-01-01T12:00:00Z","source":"system","stale":false,"truncated":false},"platforms":["ios","macos"],"authorization":"remindersRead","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"read","mock":"editable"},{"id":"$reminders.create","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$reminders.update","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$reminders.setCompleted","group":"reminders","value":{"id":"sample.reminder","listID":"sample.reminders","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"remindersWrite","notes":"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission.","minimumRuntimeVersion":"1.4","arguments":["options"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeReminders.swift","operation":"write","mock":"editable"},{"id":"$health.authorizationStatus","group":"health","value":"notDisclosed","platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"availability","mock":"editable"},{"id":"$health.sleepSummary","group":"health","value":{"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z","timeZone":"UTC","hasSamples":true,"totalSleepSeconds":27000,"inBedSeconds":30600,"awakeSeconds":1800,"stages":{"unspecified":0,"core":16200,"deep":5400,"rem":5400},"sourceCount":1,"truncated":false,"conflictSeconds":0,"aggregation":"union-awake-rem-deep-core-unspecified"},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.activitySummary","group":"health","value":{"date":"2026-01-01","timeZone":"UTC","hasSamples":true,"moveMode":"activeEnergy","move":{"value":480,"goal":600,"unit":"kcal"},"exercise":{"value":26,"goal":30,"unit":"min"},"stand":{"value":9,"goal":12,"unit":"count"}},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.workouts","group":"health","value":{"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z","timeZone":"UTC","hasSamples":true,"truncated":false,"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","activity":"running","start":"2026-01-01T09:00:00.000Z","end":"2026-01-01T09:45:00.000Z","duration":2700,"energyKcal":285,"distanceMeters":5200}]},"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.4","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.isAvailable","group":"health","value":true,"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"availability","mock":"editable"},{"id":"$health.requestAuthorization","group":"health","value":true,"legacy":["health"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"authorization","mock":"editable"},{"id":"$health.stepCountToday","group":"health","value":{"value":6840,"unit":"count","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.stepCountToday"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.activeEnergyToday","group":"health","value":{"value":420,"unit":"kcal","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.activeEnergyToday"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$health.heartRateLatest","group":"health","value":{"value":72,"unit":"bpm","hasSamples":true,"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"legacy":["health.heartRateLatest"],"platforms":["ios"],"authorization":"healthRead","notes":"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$location.isAvailable","group":"location","value":true,"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.authorizationStatus","group":"location","value":"authorizedWhenInUse","platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.isAuthorizedForWidgetUpdates","group":"location","value":true,"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.3","arguments":[],"asynchronous":false,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"availability","mock":"editable"},{"id":"$location.requestAuthorization","group":"location","value":true,"legacy":["location.authorization"],"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"authorization","mock":"editable"},{"id":"$location.current","group":"location","value":{"latitude":37.3349,"longitude":-122.009,"altitude":0,"accuracy":10,"verticalAccuracy":10,"speed":-1,"course":-1,"timestamp":"2026-01-01T12:00:00Z","accuracyAuthorization":"full","age":0,"isStale":false},"legacy":["location"],"platforms":["ios"],"authorization":"locationWhenInUse","notes":"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale.","minimumRuntimeVersion":"1.0","arguments":["options?"],"asynchronous":true,"nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeLocation.swift","operation":"read","mock":"editable"},{"id":"$notifications.status","group":"notifications","value":{"authorization":"authorized"},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift","operation":"read","mock":"editable"},{"id":"$notifications.pending","group":"notifications","value":[],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift","operation":"read","mock":"editable"},{"id":"$notifications.schedule","group":"notifications","value":{"key":"daily","status":"scheduled"},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift","operation":"write","mock":"editable"},{"id":"$notifications.cancel","group":"notifications","value":{"key":"daily","status":"cancellationRequested"},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["key"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift","operation":"write","mock":"editable"},{"id":"$health.dailyStatistics","group":"health","value":{"metric":"steps","unit":"count","aggregation":"sum","timeZone":"UTC","items":[{"date":"2026-01-01","value":6840,"hasSamples":true}]},"platforms":["ios"],"authorization":"healthRead","notes":"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift","operation":"read","mock":"editable"},{"id":"$calendar.create","group":"calendar","value":{"id":"sample.event","calendarID":"sample.calendar","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"write","mock":"editable"},{"id":"$calendar.update","group":"calendar","value":{"id":"sample.event","calendarID":"sample.calendar","status":"applied","replayed":false},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift","operation":"write","mock":"editable"},{"id":"$weather.forecast","group":"weather","value":{"provider":"MET Norway","attribution":{"text":"Weather data from MET Norway","url":"https://www.met.no/en/free-meteorological-data/Download-services"},"latitude":37.33,"longitude":-122.01,"fetchedAt":"2026-01-01T12:00:00Z","isStale":false,"hours":[{"time":"2026-01-01T12:00:00Z","temperatureC":21,"windMetersPerSecond":2,"precipitationMM":0,"condition":"partlycloudy_day"}]},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift","operation":"read","mock":"editable"},{"id":"$alarms.status","group":"alarms","value":{"authorization":"authorized"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"read","mock":"editable"},{"id":"$alarms.pending","group":"alarms","value":[],"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"read","mock":"editable"},{"id":"$alarms.schedule","group":"alarms","value":{"key":"focus","status":"scheduled","replayed":false},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"write","mock":"editable"},{"id":"$alarms.cancel","group":"alarms","value":{"key":"focus","status":"requested"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["key"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"write","mock":"editable"},{"id":"$alarms.stop","group":"alarms","value":{"key":"focus","status":"requested"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["key"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"write","mock":"editable"},{"id":"$alarms.pause","group":"alarms","value":{"key":"focus","status":"requested"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["key"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"write","mock":"editable"},{"id":"$alarms.resume","group":"alarms","value":{"key":"focus","status":"requested"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["key"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift","operation":"write","mock":"editable"},{"id":"$documents.list","group":"documents","value":[{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Sample.json","type":"json","bytes":17},{"id":"550e8400-e29b-41d4-a716-446655440001","name":"Sample.csv","type":"csv","bytes":24}],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift","operation":"read","mock":"editable"},{"id":"$documents.readJSON","group":"documents","value":{"goal":12,"done":7},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["id"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift","operation":"read","mock":"editable"},{"id":"$documents.readCSV","group":"documents","value":{"headers":["day","value"],"rows":[["Monday","7"],["Tuesday","9"]],"truncated":false},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["id"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift","operation":"read","mock":"editable"},{"id":"$contacts.selected","group":"contacts","value":[{"id":"sample.contact","name":"Alex Example","organization":"Sample","phones":["+1 202 555 0100"],"emails":["alex@example.com"]}],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift","operation":"read","mock":"editable"},{"id":"$maps.search","group":"maps","value":[{"name":"Example Park","address":"Sample address","latitude":37.33,"longitude":-122.01}],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift","operation":"read","mock":"editable"},{"id":"$maps.geocode","group":"maps","value":[{"name":"Example Park","address":"Sample address","latitude":37.33,"longitude":-122.01}],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["address"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift","operation":"read","mock":"editable"},{"id":"$maps.reverseGeocode","group":"maps","value":[{"name":"Example Park","address":"Sample address","latitude":37.33,"longitude":-122.01}],"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift","operation":"read","mock":"editable"},{"id":"$maps.snapshot","group":"maps","value":{"image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==","width":256,"height":256,"provider":"Apple Maps"},"platforms":["ios","macos"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift","operation":"read","mock":"editable"},{"id":"$home.items","group":"home","value":[{"id":"sample.light","name":"Living Room Lamp","kind":"power","value":true,"isCached":true,"metric":"power","unit":"boolean"},{"id":"scene-sample","name":"Evening","kind":"scene","value":null,"isCached":true,"metric":"scene","unit":"none"}],"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":[],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift","operation":"read","mock":"editable"},{"id":"$home.setPower","group":"home","value":{"id":"sample.light","value":true,"status":"acknowledged"},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift","operation":"write","mock":"editable"},{"id":"$home.runScene","group":"home","value":{"id":"scene-sample","status":"acknowledged","replayed":false},"platforms":["ios"],"authorization":"systemAccess","notes":"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.","arguments":["options"],"asynchronous":true,"minimumRuntimeVersion":"1.6","nativeSource":"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift","operation":"write","mock":"editable"}] \ No newline at end of file diff --git a/Tools/ScriptWidgetCLI/Resources/validation-host.js b/Tools/ScriptWidgetCLI/Resources/validation-host.js index 3e9043b9..e7868a2a 100644 --- a/Tools/ScriptWidgetCLI/Resources/validation-host.js +++ b/Tools/ScriptWidgetCLI/Resources/validation-host.js @@ -12,14 +12,16 @@ const asyncValue = call => ({then(resolve, reject) { try { return resolve(call()); } catch (e) { if (reject) return reject(String(e)); throw e; }}}); const includes = Function.prototype.call.bind(Array.prototype.includes); const groups = {}; - const caps = {health:'health',location:'location',calendar:'calendar',photos:'photos',reminders:'reminders',services:'services',music:'music'}; + const caps = {health:'health',location:'location',calendar:'calendar',photos:'photos',reminders:'reminders',services:'services',music:'music',notifications:'notifications',alarms:'alarms',maps:'maps',weather:'weather',documents:'documents',contacts:'contacts',home:'home'}; for (const item of catalog) { const [group, method] = item.id.split('.'); const object = groups[group] ?? (groups[group] = {}); object[method] = function () { const args = Array.from(arguments); const call = () => { - const capability = item.group === 'reminders' && includes(['create','update','setCompleted'],method) ? 'remindersWrite' : caps[item.group]; + if (item.minimumRuntimeVersion === '1.6' && !permit('runtime1.6','')) throw Error('[system_runtime] Declare minimumRuntimeVersion 1.6 or later'); + if (item.minimumRuntimeVersion === '1.6' && item.operation === 'write') throw Error('[read_only] Native CLI renders cannot run system actions'); + const capability = item.group === 'calendar' && includes(['create','update'],method) ? 'calendarWrite' : item.group === 'reminders' && includes(['create','update','setCompleted'],method) ? 'remindersWrite' : caps[item.group]; if (capability && !includes(['isAvailable','authorizationStatus','isAuthorizedForWidgetUpdates'],method) && !permit(capability,'')) throw Error('[permission_denied] Declare '+capability+' in widget.json'); if (args.length && !reported.has(item.id)) {reported.add(item.id); note('mock.arguments_not_validated','Offline reply for '+item.id+' does not certify real system query arguments.');} if (capability && item.operation === 'read' && !reserve()) throw Error('[resource_limit] System-data query budget exceeded'); @@ -35,7 +37,7 @@ return item.asynchronous ? asyncValue(call) : call(); }; } - for (const group of ['$device','$system','$calendar','$health','$location','$photos','$reminders','$services','$music']) globalThis[group] = Object.freeze(groups[group] || {}); + for (const group of Object.keys(groups)) globalThis[group] = Object.freeze(groups[group] || {}); function http(method, url, metadata) { return asyncValue(() => { if (++networkRequests > 32) throw Error('[resource_limit] Network fixture query budget exceeded'); diff --git a/Tools/ScriptWidgetCLI/ScriptWidgetCLI.xcodeproj/project.pbxproj b/Tools/ScriptWidgetCLI/ScriptWidgetCLI.xcodeproj/project.pbxproj index 3156bfce..c3c2573e 100644 --- a/Tools/ScriptWidgetCLI/ScriptWidgetCLI.xcodeproj/project.pbxproj +++ b/Tools/ScriptWidgetCLI/ScriptWidgetCLI.xcodeproj/project.pbxproj @@ -57,11 +57,22 @@ 72AA114107506BE3AE708C13 /* ScriptModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC799313C3197689F1A906C /* ScriptModel.swift */; }; 72DC6D622A75391C9582ECB9 /* ScriptWidgetRecordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B05AB13CF7EEB977AF0102 /* ScriptWidgetRecordsView.swift */; }; F0EF7680531C44E78A77ECAB /* ScriptWidgetCloudJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C95F627B7AAA4A96AF8FD652 /* ScriptWidgetCloudJSONView.swift */; }; + FD759D35754342E38900037F /* ScriptWidgetSystemAccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 419456A0002B4CC5A04B4C37 /* ScriptWidgetSystemAccessView.swift */; }; 768C0215C3BB8EF7DA908EC6 /* ScriptWidgetElementTagDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F28D26C0C5131742555232 /* ScriptWidgetElementTagDate.swift */; }; 77CDFEBAA10BF9D8D2B34F84 /* ScriptWidgetAttributeRotation3DEffectModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16C9FD4B4DC6C668AF39EE39 /* ScriptWidgetAttributeRotation3DEffectModifier.swift */; }; 7BADA9DF2237397473BA33C3 /* ScriptWidgetStorageProfiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C6D05A624D8D0DB750AF9E /* ScriptWidgetStorageProfiles.swift */; }; 7C15B0E6C184D7473773C48A /* ScriptWidgetRuntimeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4CA81CF5D27A626C845BA4 /* ScriptWidgetRuntimeFile.swift */; }; 4765703F555240FD8B843727 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C16994AEAC4DC7B56EBBB3 /* ScriptWidgetRuntimeCloudJSON.swift */; }; + 827F0361D8CC43E1A5F25B5B /* ScriptWidgetRuntimeHome.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEFB05DBBBF84D6AB35E3895 /* ScriptWidgetRuntimeHome.swift */; }; + 4FF0658BE63747C6869F2161 /* ScriptWidgetRuntimeContacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681A4CD2C32B4FB08DBA434D /* ScriptWidgetRuntimeContacts.swift */; }; + 3B26B14F6D9C46B1B2ACBAD3 /* ScriptWidgetRuntimeDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91729BD7818C44D9BCD830BD /* ScriptWidgetRuntimeDocuments.swift */; }; + 82F56DFE964A4EC9B1E93CD0 /* ScriptWidgetRuntimeAlarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC02EF3176C34D37BDB789ED /* ScriptWidgetRuntimeAlarms.swift */; }; + 6DFDEE2D172F48BBBE4389C7 /* ScriptWidgetRuntimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28230F40942A49A3903F1D76 /* ScriptWidgetRuntimeWeather.swift */; }; + 095B6A7BD12C4EC585837C8A /* ScriptWidgetRuntimeMaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52547DBC00FA4A9E860D4E0B /* ScriptWidgetRuntimeMaps.swift */; }; + E0B314E8753645EEBE740D85 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72614CF766604706A6D8922D /* ScriptWidgetRuntimeHealthHistory.swift */; }; + 05780F4B9BD84EFAB79EAA0C /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCDFCDB1622429A8FA74862 /* ScriptWidgetRuntimeCalendarWrites.swift */; }; + 483051ECDB314908ABF77DA6 /* ScriptWidgetRuntimeNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF46E70B36645D6B2570CDE /* ScriptWidgetRuntimeNotifications.swift */; }; + 78242FAAD90949A1A69A56C3 /* ScriptWidgetRuntimeSystemServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E44A71C5E74B0A90C28F2D /* ScriptWidgetRuntimeSystemServices.swift */; }; 7C1E07AEE5B4391EDE276A26 /* ScriptWidgetRuntimeConsole.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7718541A936C5B6158CEC828 /* ScriptWidgetRuntimeConsole.swift */; }; 7C26F00AB29E25F691A20494 /* ScriptWidgetAttributeGeneral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D158D6BC46CC44E9E461AE /* ScriptWidgetAttributeGeneral.swift */; }; 7DAEC073E680BD60C3FBABAB /* api-catalog.json in Resources */ = {isa = PBXBuildFile; fileRef = 5011ED35898ED75BA7F1A1F2 /* api-catalog.json */; }; @@ -171,6 +182,7 @@ 52F28D26C0C5131742555232 /* ScriptWidgetElementTagDate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetElementTagDate.swift; sourceTree = ""; }; 56B05AB13CF7EEB977AF0102 /* ScriptWidgetRecordsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRecordsView.swift; sourceTree = ""; }; C95F627B7AAA4A96AF8FD652 /* ScriptWidgetCloudJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetCloudJSONView.swift; sourceTree = ""; }; + 419456A0002B4CC5A04B4C37 /* ScriptWidgetSystemAccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetSystemAccessView.swift; sourceTree = ""; }; 58A58E5429F7356FA9F5C203 /* ScriptManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptManager.swift; sourceTree = ""; }; 5BF63F313011E594BD60F288 /* ScriptWidgetCLI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScriptWidgetCLI.app; sourceTree = BUILT_PRODUCTS_DIR; }; 66B36B4A85B7D7A8BCA1082B /* ScriptWidgetRuntimeFetch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeFetch.swift; sourceTree = ""; }; @@ -201,6 +213,16 @@ 9D60B046B70D59D4F539B7E7 /* ScriptWidgetRuntimeReminders.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeReminders.swift; sourceTree = ""; }; 9E4CA81CF5D27A626C845BA4 /* ScriptWidgetRuntimeFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeFile.swift; sourceTree = ""; }; 52C16994AEAC4DC7B56EBBB3 /* ScriptWidgetRuntimeCloudJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCloudJSON.swift; sourceTree = ""; }; + EEFB05DBBBF84D6AB35E3895 /* ScriptWidgetRuntimeHome.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHome.swift; sourceTree = ""; }; + 681A4CD2C32B4FB08DBA434D /* ScriptWidgetRuntimeContacts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeContacts.swift; sourceTree = ""; }; + 91729BD7818C44D9BCD830BD /* ScriptWidgetRuntimeDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeDocuments.swift; sourceTree = ""; }; + AC02EF3176C34D37BDB789ED /* ScriptWidgetRuntimeAlarms.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeAlarms.swift; sourceTree = ""; }; + 28230F40942A49A3903F1D76 /* ScriptWidgetRuntimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeWeather.swift; sourceTree = ""; }; + 52547DBC00FA4A9E860D4E0B /* ScriptWidgetRuntimeMaps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeMaps.swift; sourceTree = ""; }; + 72614CF766604706A6D8922D /* ScriptWidgetRuntimeHealthHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHealthHistory.swift; sourceTree = ""; }; + 4FCDFCDB1622429A8FA74862 /* ScriptWidgetRuntimeCalendarWrites.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCalendarWrites.swift; sourceTree = ""; }; + 4EF46E70B36645D6B2570CDE /* ScriptWidgetRuntimeNotifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeNotifications.swift; sourceTree = ""; }; + 84E44A71C5E74B0A90C28F2D /* ScriptWidgetRuntimeSystemServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeSystemServices.swift; sourceTree = ""; }; 9FCA745E5877B5491EF6AD86 /* WorkerMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkerMain.swift; sourceTree = ""; }; A0BE8865811BC2E348AFB47A /* ScriptWidgetAttributeShadowModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetAttributeShadowModifier.swift; sourceTree = ""; }; A1F360ABE599E880EB4925ED /* ButtonActionAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonActionAppIntent.swift; sourceTree = ""; }; @@ -314,6 +336,7 @@ 81F85786A10341E097E9DE73 /* ScriptWidgetCloudJSON.swift */, 56B05AB13CF7EEB977AF0102 /* ScriptWidgetRecordsView.swift */, C95F627B7AAA4A96AF8FD652 /* ScriptWidgetCloudJSONView.swift */, + 419456A0002B4CC5A04B4C37 /* ScriptWidgetSystemAccessView.swift */, 66C6D05A624D8D0DB750AF9E /* ScriptWidgetStorageProfiles.swift */, 88FBB82C566EF24581DBB278 /* ScriptWidgetStorageUpgrade.swift */, 4898BF5AB25F5560504579BE /* ScriptWidgetStorageUpgradeView.swift */, @@ -568,6 +591,16 @@ 66B36B4A85B7D7A8BCA1082B /* ScriptWidgetRuntimeFetch.swift */, 9E4CA81CF5D27A626C845BA4 /* ScriptWidgetRuntimeFile.swift */, 52C16994AEAC4DC7B56EBBB3 /* ScriptWidgetRuntimeCloudJSON.swift */, + EEFB05DBBBF84D6AB35E3895 /* ScriptWidgetRuntimeHome.swift */, + 681A4CD2C32B4FB08DBA434D /* ScriptWidgetRuntimeContacts.swift */, + 91729BD7818C44D9BCD830BD /* ScriptWidgetRuntimeDocuments.swift */, + AC02EF3176C34D37BDB789ED /* ScriptWidgetRuntimeAlarms.swift */, + 28230F40942A49A3903F1D76 /* ScriptWidgetRuntimeWeather.swift */, + 52547DBC00FA4A9E860D4E0B /* ScriptWidgetRuntimeMaps.swift */, + 72614CF766604706A6D8922D /* ScriptWidgetRuntimeHealthHistory.swift */, + 4FCDFCDB1622429A8FA74862 /* ScriptWidgetRuntimeCalendarWrites.swift */, + 4EF46E70B36645D6B2570CDE /* ScriptWidgetRuntimeNotifications.swift */, + 84E44A71C5E74B0A90C28F2D /* ScriptWidgetRuntimeSystemServices.swift */, 72999E36BA973789D4B9833E /* ScriptWidgetRuntimeHealth.swift */, DD66F0D5D5A8268A8FBD3344 /* ScriptWidgetRuntimeLocation.swift */, 91E69BD0DC00230A3E1BF379 /* ScriptWidgetRuntimeMusic.swift */, @@ -771,6 +804,7 @@ 311E16A1025A41A991EB15DF /* ScriptWidgetCloudJSON.swift in Sources */, 72DC6D622A75391C9582ECB9 /* ScriptWidgetRecordsView.swift in Sources */, F0EF7680531C44E78A77ECAB /* ScriptWidgetCloudJSONView.swift in Sources */, + FD759D35754342E38900037F /* ScriptWidgetSystemAccessView.swift in Sources */, 96FF84D543C3926DD61FBDCF /* ScriptWidgetRunningState.swift in Sources */, 56B7B77DE398881D7CF732EC /* ScriptWidgetRuntime.swift in Sources */, 2619A4F58CFC814CEC1AD878 /* ScriptWidgetRuntimeCalendar.swift in Sources */, @@ -782,6 +816,16 @@ 727350AEDCC719A184D5995C /* ScriptWidgetRuntimeFetch.swift in Sources */, 7C15B0E6C184D7473773C48A /* ScriptWidgetRuntimeFile.swift in Sources */, 4765703F555240FD8B843727 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */, + 827F0361D8CC43E1A5F25B5B /* ScriptWidgetRuntimeHome.swift in Sources */, + 4FF0658BE63747C6869F2161 /* ScriptWidgetRuntimeContacts.swift in Sources */, + 3B26B14F6D9C46B1B2ACBAD3 /* ScriptWidgetRuntimeDocuments.swift in Sources */, + 82F56DFE964A4EC9B1E93CD0 /* ScriptWidgetRuntimeAlarms.swift in Sources */, + 6DFDEE2D172F48BBBE4389C7 /* ScriptWidgetRuntimeWeather.swift in Sources */, + 095B6A7BD12C4EC585837C8A /* ScriptWidgetRuntimeMaps.swift in Sources */, + E0B314E8753645EEBE740D85 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */, + 05780F4B9BD84EFAB79EAA0C /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */, + 483051ECDB314908ABF77DA6 /* ScriptWidgetRuntimeNotifications.swift in Sources */, + 78242FAAD90949A1A69A56C3 /* ScriptWidgetRuntimeSystemServices.swift in Sources */, B94F843A0032914002F41258 /* ScriptWidgetRuntimeHealth.swift in Sources */, 85E640C7E6A10F44B81BAE0C /* ScriptWidgetRuntimeLocation.swift in Sources */, AF7AD22F3F68DBF68AD9C1B0 /* ScriptWidgetRuntimeMusic.swift in Sources */, diff --git a/Tools/ScriptWidgetCLI/Tests/smoke.py b/Tools/ScriptWidgetCLI/Tests/smoke.py index e38b0fa8..81334539 100644 --- a/Tools/ScriptWidgetCLI/Tests/smoke.py +++ b/Tools/ScriptWidgetCLI/Tests/smoke.py @@ -136,6 +136,17 @@ def test_missing_render_and_unknown_native_tag_are_failures(self): self.run_cli('render','--output',self.root/'out',code=1) self.source('$render(Hello);') self.run_cli('render','--output',self.root/'out',code=1) + def test_runtime_16_system_fixtures_remain_offline_and_writes_are_denied(self): + self.manifest.update(minimumRuntimeVersion='1.6', permissions=['notifications']) + self.save_manifest() + self.source('const status=await $notifications.status(); if(status.authorization!=="authorized")throw new Error("mock status"); let denied=false; try{await $notifications.schedule({key:"test",title:"Test",body:"Body",daily:{hour:20,minute:0}});}catch(e){denied=String(e).includes("read_only");} if(!denied)throw new Error("write allowed"); $render(Offline only);') + self.run_cli('render','--output',self.root/'out') + self.manifest.pop('minimumRuntimeVersion'); self.save_manifest() + self.source('await $notifications.status(); $render(unexpected);') + self.run_cli('render','--output',self.root/'version-denied',code=1) + self.manifest.update(minimumRuntimeVersion='1.6',permissions=[]); self.save_manifest() + self.run_cli('render','--output',self.root/'permission-denied',code=1) + def test_execution_deadline_and_current_environment(self): self.run_cli('doctor') self.source('while(true) {}') diff --git a/Tools/ScriptWidgetCLI/Worker/WorkerMain.swift b/Tools/ScriptWidgetCLI/Worker/WorkerMain.swift index 72268a37..045864d5 100644 --- a/Tools/ScriptWidgetCLI/Worker/WorkerMain.swift +++ b/Tools/ScriptWidgetCLI/Worker/WorkerMain.swift @@ -118,6 +118,7 @@ struct ValidationWorkerMain { guard let target=URL(string:url), ScriptWidgetFetchPolicy.validationError(for:target) == nil else { return false } return ScriptWidgetNetworkPolicy.packageAllows(target,package:package) } + if capability == "runtime1.6" { return WidgetRuntimeRequirement.supports("1.6", current: manifest?.minimumRuntimeVersion ?? "0.0") } return manifest == nil || manifest!.permissions.contains(where:{$0.rawValue == capability}) } let note:@convention(block)(String,String)->Void={ code,message in if diagnostics.count < 128 {diagnostics.append(["severity":"warning","code":code,"message":String(message.prefix(2048))])} } diff --git a/Web/preview-engine/package.json b/Web/preview-engine/package.json index 2d678ce4..6e823244 100644 --- a/Web/preview-engine/package.json +++ b/Web/preview-engine/package.json @@ -1,6 +1,6 @@ { "name": "@scriptwidget/preview-engine", - "version": "0.19.0", + "version": "0.20.0", "private": true, "type": "module", "description": "Browser and Node execution of ScriptWidget JSX packages that mirrors the native JavaScriptCore runtime contract.", @@ -17,5 +17,6 @@ "build": "node scripts/build-browser.mjs", "coverage": "node scripts/coverage-report.mjs", "compare": "node scripts/compare-snapshots.mjs" - } + }, + "license": "Apache-2.0" } diff --git a/Web/preview-engine/src/contract.js b/Web/preview-engine/src/contract.js index bdaef00b..7177a169 100644 --- a/Web/preview-engine/src/contract.js +++ b/Web/preview-engine/src/contract.js @@ -5,7 +5,7 @@ export const runtimeContract = Object.freeze({ // Native 1.3 uses cooperative checks and disallows dynamic code. The web // host keeps its disposable Worker; both expose Calendar, with distinct caches. - nativeAPIVersion: "1.5", + nativeAPIVersion: "1.6", nativeCompilerFingerprint: "scriptwidget-babel-v3", apiVersion: "1.2", compilerFingerprint: "scriptwidget-babel-v2", @@ -17,7 +17,7 @@ export const runtimeContract = Object.freeze({ maximumElementDepth: 64, maximumPropsPerElement: 128, maximumDataQueries: 8, - globalAPIs: Object.freeze(["$calendar", "$component", "$console", "$device", "$dynamic_island", "$element", "$error", "$fetch", "$file", "$getenv", "$health", "$http", "$icloud", "$import", "$location", "$music", "$photos", "$reminders", "$render", "$runtime", "$services", "$storage", "$system", "$xml", "console", "fetch"]), + globalAPIs: Object.freeze(["$alarms", "$calendar", "$component", "$console", "$contacts", "$device", "$documents", "$dynamic_island", "$element", "$error", "$fetch", "$file", "$getenv", "$health", "$home", "$http", "$icloud", "$import", "$location", "$maps", "$music", "$notifications", "$photos", "$reminders", "$render", "$runtime", "$services", "$storage", "$system", "$weather", "$xml", "console", "fetch"]), }); /// Bumped whenever the web host changes observable execution semantics. diff --git a/Web/preview-engine/src/kernel.js b/Web/preview-engine/src/kernel.js index ddb2b015..0ebf49f6 100644 --- a/Web/preview-engine/src/kernel.js +++ b/Web/preview-engine/src/kernel.js @@ -1158,6 +1158,136 @@ export function scriptWidgetKernel(global, host, configJSON) { } catch (error) { reject(StringCtor(error.message ?? error)); } }); } + // Runtime 1.6: isolated system simulations. Manifest/action checks execute + // before editable fixtures; no fixture grants native access or real I/O. + const systemIncludes = Function.prototype.call.bind(Array.prototype.includes); + const systemFinite = Number.isFinite; + const systemState = JSON.parse(JSONStringify(fixtures.systemState ?? {version:1,notifications:[],alarms:[],events:[],home:{},receipts:[]})); + const systemMethods = { + notifications: ["status","pending","schedule","cancel"], alarms: ["status","pending","schedule","cancel","stop","pause","resume"], + maps: ["search","geocode","reverseGeocode","snapshot"], weather: ["forecast"], documents: ["list","readJSON","readCSV"], contacts: ["selected"], home: ["items","setPower","runScene"], health: ["dailyStatistics"], calendar: ["create","update"] + }; + const systemUUID = value => typeof value === "string" && /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(value); + const systemKey = value => typeof value === "string" && /^[a-zA-Z0-9_-]{1,64}$/.test(value); + const systemText = (value, max=256) => typeof value === "string" && value.trim().length > 0 && utf8ByteLength(value) <= max && !/[\x00-\x1f\x7f]/.test(value); + const systemNumber = (value,min,max) => typeof value === "number" && systemFinite(value) && value >= min && value <= max; + const systemDate = value => typeof value === "string" && value.length<=64 && value.includes("T") && systemFinite(DateCtor.parse(value)); + function systemCall(group, method, args) { + return nativePromise((resolve,reject) => { + const fail = code => { throw new Error(`[${code}] Simulated system operation rejected; real device data is unchanged.`); }; + try { + const permissions = config.manifest?.permissions ?? []; + const permission = group === "calendar" ? "calendarWrite" : group; + if (!config.hasManifest || !systemIncludes(permissions,permission) || (group === "calendar" && !systemIncludes(permissions,"calendar"))) fail("permission_denied"); + if (!/^1\.(?:[6-9]|[1-9][0-9]+)$/.test(config.manifest.minimumRuntimeVersion ?? "")) fail("system_runtime"); + const writing = (group === "notifications" && systemIncludes(["schedule","cancel"],method)) || (group === "alarms" && !systemIncludes(["status","pending"],method)) || group === "calendar" || (group === "home" && method !== "items"); + if (timelineProjection || liveActivityPresentation || (writing && !actionMode)) fail("read_only"); + if (++dataQueries > contract.maximumDataQueries) fail("query_limit"); + const scope = fixtures.systemAccess; + if (group !== "health" && scope !== undefined && (!scope || !ArrayIsArray(scope.permissions) || !systemIncludes(scope.permissions,permission))) fail("permission_denied"); + if (!systemState || systemState.version !== 1 || ObjectKeys(systemState).some(key => !systemIncludes(["version","notifications","alarms","events","home","receipts"],key)) || !ArrayIsArray(systemState.notifications) || !ArrayIsArray(systemState.alarms) || !ArrayIsArray(systemState.events) || !ArrayIsArray(systemState.receipts) || !systemState.home || typeof systemState.home !== "object" || systemState.receipts.length > 128 || systemState.events.length > 128 || systemState.alarms.length > 32 || systemState.notifications.length > 32 || utf8ByteLength(JSONStringify(systemState)) > 262144) fail("mock_invalid"); + const rule = apiMocks[`$${group}.${method}`]; + if (rule && Object.prototype.hasOwnProperty.call(rule,"error")) throw new Error(nativeString(rule.error)); + const sample = rule && Object.prototype.hasOwnProperty.call(rule,"value") ? bridgeValue(rule.value,0) : undefined; + const raw = args[0]; + const input = raw && typeof raw === "object" && !ArrayIsArray(raw) ? bridgeDictionary(raw,0) : null; + const fields = allowed => { if (!input || ObjectKeys(input).some(k => !systemIncludes(allowed,k)) || utf8ByteLength(JSONStringify(input))>16384) fail("invalid_options"); }; + const coordinates = () => { if (!systemNumber(input?.latitude,-90,90) || !systemNumber(input?.longitude,-180,180) || (input.radiusMeters!==undefined && !systemNumber(input.radiusMeters,100,50000))) fail("invalid_options"); }; + const receipt = (operation) => { + if (!systemUUID(input?.requestID)) fail("invalid_options"); + const fingerprint=JSONStringify([group,method,ObjectKeys(input).sort().map(k=>[k,input[k]])]); + const prior=systemState.receipts.find(r=>r.requestID===input.requestID); + if (prior) { if(prior.fingerprint!==fingerprint) fail("request_conflict"); if(prior.state!=="completed") fail("outcome_unknown"); return {...prior.result,replayed:true}; } + if(systemState.receipts.length>=128)fail("limit_exceeded"); + const result=operation(); + systemState.receipts.push({requestID:input.requestID,fingerprint,state:fixtures.systemCommitUncertain===true?"prepared":"completed",result}); + if(fixtures.systemCommitUncertain===true)fail("outcome_unknown"); + return {...result,replayed:false}; + }; + let result; + if(group==="notifications") { + if(method==="status") result=sample??{authorization:"authorized"}; + else if(method==="pending") result=systemState.notifications.length?systemState.notifications.map(item=>{ + let date=item.date; + if(item.daily){const next=new DateCtor();next.setHours(item.daily.hour,item.daily.minute,0,0);if(next.getTime()<=DateCtor.now())next.setDate(next.getDate()+1);date=next.toISOString();} + return {key:item.key,title:item.title,body:item.body,repeats:!!item.daily,date}; + }):(sample??[]); + else if(method==="schedule") { + fields(["key","title","body","date","daily"]); + if(!systemKey(input.key)||!systemText(input.title)||!systemText(input.body,1024)||(input.date===undefined)===(input.daily===undefined))fail("invalid_options"); + if(input.date!==undefined&&(!systemDate(input.date)||DateCtor.parse(input.date)<=DateCtor.now()||DateCtor.parse(input.date)-DateCtor.now()>366*86400000))fail("invalid_options"); + if(input.daily!==undefined&&(!input.daily||typeof input.daily!=="object"||ArrayIsArray(input.daily)||ObjectKeys(input.daily).some(k=>!systemIncludes(["hour","minute"],k))||!systemNumber(input.daily.hour,0,23)||!systemNumber(input.daily.minute,0,59)||input.daily.hour%1!==0||input.daily.minute%1!==0))fail("invalid_options"); + if(apiMocks["$notifications.status"]?.value?.authorization!==undefined&&!systemIncludes(["authorized","provisional"],apiMocks["$notifications.status"].value.authorization))fail("permission_denied"); + const index=systemState.notifications.findIndex(n=>n.key===input.key); + if(index<0&&systemState.notifications.length>=32)fail("limit_exceeded"); + if(index>=0)systemState.notifications.splice(index,1); + systemState.notifications.push({...input}); result={key:input.key,status:"scheduled"}; + } else {if(!systemKey(raw))fail("invalid_options");systemState.notifications=systemState.notifications.filter(n=>n.key!==raw);result={key:raw,status:"cancellationRequested"};} + } else if(group==="calendar") { + fields(["requestID","calendarID","title","start","end","allDay",...(method==="update"?["id"]:[])]); + if(!systemText(input.calendarID)||!systemText(input.title,512)||!systemDate(input.start)||!systemDate(input.end)||DateCtor.parse(input.end)<=DateCtor.parse(input.start)||DateCtor.parse(input.end)-DateCtor.parse(input.start)>366*86400000||(input.allDay!==undefined&&typeof input.allDay!=="boolean"))fail("invalid_options"); + if(ArrayIsArray(fixtures.calendarSelection)&&!systemIncludes(fixtures.calendarSelection,input.calendarID))fail("permission_denied"); + result=receipt(()=>{ + if(method==="update"&&!systemState.events.some(e=>e.id===input.id&&e.calendarID===input.calendarID))fail("permission_denied"); + if(method==="create"&&systemState.events.length>=128)fail("limit_exceeded"); + const id=method==="update"?input.id:`event-${input.requestID}`; + systemState.events=systemState.events.filter(e=>e.id!==id);systemState.events.push({...input,id});return {id,calendarID:input.calendarID,status:"applied"}; + }); + } else if(group==="alarms") { + if(method==="status")result=sample??{authorization:"authorized"}; + else if(method==="pending")result=systemState.alarms.length?systemState.alarms.map(item=>({key:item.key,state:item.state})):(sample??[]); + else if(method==="schedule") { + fields(["requestID","key","title","date","seconds"]); + if(!systemKey(input.key)||!systemText(input.title,128)||(input.date===undefined)===(input.seconds===undefined)||(input.seconds!==undefined&&!systemNumber(input.seconds,60,86400))||(input.date!==undefined&&(!systemDate(input.date)||DateCtor.parse(input.date)<=DateCtor.now()||DateCtor.parse(input.date)-DateCtor.now()>366*86400000)))fail("invalid_options"); + if(apiMocks["$alarms.status"]?.value?.authorization!==undefined&&apiMocks["$alarms.status"].value.authorization!=="authorized")fail("permission_denied"); + result=receipt(()=>{if(systemState.alarms.some(a=>a.key===input.key))fail("request_conflict");if(systemState.alarms.length>=32)fail("limit_exceeded");systemState.alarms.push({...input,state:input.seconds===undefined?"scheduled":"countdown"});return {key:input.key,status:"scheduled"};}); + } else { + if(!systemKey(raw))fail("invalid_options");const alarm=systemState.alarms.find(a=>a.key===raw);if(!alarm)fail("unavailable"); + if(method==="cancel")systemState.alarms=systemState.alarms.filter(a=>a.key!==raw);else alarm.state=method==="pause"?"paused":method==="stop"?"stopped":"countdown"; + result={key:raw,status:"requested"}; + } + } else if(group==="health") { + fields(["metric","days"]);if(!systemIncludes(["steps","activeEnergy","walkingDistance","water","bodyMass","heartRate"],input.metric)||!systemNumber(input.days??7,1,31)||(input.days??7)%1!==0)fail("invalid_options"); + result=sample??{metric:input.metric,unit:"count",aggregation:"sum",timeZone:"UTC",items:[]}; + if(!result||!ArrayIsArray(result.items)||result.items.length>31)fail("mock_invalid"); + if(apiMocks["$health.isAvailable"]?.value===false)fail("unavailable"); + const units={steps:"count",activeEnergy:"kcal",walkingDistance:"m",water:"mL",bodyMass:"kg",heartRate:"count/min"}; + const averages=systemIncludes(["bodyMass","heartRate"],input.metric); + if(result.metric!==input.metric){const typical={steps:6840,activeEnergy:285,walkingDistance:4200,water:1800,bodyMass:68.2,heartRate:72};result={...result,unit:units[input.metric],aggregation:averages?"average":"sum",items:result.items.map((row,i)=>({...row,value:row.hasSamples?typical[input.metric]+(averages?i/10:i*10):null}))};} + result={...result,metric:input.metric,items:result.items.slice(-(input.days??7))}; + } else if(group==="weather") { + fields(["latitude","longitude","hours"]);coordinates();if(!systemNumber(input.hours??24,1,48)||(input.hours??24)%1!==0)fail("invalid_options"); + if(!systemIncludes(permissions,"network")||!hostMatches("api.met.no",config.manifest.networkDomains??[]))fail("permission_denied"); + if(!sample||!ArrayIsArray(sample.hours))fail("mock_missing");result={...sample,latitude:Math.round(input.latitude*100)/100,longitude:Math.round(input.longitude*100)/100,hours:sample.hours.slice(0,input.hours??24)}; + } else if(group==="maps") { + if(method==="geocode"){if(!systemText(raw))fail("invalid_options");} + else{fields(method==="search"?["latitude","longitude","radiusMeters","query"]:method==="snapshot"?["latitude","longitude","radiusMeters","size"]:["latitude","longitude","radiusMeters"]);coordinates();if(method==="search"&&!systemText(input.query))fail("invalid_options");if(method==="snapshot"&&(!systemNumber(input.size??256,128,512)||(input.size??256)%1!==0))fail("invalid_options");} + result=sample??(method==="snapshot"?null:[]);if(result===null)fail("mock_missing"); + } else if(group==="documents") { + const list=apiMocks["$documents.list"]?.value??[]; + if(method==="list")result=list; + else{if(!systemUUID(raw)||!ArrayIsArray(list)||!list.some(d=>d.id===raw&&d.type===(method==="readJSON"?"json":"csv")))fail("permission_denied");if(sample===undefined)fail("mock_missing");result=sample;} + } else if(group==="contacts") { + if(!ArrayIsArray(sample??[]))fail("mock_invalid");result=(sample??[]).filter(c=>!ArrayIsArray(scope?.contacts)||systemIncludes(scope.contacts,c.id)).slice(0,20); + } else if(group==="home") { + const items=apiMocks["$home.items"]?.value??[]; + if(!ArrayIsArray(items))fail("mock_invalid");const selected=items.filter(i=>!ArrayIsArray(scope?.home)||systemIncludes(scope.home,i.id)).slice(0,20); + if(method==="items")result=selected.map(i=>({...i,value:systemState.home[i.id]??i.value,isCached:true})); + else{ + fields(method==="runScene"?["id","requestID"]:["id","on"]);const item=selected.find(i=>i.id===input.id);if(!item)fail("permission_denied"); + if(method==="runScene"){if(item.kind!=="scene")fail("permission_denied");result=receipt(()=>({id:item.id,status:"acknowledged"}));} + else {if(item.kind!=="power"||typeof input.on!=="boolean")fail("invalid_options");systemState.home[item.id]=input.on;result={id:item.id,value:input.on,status:"acknowledged"};} + } + } + resolve(bridgeValue(result,0)); + } catch(error) {reject(StringCtor(error.message??error));} + }); + } + for(const group of ObjectKeys(systemMethods)){ + apis[`$${group}`]??={}; + for(const method of systemMethods[group])apis[`$${group}`][method]=(...args)=>systemCall(group,method,args); + } + apis.$fetch = apis.fetch; apis.console = apis.$console; apis.Promise = global.Promise; @@ -1189,7 +1319,7 @@ export function scriptWidgetKernel(global, host, configJSON) { if (validation) error = { kind: validation.kind, message: validation.message }; else tree = encodeElement(state.resultElement); } - return JSONStringify({ tree, error, logs, diagnostics, ...(actionMode ? { mockState: { storage: Object.fromEntries(storage), remindersState: { formatVersion: 1, items: reminderRows, receipts: reminderReceipts } } } : {}) }); + return JSONStringify({ tree, error, logs, diagnostics, ...(actionMode ? { mockState: { systemState, storage: Object.fromEntries(storage), remindersState: { formatVersion: 1, items: reminderRows, receipts: reminderReceipts } } } : {}) }); } return { diff --git a/Web/preview-engine/src/package/manifest.js b/Web/preview-engine/src/package/manifest.js index d226d35e..e8ac247e 100644 --- a/Web/preview-engine/src/package/manifest.js +++ b/Web/preview-engine/src/package/manifest.js @@ -6,7 +6,7 @@ import { normalizePackagePath } from "../packageFiles.js"; export const runtimeAPIVersion = "1.0"; export const families = ["systemSmall", "systemMedium", "systemLarge", "systemExtraLarge", "systemExtraLargePortrait", "accessoryCircular", "accessoryRectangular", "accessoryInline"]; -export const permissions = ["network", "location", "health", "calendar", "reminders", "remindersWrite", "photos", "services", "music", "storage", "icloud", "files"]; +export const permissions = ["network", "location", "health", "calendar", "reminders", "remindersWrite", "photos", "services", "music", "storage", "icloud", "notifications", "calendarWrite", "maps", "weather", "alarms", "documents", "contacts", "home", "files"]; const manifestKeys = new Set(["formatVersion", "id", "name", "version", "runtimeVersion", "minimumRuntimeVersion", "timeline", "entry", "supportedFamilies", "permissions", "networkDomains", "plugins", "actions", "controls", "pushUpdates", "description", "category", "tags", "icon", "preview", "author", "license"]); const actionKeys = new Set(["id", "title", "description", "systemImage", "function"]); const controlKeys = new Set(["id", "type", "title", "subtitle", "systemImage", "action", "actionID", "stateKey"]); @@ -142,6 +142,8 @@ export function validateManifest(manifest, paths, { checkEntryExists = true } = if (manifest.supportedFamilies.length === 0) error("missing_families", "At least one supported widget family is required."); if (new Set(manifest.supportedFamilies).size !== manifest.supportedFamilies.length) error("duplicate_families", "supportedFamilies must not contain duplicates."); if (new Set(manifest.permissions).size !== manifest.permissions.length) error("duplicate_permissions", "permissions must not contain duplicates."); + if (manifest.permissions.some(p => ["notifications","calendarWrite","maps","weather","alarms","documents","contacts","home"].includes(p)) && !supportsMinimumRuntime("1.6", manifest.minimumRuntimeVersion ?? "0.0")) error("system_runtime", "System capabilities require minimumRuntimeVersion 1.6 or later."); + if (manifest.permissions.includes("calendarWrite") && !manifest.permissions.includes("calendar")) error("calendar_write_permission", "calendarWrite also requires calendar."); if (manifest.permissions.includes("icloud") && (!/^1\.[0-9]+$/.test(manifest.minimumRuntimeVersion ?? "") || Number(manifest.minimumRuntimeVersion.split(".")[1]) < 5)) error("icloud_runtime", "iCloud JSON requires minimumRuntimeVersion 1.5 or later."); const network = manifest.permissions.includes("network"); if (manifest.networkDomains.length && !network) error("undeclared_network", "networkDomains requires the network permission."); diff --git a/Web/preview-engine/src/types.d.ts b/Web/preview-engine/src/types.d.ts index e4475c72..61556110 100644 --- a/Web/preview-engine/src/types.d.ts +++ b/Web/preview-engine/src/types.d.ts @@ -5,7 +5,7 @@ export type WidgetFamilyName = "systemSmall" | "systemMedium" | "systemLarge" | "systemExtraLarge" | "systemExtraLargePortrait" | "accessoryCircular" | "accessoryRectangular" | "accessoryInline"; export type WidgetSize = "small" | "medium" | "large" | "extraLarge" | "extraLargePortrait" | "accessoryCircular" | "accessoryRectangular" | "accessoryInline"; -export type Permission = "network" | "location" | "health" | "calendar" | "reminders" | "remindersWrite" | "photos" | "services" | "music" | "storage" | "icloud" | "files"; +export type Permission = "network" | "location" | "health" | "calendar" | "reminders" | "remindersWrite" | "photos" | "services" | "music" | "storage" | "icloud" | "notifications" | "calendarWrite" | "maps" | "weather" | "alarms" | "documents" | "contacts" | "home" | "files"; export type Severity = "error" | "warning" | "info"; export type Appearance = "light" | "dark"; export type RenderingMode = "fullColor" | "accented" | "vibrant"; @@ -61,6 +61,6 @@ export interface ExecutionResult { error: { kind: string; message: string } | null; logs: LogEntry[]; diagnostics: Issue[]; - mockState?: { storage: Record; remindersState: { formatVersion: number; items: Array>; receipts: Array> } }; + mockState?: { systemState?: Record; storage: Record; remindersState: { formatVersion: number; items: Array>; receipts: Array> } }; timing?: { compileMilliseconds: number; executeMilliseconds: number }; } diff --git a/Web/preview-engine/test/packagePreflight.test.js b/Web/preview-engine/test/packagePreflight.test.js index ef8983c0..b2049c7a 100644 --- a/Web/preview-engine/test/packagePreflight.test.js +++ b/Web/preview-engine/test/packagePreflight.test.js @@ -7,8 +7,8 @@ import { decodeManifest, newManifest, supportsMinimumRuntime, validateManifest } const files = (manifest, source = '$render(ok);') => ({ "widget.json": JSON.stringify(manifest), "main.jsx": source }); test("minimum API versions use canonical numeric same-major comparison", () => { - for (const version of ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5"]) assert.equal(supportsMinimumRuntime(version), true, version); - for (const version of ["1.6", "1.10", "2.0", "0.9", "01.3", "1.03", "1.3.0", "1", "1.9999", ">=1.3", " 1.3"]) assert.equal(supportsMinimumRuntime(version), false, version); + for (const version of ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6"]) assert.equal(supportsMinimumRuntime(version), true, version); + for (const version of ["1.7", "1.10", "2.0", "0.9", "01.3", "1.03", "1.3.0", "1", "1.9999", ">=1.3", " 1.3"]) assert.equal(supportsMinimumRuntime(version), false, version); assert.equal(supportsMinimumRuntime("1.9", "1.10"), true); assert.equal(supportsMinimumRuntime("1.10", "1.9"), false); for (const minimum of [undefined, null, "1.0", "1.3", "1.4", "2.0", "01.3"]) { @@ -22,7 +22,7 @@ test("minimum API versions use canonical numeric same-major comparison", () => { test("invalid packages are rejected before the compiler or script can run", () => { const compiler = new Proxy({}, { get() { throw new Error("Compiler must not run"); } }); - for (const patch of [{ minimumRuntimeVersion: "1.6" }, { minimumRuntimeVersion: "01.3" }, { formatVersion: 99 }, { extraCapability: true }]) { + for (const patch of [{ minimumRuntimeVersion: "1.7" }, { minimumRuntimeVersion: "01.3" }, { formatVersion: 99 }, { extraCapability: true }]) { const result = preparePackage(compiler, { files: files({ ...newManifest("Preflight"), ...patch }, "while(true) {}") }); assert.equal(result.ok, false); assert.equal(result.error.kind, "scriptError"); @@ -32,7 +32,7 @@ test("invalid packages are rejected before the compiler or script can run", () = test("file manifest is authoritative over a permissive host object", async () => { const host = { ...newManifest("Host grant"), permissions: ["calendar"] }; - for (const text of ["{bad", JSON.stringify({ ...host, formatVersion: 999 }), JSON.stringify({ ...host, minimumRuntimeVersion: "1.6" })]) { + for (const text of ["{bad", JSON.stringify({ ...host, formatVersion: 999 }), JSON.stringify({ ...host, minimumRuntimeVersion: "1.7" })]) { const result = await executePackageInNode({ files: { "widget.json": text, "main.jsx": 'throw new Error("executed");' }, manifest: host }); assert.equal(result.error.kind, "scriptError"); assert.match(result.error.message, /\[package:/); diff --git a/Web/preview-engine/test/systemServices.test.js b/Web/preview-engine/test/systemServices.test.js new file mode 100644 index 00000000..3d2c31df --- /dev/null +++ b/Web/preview-engine/test/systemServices.test.js @@ -0,0 +1,81 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { executePackageInNode } from "../src/node.js"; +import { systemAPICatalog } from "../../../Editor/editorfe/src/systemAPICatalog.js"; +const permissions=["notifications","calendar","calendarWrite","health","maps","weather","alarms","documents","contacts","home","network"]; +const manifest={formatVersion:2,id:"example.system-services",name:"System Services",version:"1.0.0",runtimeVersion:"1.0",minimumRuntimeVersion:"1.6",entry:"main.jsx",supportedFamilies:["systemMedium"],permissions,networkDomains:["api.met.no"],actions:[{id:"test",title:"Test",systemImage:"play",function:"testAction"}]}; +const fixtures=()=>({api:Object.fromEntries(systemAPICatalog.map(api=>[api.id,{value:api.value}]))}); +const run=(code,options={})=>executePackageInNode({files:{"widget.json":JSON.stringify(manifest),"main.jsx":code},fixtures:fixtures(),...options}); +const action=(code,options={})=>run(`async function testAction(){${code}}$render(Ready);`,{actionID:"test",...options}); +const log=result=>{assert.equal(result.error,null);return JSON.parse(result.logs.find(l=>l.level==="log").message);}; +const request="11111111-1111-4111-8111-111111111111"; + +test("every new capability denies missing manifest permission even with healthy mocks",async()=>{ + for(const source of ["await $notifications.status()","await $alarms.status()","await $contacts.selected()","await $documents.list()","await $home.items()","await $maps.geocode('park')","await $weather.forecast({latitude:0,longitude:0})","await $health.dailyStatistics({metric:'steps'})"]){ + const m={...manifest,permissions:[],networkDomains:[]}; + const result=await run(source+';$render(never);',{files:{"widget.json":JSON.stringify(m),"main.jsx":source+';$render(never);'}}); + assert.match(result.error.message,/permission_denied/); + } +}); +test("per-installation simulated grants deny access before fixture replies",async()=>{ + const f=fixtures();f.systemAccess={permissions:[]}; + assert.match((await run('await $contacts.selected();$render(never);',{fixtures:f})).error.message,/permission_denied/); +}); +test("normal render cannot schedule, change calendar, alarm or home",async()=>{ + for(const source of ["$notifications.schedule({})","$notifications.cancel('daily')","$calendar.create({})","$alarms.schedule({})","$home.setPower({})","$home.runScene({})"]){ + assert.match((await run(`await ${source};$render(never);`)).error.message,/read_only/); + } +}); +test("notification actions schedule, replace and cancel their named slot",async()=>{ + const date=new Date(Date.now()+3600000).toISOString(); + const result=await action(`await $notifications.schedule({key:'daily',title:'Read',body:'One chapter',date:'${date}'});await $notifications.schedule({key:'daily',title:'Read now',body:'One chapter',date:'${date}'});const pending=await $notifications.pending();await $notifications.cancel('daily');console.log(JSON.stringify({pending,after:await $notifications.pending()}));`); + const value=log(result);assert.equal(value.pending.length,1);assert.equal(value.pending[0].title,"Read now");assert.equal(value.after.length,0); +}); +test("calendar writes are scoped, owned and replay-safe",async()=>{ + const input={requestID:request,calendarID:"sample.calendar",title:"Focus",start:"2026-10-28T12:00:00Z",end:"2026-10-28T13:00:00Z"}; + const result=await action(`const a=await $calendar.create(${JSON.stringify(input)});const b=await $calendar.create(${JSON.stringify(input)});let denied=false;try{await $calendar.update({...${JSON.stringify(input)},id:'someone-elses-event'});}catch(e){denied=true;}console.log(JSON.stringify({a,b,denied}));`); + const value=log(result);assert.equal(value.a.id,value.b.id);assert.equal(value.b.replayed,true);assert.equal(value.denied,true); + const f=fixtures();f.calendarSelection=[]; + assert.match((await action(`await $calendar.create(${JSON.stringify(input)});`,{fixtures:f})).error.message,/permission_denied/); +}); +test("uncertain native-style mutation results cannot be blindly replayed",async()=>{ + const f=fixtures();f.systemCommitUncertain=true; + const result=await action(`try{await $alarms.schedule({requestID:'${request}',key:'focus',title:'Focus',seconds:1500});}catch(e){console.log(JSON.stringify({error:String(e)}));}`,{fixtures:f}); + assert.match(log(result).error,/outcome_unknown/); + const next=fixtures();next.systemState=result.mockState.systemState; + const replay=await action(`await $alarms.schedule({requestID:'${request}',key:'focus',title:'Focus',seconds:1500});`,{fixtures:next}); + assert.match(replay.error.message,/outcome_unknown/); +}); +test("alarm lifecycle preserves named identity and rejects replacing active alarms",async()=>{ + const result=await action(`const a=await $alarms.schedule({requestID:'${request}',key:'focus',title:'Focus',seconds:1500});await $alarms.pause('focus');const paused=await $alarms.pending();await $alarms.resume('focus');await $alarms.cancel('focus');console.log(JSON.stringify({a,paused,after:await $alarms.pending()}));`); + const value=log(result);assert.equal(value.paused[0].state,"paused");assert.equal(value.after.length,0); +}); +test("home selection filters sensors and actions set absolute power",async()=>{ + const f=fixtures();f.systemAccess={permissions:["home"],home:["sample.light"]}; + const result=await action(`await $home.setPower({id:'sample.light',on:false});console.log(JSON.stringify(await $home.items()));`,{fixtures:f}); + const value=log(result);assert.equal(value.length,1);assert.equal(value[0].value,false); + assert.match((await action(`await $home.setPower({id:'unselected',on:true});`,{fixtures:f})).error.message,/permission_denied/); +}); +test("documents use opaque imported IDs and contacts obey their selected scope",async()=>{ + assert.match((await run(`await $documents.readJSON('../private');$render(never);`)).error.message,/permission_denied/); + const result=await run(`const rows=await $contacts.selected();$render({rows.length});`,{fixtures:{...fixtures(),systemAccess:{permissions:["contacts"],contacts:[]}}}); + assert.equal(result.error,null);assert.match(result.tree,/0/); +}); +test("bounded query inputs and shared budgets cannot be bypassed by mocks",async()=>{ + for(const source of ["$health.dailyStatistics({metric:'unknown'})","$health.dailyStatistics({metric:'steps',days:32})","$maps.search({query:'park',latitude:91,longitude:0})","$maps.snapshot({latitude:0,longitude:0,size:10000})","$weather.forecast({latitude:0,longitude:0,hours:49})"]){assert.match((await run(`await ${source};$render(never);`)).error.message,/invalid_options/);} + assert.match((await run('for(let n=0;n<9;n++)await $notifications.status();$render(never);')).error.message,/query_limit/); +}); + +test("daily notifications are one named repeating slot with strict clock bounds",async()=>{ + const result=await action(`await $notifications.schedule({key:'daily',title:'Read',body:'One chapter',daily:{hour:20,minute:0}});console.log(JSON.stringify(await $notifications.pending()));`); + assert.equal(log(result)[0].repeats,true); assert.ok(Date.parse(log(result)[0].date)>Date.now()); + const invalid=await action(`await $notifications.schedule({key:'daily',title:'Read',body:'One chapter',daily:{hour:24,minute:0}});`); + assert.match(invalid.error.message,/invalid_options/); +}); + +test("health metric defaults preserve units and availability",async()=>{ + const result=await run(`$render({JSON.stringify(await $health.dailyStatistics({metric:'bodyMass',days:7}))});`); + assert.equal(result.error,null);const value=JSON.parse(JSON.parse(result.tree).children[0]);assert.equal(value.unit,'kg');assert.equal(value.aggregation,'average');assert.ok(value.items[0].value<200); + const f=fixtures();f.api['$health.isAvailable']={value:false}; + assert.match((await run(`await $health.dailyStatistics({metric:'steps'});$render(never);`,{fixtures:f})).error.message,/unavailable/); +}); diff --git a/Web/studio/package-lock.json b/Web/studio/package-lock.json index 8e66d64b..5571e36a 100644 --- a/Web/studio/package-lock.json +++ b/Web/studio/package-lock.json @@ -39,7 +39,8 @@ "tw-animate-css": "1.4.0", "typescript": "7.0.2", "vite": "7.3.6" - } + }, + "license": "Apache-2.0" }, "node_modules/@babel/code-frame": { "version": "7.29.7", diff --git a/Web/studio/package.json b/Web/studio/package.json index c3dd0020..1a1911df 100644 --- a/Web/studio/package.json +++ b/Web/studio/package.json @@ -43,5 +43,6 @@ "tw-animate-css": "1.4.0", "typescript": "7.0.2", "vite": "7.3.6" - } + }, + "license": "Apache-2.0" } diff --git a/Web/studio/src/components/ActionTestPanel.tsx b/Web/studio/src/components/ActionTestPanel.tsx index 182f19eb..dab0d77e 100644 --- a/Web/studio/src/components/ActionTestPanel.tsx +++ b/Web/studio/src/components/ActionTestPanel.tsx @@ -34,7 +34,7 @@ export function ActionTestPanel({ project, onFixtures }: { project: Project; onF const reset = () => { try { const fixtures = parseMocks(project.fixtures); - delete fixtures.remindersState; fixtures.storage = {}; + delete fixtures.remindersState; delete fixtures.systemState; fixtures.storage = {}; onFixtures(JSON.stringify(fixtures, null, 2)); setMessage("Simulated action state reset. System reminders were not changed."); } catch (error) { setMessage((error as Error).message); } diff --git a/Web/studio/src/components/MockDataPanel.tsx b/Web/studio/src/components/MockDataPanel.tsx index d6319c52..371735eb 100644 --- a/Web/studio/src/components/MockDataPanel.tsx +++ b/Web/studio/src/components/MockDataPanel.tsx @@ -5,8 +5,8 @@ import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { addSampleMocks, isObject, mockAPIs, musicScenario, parseMocks, permissionScenario, responseFor, sampleFixtures, serviceScenario, setResponse, type MockObject, type MockValue } from "@/mockData.ts"; -const groups = ["services", "music", "calendar", "reminders", "photos", "health", "location", "device", "system", "network", "storage", "icloud", "dataSource", "json"]; -const labels: Record = { services: "Connected services", music: "Music playback", calendar: "Calendar", reminders: "Reminders", photos: "Photos", health: "Health", location: "Location", device: "Device", system: "System", network: "Network responses", storage: "Storage", icloud: "iCloud JSON", dataSource: "Data Source Plugins", json: "Full JSON" }; +const groups = ["services", "music", "notifications", "alarms", "maps", "weather", "documents", "contacts", "home", "calendar", "reminders", "photos", "health", "location", "device", "system", "network", "storage", "icloud", "systemAccess", "dataSource", "json"]; +const labels: Record = { services: "Connected services", notifications: "Local notifications", alarms: "Alarms & timers", maps: "Maps & places", weather: "Weather forecast", documents: "Imported documents", contacts: "Selected contacts", home: "Home accessories", music: "Music playback", calendar: "Calendar", reminders: "Reminders", photos: "Photos", health: "Health", location: "Location", device: "Device", system: "System", network: "Network responses", storage: "Storage", icloud: "iCloud JSON", systemAccess: "System access grants", dataSource: "Data Source Plugins", json: "Full JSON" }; // Primitive leaves use normal form fields. Arrays and uncommon payloads can // always be edited in the return JSON without losing unknown properties. @@ -37,7 +37,7 @@ export function MockDataPanel({ fixtures, onChange }: { fixtures: string; onChan const response = responseFor(data, api); const writeResponse = api.operation === "write"; const special = group === "network" ? "fetch" : group; - const structured = ["network", "storage", "icloud", "dataSource"].includes(group); + const structured = ["network", "storage", "icloud", "systemAccess", "dataSource"].includes(group); const encoded = structured ? JSON.stringify(data[special] ?? (["storage", "icloud"].includes(group) ? {} : []), null, 2) : JSON.stringify("error" in response ? response.error : response.value, null, 2); useEffect(() => { diff --git a/Web/studio/src/mockData.ts b/Web/studio/src/mockData.ts index b8dcbf6b..402d5efd 100644 --- a/Web/studio/src/mockData.ts +++ b/Web/studio/src/mockData.ts @@ -16,13 +16,15 @@ export function sampleFixtures(): MockObject { const day=`${dayStart.getFullYear()}-${String(dayStart.getMonth()+1).padStart(2,"0")}-${String(dayStart.getDate()).padStart(2,"0")}`; const healthSample=(id:string,value:MockValue):MockValue=>{ if(!isObject(value))return value; + if(id==="$health.dailyStatistics") return {...value,timeZone:zone,items:Array.from({length:7},(_,i)=>{const d=new Date(dayStart);d.setDate(d.getDate()-6+i);return {date:`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`,value:[4200,7300,5100,8900,6400,9200,6840][i]!,hasSamples:true};})}; if(id==="$health.sleepSummary")return {...value,start:new Date(now-86400000).toISOString(),end:new Date(now).toISOString(),timeZone:zone}; if(id==="$health.activitySummary")return {...value,date:day,timeZone:zone}; if(id==="$health.workouts")return {...value,start:new Date(now-7*86400000).toISOString(),end:new Date(now).toISOString(),timeZone:zone,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:new Date(now-3600000).toISOString(),end:new Date(now-900000).toISOString(),duration:2700,energyKcal:285,distanceMeters:5200}]}; return {...value,start:dayStart.toISOString(),end:new Date(now).toISOString()}; }; return { - api: Object.fromEntries(mockAPIs.filter((api) => api.id !== "$device.isdarkmode").map((api) => [api.id, { value: api.group === "health" && isObject(api.value) ? healthSample(api.id,api.value) : api.group === "photos" && api.id.endsWith(".items") ? {...api.value as MockObject,fetchedAt:new Date(now).toISOString()} : api.group === "reminders" && api.id.endsWith(".items") ? {...api.value as MockObject, fetchedAt: new Date(now).toISOString(), items: [{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:new Date(dayStart.getTime()+16*3600000).toISOString(),hasTime:true,completed:false,completedAt:null,priority:0}]} : api.value }])), + systemAccess: {permissions:["notifications","calendarWrite","maps","weather","alarms","documents","contacts","home"],contacts:["sample.contact"],home:["sample.light","scene-sample"]}, + api: Object.fromEntries(mockAPIs.filter((api) => api.id !== "$device.isdarkmode").map((api) => [api.id, { value: api.group === "health" && isObject(api.value) ? healthSample(api.id,api.value) : api.group === "weather" && isObject(api.value) ? {...api.value,fetchedAt:new Date(now).toISOString(),hours:Array.from({length:48},(_,i)=>({time:new Date(start+i*3600000).toISOString(),temperatureC:Math.round((21+Math.sin(i/5)*4)*10)/10,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}))} : api.group === "photos" && api.id.endsWith(".items") ? {...api.value as MockObject,fetchedAt:new Date(now).toISOString()} : api.group === "reminders" && api.id.endsWith(".items") ? {...api.value as MockObject, fetchedAt: new Date(now).toISOString(), items: [{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:new Date(dayStart.getTime()+16*3600000).toISOString(),hasTime:true,completed:false,completedAt:null,priority:0}]} : api.value }])), fetch: [{url:"https://api.github.com/repos/everettjf/scriptwidget",method:"GET",status:200,body:JSON.stringify({full_name:"everettjf/ScriptWidget",private:false,stargazers_count:1280,forks_count:96,open_issues_count:18}),headers:{"content-type":"application/json","cache-control":"public, max-age=3600"}}, { url: "https://api.example.com/data", method: "GET", body: '{"value":42}', status: 200, headers: {"content-type":"application/json"} }, {url:"https://api.met.no/weatherapi/locationforecast/2.0/compact?lat=37.33&lon=-122.01",method:"GET",status:200,body:JSON.stringify(weather),headers:{"content-type":"application/json",expires:new Date(now+3600000).toUTCString(),"last-modified":new Date(start).toUTCString()}}], storage: {}, icloud: { connected: true, available: true, documents: {} }, storageAtomicAvailable: true, dataSource: [], calendarSelection: null, remindersSelection: null, photosSelection: ["sample.photo", "sample.photo.2", "sample.photo.3", "sample.photo.4"], photosSnapshotPrepared: true, @@ -35,6 +37,8 @@ export function parseMocks(text: string): MockObject { for (const key of ["api", "device", "system", "storage", "icloud"]) { if (value[key] !== undefined && !isObject(value[key])) throw new Error(`${key} must be a JSON object.`); } + if (value.systemAccess !== undefined && (!isObject(value.systemAccess) || !Array.isArray(value.systemAccess.permissions))) throw new Error("System access mock needs a permissions array."); + if (value.systemState !== undefined && (!isObject(value.systemState) || value.systemState.version !== 1)) throw new Error("System action state requires version 1."); if (value.remindersState !== undefined && (!isObject(value.remindersState) || value.remindersState.formatVersion !== 1 || Object.keys(value.remindersState).some(key => !["formatVersion", "items", "receipts"].includes(key)) || !Array.isArray(value.remindersState.items) || !Array.isArray(value.remindersState.receipts))) throw new Error("Reminder action state needs formatVersion 1, items and receipts."); if (value.photosSelection !== undefined && (!Array.isArray(value.photosSelection) || value.photosSelection.length > 64 || new Set(value.photosSelection).size !== value.photosSelection.length || value.photosSelection.some(id => typeof id !== "string" || !id || new TextEncoder().encode(id).length > 1024 || /[\x00-\x1f\x7f]/.test(id)))) throw new Error("Photo selection needs up to 64 unique IDs; [] selects none."); diff --git a/Web/studio/test/calendar.test.ts b/Web/studio/test/calendar.test.ts index afb5bf42..b53d1829 100644 --- a/Web/studio/test/calendar.test.ts +++ b/Web/studio/test/calendar.test.ts @@ -11,7 +11,7 @@ const output = (tree: string) => JSON.parse(JSON.parse(tree).children[0]); test("calendar declaration round-trips but unknown permissions still fail closed", () => { assert.equal(decodeManifest(JSON.stringify(manifest)).error, undefined); - assert.match(decodeManifest(JSON.stringify({ ...manifest, permissions: ["calendarWrite"] })).error!, /unknown permission/); + assert.match(decodeManifest(JSON.stringify({ ...manifest, permissions: ["calendarWriteUnknown"] })).error!, /unknown permission/); }); test("best-state calendar mocks cannot bypass package permission", async () => { diff --git a/Web/studio/test/mockData.test.ts b/Web/studio/test/mockData.test.ts index 85a60661..2e4ff4ee 100644 --- a/Web/studio/test/mockData.test.ts +++ b/Web/studio/test/mockData.test.ts @@ -8,7 +8,7 @@ import type { WidgetManifest } from "../../preview-engine/src/types.js"; import { createProject } from "../src/project.ts"; import { dataAPICatalog } from "../../../Editor/editorfe/src/dataAPICatalog.js"; const execute = (source: string, fixtures = parseMocks(defaultFixtures)) => { - const manifest: WidgetManifest = { ...newManifest("API Mocks"), permissions: ["calendar", "reminders", "photos", "location", "health", "services", "music", "network"], networkDomains: ["api.github.com"] }; + const manifest: WidgetManifest = { ...newManifest("API Mocks"), minimumRuntimeVersion: "1.6", permissions: ["calendar", "calendarWrite", "reminders", "photos", "location", "health", "services", "music", "network", "notifications", "maps", "weather", "alarms", "documents", "contacts", "home"], networkDomains: ["api.github.com", "api.met.no"] }; return executePackageInNode({ files: { "main.jsx": source, "widget.json": JSON.stringify(manifest) }, fixtures, manifest }); }; @@ -39,6 +39,13 @@ test("new projects can read healthy system samples and authorize without setup", function mockCall(api: {id:string}, fixtures: ReturnType): string { if(api.id.startsWith("$services."))return `${api.id}("github")`; const value=(fixtures.api as any)[api.id]?.value; + const inputs: Record = { + "$health.dailyStatistics":{metric:"steps",days:7}, "$weather.forecast":{latitude:37.33,longitude:-122.01,hours:24}, + "$maps.search":{query:"park",latitude:37.33,longitude:-122.01}, "$maps.geocode":"park", "$maps.reverseGeocode":{latitude:37.33,longitude:-122.01}, "$maps.snapshot":{latitude:37.33,longitude:-122.01,size:256}, + "$documents.readJSON":"550e8400-e29b-41d4-a716-446655440000", "$documents.readCSV":"550e8400-e29b-41d4-a716-446655440001" + }; + if(api.id in inputs)return `${api.id}(${JSON.stringify(inputs[api.id])})`; + const options=api.id==="$health.sleepSummary"||api.id==="$health.workouts"?{start:value.start,end:value.end}:api.id==="$health.activitySummary"?{date:value.date}:null; return `${api.id}(${options?JSON.stringify(options):""})`; } @@ -49,14 +56,16 @@ test("every read API returns its configured value with the right sync or async s const fixtures=parseMocks(defaultFixtures); const result=await execute(`$render({JSON.stringify(await ${mockCall(api,fixtures)})});`,fixtures); assert.equal(result.error,null,api.id); - assert.deepEqual(JSON.parse(JSON.parse(result.tree!).children[0]),(fixtures.api as any)[api.id].value,api.id); + const configured=(fixtures.api as any)[api.id].value; + const expected=api.id==="$weather.forecast"?{...configured,hours:configured.hours.slice(0,24)}:configured; + assert.deepEqual(JSON.parse(JSON.parse(result.tree!).children[0]),expected,api.id); } }); test("catalog Promise semantics hold before awaiting, including simulated failures", async () => { for(const api of dataAPICatalog) { const fixtures=parseMocks(defaultFixtures); - const code=`const response=${mockCall(api,fixtures)};const asynchronous=response!==null&&typeof response==='object'&&typeof response.then==='function';if(asynchronous!==${api.asynchronous})throw new Error('Promise shape mismatch');${api.operation==="write"?"try{await response;throw new Error('unexpected write');}catch(e){if(!String(e).includes('permission_denied'))throw e;}":"await response;"}$render(ok);`; + const code=`const response=${mockCall(api,fixtures)};const asynchronous=response!==null&&typeof response==='object'&&typeof response.then==='function';if(asynchronous!==${api.asynchronous})throw new Error('Promise shape mismatch');${api.operation==="write"?"try{await response;throw new Error('unexpected write');}catch(e){if(!/permission_denied|read_only/.test(String(e)))throw e;}":"await response;"}$render(ok);`; const result=await execute(code,fixtures);assert.equal(result.error,null,api.id); } for (const id of ["$health.stepCountToday", "$location.current", "$system.locale", "$device.battery", "$services.profile"]) { diff --git a/Web/studio/test/systemExamples.test.ts b/Web/studio/test/systemExamples.test.ts new file mode 100644 index 00000000..19b74f7a --- /dev/null +++ b/Web/studio/test/systemExamples.test.ts @@ -0,0 +1,31 @@ +import assert from "node:assert/strict"; +import fs from "node:fs"; +import test from "node:test"; +import { executePackageInNode } from "../../preview-engine/src/node.js"; +import { defaultFixtures, parseMocks } from "../src/mockData.ts"; + +const examples = ["notification-reminder", "health-history", "calendar-focus", "weather-forecast", "alarm-focus-timer", "document-data", "selected-contacts", "map-place", "home-light"]; +function filesFor(name: string) { + const root = new URL(`../../../docs/examples/${name}/`, import.meta.url); + return Object.fromEntries(["widget.json", "main.jsx"].map(file => [file, fs.readFileSync(new URL(file, root), "utf8")])); +} +for (const name of examples) test(`system example ${name} renders healthy data and rejects missing permissions`, async () => { + const files = filesFor(name); + const healthy = await executePackageInNode({ files, fixtures: parseMocks(defaultFixtures) }); + assert.equal(healthy.error, null, name); + assert.ok(healthy.tree, name); + assert.deepEqual(healthy.logs.filter(row => row.level === "error"), [], name); + const manifest = JSON.parse(files["widget.json"]!); + const denied = await executePackageInNode({ files: { ...files, "widget.json": JSON.stringify({ ...manifest, permissions: [], networkDomains: [] }) }, fixtures: parseMocks(defaultFixtures) }); + // Examples display setup guidance instead of an empty Home Screen widget. + assert.equal(denied.error, null, name); + assert.ok(denied.tree, name); + assert.ok(denied.logs.some(row => row.level === "error"), name); +}); +for (const [name, actionID] of [["notification-reminder", "schedule"], ["calendar-focus", "create"], ["alarm-focus-timer", "start"], ["home-light", "on"]] as const) { + test(`system example ${name} executes its declared action`, async () => { + const result = await executePackageInNode({ files: filesFor(name!), actionID, fixtures: parseMocks(defaultFixtures) }); + assert.equal(result.error, null, name); + assert.deepEqual(result.logs.filter(row => row.level === "error"), [], name); + }); +} diff --git a/docs/README.md b/docs/README.md index bf0836a4..d2be9e0d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -54,3 +54,5 @@ Build native widgets for iPhone, iPad, and Mac with JavaScript and JSX. The quic ScriptWidget focuses on iOS, iPadOS, and macOS. A single `main.jsx` can adapt its layout with `$getenv("widget-size")`. Native watchOS is unsupported and outside the current [A/B scope](widget-capabilities-plan.md). visionOS is outside this plan. - [Opt-in iCloud JSON API](icloud-json-api.md) — native grants, immutable revisions, conflicts and Web mocks. + +- [System services API (Runtime 1.6)](system-services-api.md): notifications, health history, calendar writes, weather, alarms, imported data, contacts, maps and HomeKit. diff --git a/docs/data-api-catalog.md b/docs/data-api-catalog.md index 9c5ecfbd..dcda7217 100644 --- a/docs/data-api-catalog.md +++ b/docs/data-api-catalog.md @@ -71,6 +71,32 @@ Existing data-method return formats are unchanged. Present manifests now undergo | `$location.isAuthorizedForWidgetUpdates()` | 1.3 | ios | Synchronous | locationWhenInUse | availability | | `$location.requestAuthorization(options?)` | 1.0 | ios | Promise | locationWhenInUse | authorization | | `$location.current(options?)` | 1.0 | ios | Promise | locationWhenInUse | read | +| `$notifications.status()` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$notifications.pending()` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$notifications.schedule(options)` | 1.6 | ios, macos | Promise | systemAccess | write | +| `$notifications.cancel(key)` | 1.6 | ios, macos | Promise | systemAccess | write | +| `$health.dailyStatistics(options)` | 1.6 | ios | Promise | healthRead | read | +| `$calendar.create(options)` | 1.6 | ios, macos | Promise | systemAccess | write | +| `$calendar.update(options)` | 1.6 | ios, macos | Promise | systemAccess | write | +| `$weather.forecast(options)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$alarms.status()` | 1.6 | ios | Promise | systemAccess | read | +| `$alarms.pending()` | 1.6 | ios | Promise | systemAccess | read | +| `$alarms.schedule(options)` | 1.6 | ios | Promise | systemAccess | write | +| `$alarms.cancel(key)` | 1.6 | ios | Promise | systemAccess | write | +| `$alarms.stop(key)` | 1.6 | ios | Promise | systemAccess | write | +| `$alarms.pause(key)` | 1.6 | ios | Promise | systemAccess | write | +| `$alarms.resume(key)` | 1.6 | ios | Promise | systemAccess | write | +| `$documents.list()` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$documents.readJSON(id)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$documents.readCSV(id)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$contacts.selected()` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$maps.search(options)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$maps.geocode(address)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$maps.reverseGeocode(options)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$maps.snapshot(options)` | 1.6 | ios, macos | Promise | systemAccess | read | +| `$home.items()` | 1.6 | ios | Promise | systemAccess | read | +| `$home.setPower(options)` | 1.6 | ios | Promise | systemAccess | write | +| `$home.runScene(options)` | 1.6 | ios | Promise | systemAccess | write | ## music @@ -520,6 +546,32 @@ Default editable preview sample: } ``` +### `$calendar.create` + +Default editable preview sample: + +```json +{ + "id": "sample.event", + "calendarID": "sample.calendar", + "status": "applied", + "replayed": false +} +``` + +### `$calendar.update` + +Default editable preview sample: + +```json +{ + "id": "sample.event", + "calendarID": "sample.calendar", + "status": "applied", + "replayed": false +} +``` + ## reminders Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission. @@ -775,6 +827,26 @@ Default editable preview sample: } ``` +### `$health.dailyStatistics` + +Default editable preview sample: + +```json +{ + "metric": "steps", + "unit": "count", + "aggregation": "sum", + "timeZone": "UTC", + "items": [ + { + "date": "2026-01-01", + "value": 6840, + "hasSamples": true + } + ] +} +``` + ## location Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. @@ -830,3 +902,357 @@ Default editable preview sample: "isStale": false } ``` + +## notifications + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$notifications.status` + +Default editable preview sample: + +```json +{ + "authorization": "authorized" +} +``` + +### `$notifications.pending` + +Default editable preview sample: + +```json +[] +``` + +### `$notifications.schedule` + +Default editable preview sample: + +```json +{ + "key": "daily", + "status": "scheduled" +} +``` + +### `$notifications.cancel` + +Default editable preview sample: + +```json +{ + "key": "daily", + "status": "cancellationRequested" +} +``` + +## weather + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$weather.forecast` + +Default editable preview sample: + +```json +{ + "provider": "MET Norway", + "attribution": { + "text": "Weather data from MET Norway", + "url": "https://www.met.no/en/free-meteorological-data/Download-services" + }, + "latitude": 37.33, + "longitude": -122.01, + "fetchedAt": "2026-01-01T12:00:00Z", + "isStale": false, + "hours": [ + { + "time": "2026-01-01T12:00:00Z", + "temperatureC": 21, + "windMetersPerSecond": 2, + "precipitationMM": 0, + "condition": "partlycloudy_day" + } + ] +} +``` + +## alarms + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$alarms.status` + +Default editable preview sample: + +```json +{ + "authorization": "authorized" +} +``` + +### `$alarms.pending` + +Default editable preview sample: + +```json +[] +``` + +### `$alarms.schedule` + +Default editable preview sample: + +```json +{ + "key": "focus", + "status": "scheduled", + "replayed": false +} +``` + +### `$alarms.cancel` + +Default editable preview sample: + +```json +{ + "key": "focus", + "status": "requested" +} +``` + +### `$alarms.stop` + +Default editable preview sample: + +```json +{ + "key": "focus", + "status": "requested" +} +``` + +### `$alarms.pause` + +Default editable preview sample: + +```json +{ + "key": "focus", + "status": "requested" +} +``` + +### `$alarms.resume` + +Default editable preview sample: + +```json +{ + "key": "focus", + "status": "requested" +} +``` + +## documents + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$documents.list` + +Default editable preview sample: + +```json +[ + { + "id": "550e8400-e29b-41d4-a716-446655440000", + "name": "Sample.json", + "type": "json", + "bytes": 17 + }, + { + "id": "550e8400-e29b-41d4-a716-446655440001", + "name": "Sample.csv", + "type": "csv", + "bytes": 24 + } +] +``` + +### `$documents.readJSON` + +Default editable preview sample: + +```json +{ + "goal": 12, + "done": 7 +} +``` + +### `$documents.readCSV` + +Default editable preview sample: + +```json +{ + "headers": [ + "day", + "value" + ], + "rows": [ + [ + "Monday", + "7" + ], + [ + "Tuesday", + "9" + ] + ], + "truncated": false +} +``` + +## contacts + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$contacts.selected` + +Default editable preview sample: + +```json +[ + { + "id": "sample.contact", + "name": "Alex Example", + "organization": "Sample", + "phones": [ + "+1 202 555 0100" + ], + "emails": [ + "alex@example.com" + ] + } +] +``` + +## maps + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$maps.search` + +Default editable preview sample: + +```json +[ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } +] +``` + +### `$maps.geocode` + +Default editable preview sample: + +```json +[ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } +] +``` + +### `$maps.reverseGeocode` + +Default editable preview sample: + +```json +[ + { + "name": "Example Park", + "address": "Sample address", + "latitude": 37.33, + "longitude": -122.01 + } +] +``` + +### `$maps.snapshot` + +Default editable preview sample: + +```json +{ + "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==", + "width": 256, + "height": 256, + "provider": "Apple Maps" +} +``` + +## home + +Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. + +### `$home.items` + +Default editable preview sample: + +```json +[ + { + "id": "sample.light", + "name": "Living Room Lamp", + "kind": "power", + "value": true, + "isCached": true, + "metric": "power", + "unit": "boolean" + }, + { + "id": "scene-sample", + "name": "Evening", + "kind": "scene", + "value": null, + "isCached": true, + "metric": "scene", + "unit": "none" + } +] +``` + +### `$home.setPower` + +Default editable preview sample: + +```json +{ + "id": "sample.light", + "value": true, + "status": "acknowledged" +} +``` + +### `$home.runScene` + +Default editable preview sample: + +```json +{ + "id": "scene-sample", + "status": "acknowledged", + "replayed": false +} +``` diff --git a/docs/examples/alarm-focus-timer/README.md b/docs/examples/alarm-focus-timer/README.md new file mode 100644 index 00000000..ba294572 --- /dev/null +++ b/docs/examples/alarm-focus-timer/README.md @@ -0,0 +1,5 @@ +# Focus Timer + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/alarm-focus-timer/main.jsx b/docs/examples/alarm-focus-timer/main.jsx new file mode 100644 index 00000000..77df1a24 --- /dev/null +++ b/docs/examples/alarm-focus-timer/main.jsx @@ -0,0 +1,34 @@ +// Runtime 1.6; native grants are separate from this exported package. +function requestID() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => { const r = Math.floor(Math.random() * 16); return (c === "x" ? r : (r & 3) | 8).toString(16); }); } +function pending(key, value) { + const before = $storage.getString(key); + if (before) return JSON.parse(before); + $storage.compareAndSetString(key, "", JSON.stringify(value)); + const saved = $storage.getString(key); + if (!saved) throw new Error("Could not save the request before the system write"); + return JSON.parse(saved); +} +async function startTimer() { + const op = pending("timer.pending.v1",{requestID:requestID(),key:"focus",title:"Focus complete",seconds:1500}); + await $alarms.schedule(op); + if (!$storage.compareAndSetString("timer.pending.v1",JSON.stringify(op),"")) throw new Error("Timer scheduled; review local confirmation before retrying"); +} +async function cancelTimer() { await $alarms.cancel("focus"); } +async function pauseTimer() { await $alarms.pause("focus"); } +async function resumeTimer() { await $alarms.resume("focus"); } +if ($getenv("widget-size") !== "action") { + try { + const status = await $alarms.status(); + const timers = await $alarms.pending(); + const lines = ["25 minutes, one thing at a time", "Authorization: " + status.authorization, ...timers.filter(item => item.key === "focus").slice(0,1).map(item => item.key + " · " + item.state)]; + $render( + Focus Timer + {lines.map(line => {line})} + + + ); + } catch (error) { + console.error(String(error)); + $render(Focus TimerOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/alarm-focus-timer/widget.json b/docs/examples/alarm-focus-timer/widget.json new file mode 100644 index 00000000..3f0a81d2 --- /dev/null +++ b/docs/examples/alarm-focus-timer/widget.json @@ -0,0 +1,45 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.alarm-focus-timer", + "name": "Focus Timer", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "alarms", + "storage" + ], + "networkDomains": [], + "license": "Apache-2.0", + "actions": [ + { + "id": "start", + "title": "Start 25 min", + "systemImage": "play.circle", + "function": "startTimer" + }, + { + "id": "pause", + "title": "Pause", + "systemImage": "play.circle", + "function": "pauseTimer" + }, + { + "id": "resume", + "title": "Resume", + "systemImage": "play.circle", + "function": "resumeTimer" + }, + { + "id": "cancel", + "title": "Cancel", + "systemImage": "play.circle", + "function": "cancelTimer" + } + ] +} diff --git a/docs/examples/calendar-focus/README.md b/docs/examples/calendar-focus/README.md new file mode 100644 index 00000000..a11bfac3 --- /dev/null +++ b/docs/examples/calendar-focus/README.md @@ -0,0 +1,5 @@ +# Focus Session + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/calendar-focus/main.jsx b/docs/examples/calendar-focus/main.jsx new file mode 100644 index 00000000..9ab2996c --- /dev/null +++ b/docs/examples/calendar-focus/main.jsx @@ -0,0 +1,34 @@ +// Runtime 1.6; native grants are separate from this exported package. +function requestID() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => { const r = Math.floor(Math.random() * 16); return (c === "x" ? r : (r & 3) | 8).toString(16); }); } +function pending(key, value) { + const before = $storage.getString(key); + if (before) return JSON.parse(before); + $storage.compareAndSetString(key, "", JSON.stringify(value)); + const saved = $storage.getString(key); + if (!saved) throw new Error("Could not save the request before the system write"); + return JSON.parse(saved); +} +async function createFocus() { + const calendars = await $calendar.calendars(); + if (!calendars.length) throw new Error("Select a writable calendar in native Settings first"); + const start = new Date(Date.now() + 5 * 60000); + const op = pending("focus.pending.v1", {requestID:requestID(),calendarID:calendars[0].id,title:"Focus time",start:start.toISOString(),end:new Date(start.getTime() + 30 * 60000).toISOString()}); + if (Date.now() - Date.parse(op.start) > 6 * 86400000) throw new Error("Inspect Calendar before retrying this old pending request"); + const result = await $calendar.create(op); + if (!$storage.compareAndSetString("focus.pending.v1",JSON.stringify(op),"")) throw new Error("Saved to Calendar; local confirmation needs review"); +} +if ($getenv("widget-size") !== "action") { + try { + const calendars = await $calendar.calendars(); + const lines = ["Add a 30-minute focus session", calendars.length ? "Calendar: " + calendars[0].title : "Select a calendar in Settings", "A new session starts five minutes after tapping."]; + $render( + Focus Session + {lines.map(line => {line})} + + + ); + } catch (error) { + console.error(String(error)); + $render(Focus SessionOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/calendar-focus/widget.json b/docs/examples/calendar-focus/widget.json new file mode 100644 index 00000000..a94a5ddb --- /dev/null +++ b/docs/examples/calendar-focus/widget.json @@ -0,0 +1,28 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.calendar-focus", + "name": "Focus Session", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "calendar", + "calendarWrite", + "storage" + ], + "networkDomains": [], + "license": "Apache-2.0", + "actions": [ + { + "id": "create", + "title": "Add focus session", + "systemImage": "play.circle", + "function": "createFocus" + } + ] +} diff --git a/docs/examples/document-data/README.md b/docs/examples/document-data/README.md new file mode 100644 index 00000000..30103e54 --- /dev/null +++ b/docs/examples/document-data/README.md @@ -0,0 +1,5 @@ +# My JSON Data + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/document-data/main.jsx b/docs/examples/document-data/main.jsx new file mode 100644 index 00000000..0686c5bf --- /dev/null +++ b/docs/examples/document-data/main.jsx @@ -0,0 +1,16 @@ +// Runtime 1.6; native grants are separate from this exported package. +if ($getenv("widget-size") !== "action") { + try { + const files = await $documents.list(); + const file = files.find(item => item.type === "json"); + const data = file ? await $documents.readJSON(file.id) : null; + const lines = file ? [file.name, JSON.stringify(data).slice(0,180)] : ["Import a JSON file in System Access", "The original file stays unchanged."]; + $render( + My JSON Data + {lines.map(line => {line})} + ); + } catch (error) { + console.error(String(error)); + $render(My JSON DataOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/document-data/widget.json b/docs/examples/document-data/widget.json new file mode 100644 index 00000000..61401790 --- /dev/null +++ b/docs/examples/document-data/widget.json @@ -0,0 +1,18 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.document-data", + "name": "My JSON Data", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "documents" + ], + "networkDomains": [], + "license": "Apache-2.0" +} diff --git a/docs/examples/health-history/README.md b/docs/examples/health-history/README.md new file mode 100644 index 00000000..cd200403 --- /dev/null +++ b/docs/examples/health-history/README.md @@ -0,0 +1,5 @@ +# Seven Day Steps + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Review Health access in native Settings. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/health-history/main.jsx b/docs/examples/health-history/main.jsx new file mode 100644 index 00000000..f0d58a05 --- /dev/null +++ b/docs/examples/health-history/main.jsx @@ -0,0 +1,15 @@ +// Runtime 1.6; native grants are separate from this exported package. +if ($getenv("widget-size") !== "action") { + try { + const history = await $health.dailyStatistics({metric:"steps",days:7}); + const lines = history.items.slice(-2).map(item => item.date.slice(5) + " " + (item.hasSamples && item.value !== null ? Math.round(item.value).toLocaleString() + " steps" : "No shared samples")); + $render( + Seven Day Steps + {history.items.some(item => item.hasSamples && item.value !== null) && item.hasSamples && item.value !== null).map(item => ({label:item.date.slice(5),value:item.value})))}/>} + {lines.map(line => {line})} + ); + } catch (error) { + console.error(String(error)); + $render(Seven Day StepsReview Health access in native Settings.); + } +} diff --git a/docs/examples/health-history/widget.json b/docs/examples/health-history/widget.json new file mode 100644 index 00000000..0e6b3b9d --- /dev/null +++ b/docs/examples/health-history/widget.json @@ -0,0 +1,18 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.health-history", + "name": "Seven Day Steps", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "health" + ], + "networkDomains": [], + "license": "Apache-2.0" +} diff --git a/docs/examples/home-light/README.md b/docs/examples/home-light/README.md new file mode 100644 index 00000000..03186ddc --- /dev/null +++ b/docs/examples/home-light/README.md @@ -0,0 +1,5 @@ +# A Calmer Home + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/home-light/main.jsx b/docs/examples/home-light/main.jsx new file mode 100644 index 00000000..a76f17ae --- /dev/null +++ b/docs/examples/home-light/main.jsx @@ -0,0 +1,19 @@ +// Runtime 1.6; native grants are separate from this exported package. +async function lightOn() { const items = await $home.items(); const item = items.find(x => x.kind === "power"); if (!item) throw new Error("Select a light in System Access"); await $home.setPower({id:item.id,on:true}); } +async function lightOff() { const items = await $home.items(); const item = items.find(x => x.kind === "power"); if (!item) throw new Error("Select a light in System Access"); await $home.setPower({id:item.id,on:false}); } +if ($getenv("widget-size") !== "action") { + try { + const items = await $home.items(); + const lines = items.length ? items.slice(0,2).map(item => item.name.slice(0,28) + " · " + (item.value === null ? "Unknown" : String(item.value))) : ["Select Home items in System Access"]; + lines.push("HomeKit cached readings"); + $render( + A Calmer Home + {lines.map(line => {line})} + + + ); + } catch (error) { + console.error(String(error)); + $render(A Calmer HomeOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/home-light/widget.json b/docs/examples/home-light/widget.json new file mode 100644 index 00000000..b305bc95 --- /dev/null +++ b/docs/examples/home-light/widget.json @@ -0,0 +1,32 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.home-light", + "name": "A Calmer Home", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "home" + ], + "networkDomains": [], + "license": "Apache-2.0", + "actions": [ + { + "id": "on", + "title": "Light on", + "systemImage": "play.circle", + "function": "lightOn" + }, + { + "id": "off", + "title": "Light off", + "systemImage": "play.circle", + "function": "lightOff" + } + ] +} diff --git a/docs/examples/map-place/README.md b/docs/examples/map-place/README.md new file mode 100644 index 00000000..8c583a8d --- /dev/null +++ b/docs/examples/map-place/README.md @@ -0,0 +1,5 @@ +# A Place to Go + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/map-place/main.jsx b/docs/examples/map-place/main.jsx new file mode 100644 index 00000000..21869ba6 --- /dev/null +++ b/docs/examples/map-place/main.jsx @@ -0,0 +1,14 @@ +// Runtime 1.6; native grants are separate from this exported package. +if ($getenv("widget-size") !== "action") { + try { + const places = await $maps.search({query:"park",latitude:37.33,longitude:-122.01,radiusMeters:3000}); + const lines = places.length ? places.slice(0,3).map(place => place.name.slice(0,36)) : ["No matching places"]; + $render( + A Place to Go + {lines.map(line => {line})} + ); + } catch (error) { + console.error(String(error)); + $render(A Place to GoOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/map-place/widget.json b/docs/examples/map-place/widget.json new file mode 100644 index 00000000..b40c4eaf --- /dev/null +++ b/docs/examples/map-place/widget.json @@ -0,0 +1,18 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.map-place", + "name": "A Place to Go", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "maps" + ], + "networkDomains": [], + "license": "Apache-2.0" +} diff --git a/docs/examples/notification-reminder/README.md b/docs/examples/notification-reminder/README.md new file mode 100644 index 00000000..ceae66bd --- /dev/null +++ b/docs/examples/notification-reminder/README.md @@ -0,0 +1,5 @@ +# Reading Reminder + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/notification-reminder/main.jsx b/docs/examples/notification-reminder/main.jsx new file mode 100644 index 00000000..33d565bb --- /dev/null +++ b/docs/examples/notification-reminder/main.jsx @@ -0,0 +1,19 @@ +// Runtime 1.6; native grants are separate from this exported package. +async function scheduleReminder() { await $notifications.schedule({key:"reading",title:"Time to read",body:"One chapter is enough to keep going.",daily:{hour:20,minute:0}}); } +async function cancelReminder() { await $notifications.cancel("reading"); } +if ($getenv("widget-size") !== "action") { + try { + const status = await $notifications.status(); + const items = await $notifications.pending(); + const lines = ["Authorization: " + status.authorization, items.length ? "Reading reminder scheduled" : "No reminder scheduled"]; + $render( + Reading Reminder + {lines.map(line => {line})} + + + ); + } catch (error) { + console.error(String(error)); + $render(Reading ReminderOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/notification-reminder/widget.json b/docs/examples/notification-reminder/widget.json new file mode 100644 index 00000000..efc23161 --- /dev/null +++ b/docs/examples/notification-reminder/widget.json @@ -0,0 +1,32 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.notification-reminder", + "name": "Reading Reminder", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "notifications" + ], + "networkDomains": [], + "license": "Apache-2.0", + "actions": [ + { + "id": "schedule", + "title": "Remind at 20:00", + "systemImage": "play.circle", + "function": "scheduleReminder" + }, + { + "id": "cancel", + "title": "Cancel", + "systemImage": "play.circle", + "function": "cancelReminder" + } + ] +} diff --git a/docs/examples/selected-contacts/README.md b/docs/examples/selected-contacts/README.md new file mode 100644 index 00000000..67e4b7e2 --- /dev/null +++ b/docs/examples/selected-contacts/README.md @@ -0,0 +1,5 @@ +# People Close By + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/selected-contacts/main.jsx b/docs/examples/selected-contacts/main.jsx new file mode 100644 index 00000000..3315efce --- /dev/null +++ b/docs/examples/selected-contacts/main.jsx @@ -0,0 +1,14 @@ +// Runtime 1.6; native grants are separate from this exported package. +if ($getenv("widget-size") !== "action") { + try { + const people = await $contacts.selected(); + const lines = people.length ? people.slice(0,2).map(person => person.name + (person.phones[0] ? " · " + person.phones[0] : "")) : ["Select contacts in System Access"]; + $render( + People Close By + {lines.map(line => {line})} + ); + } catch (error) { + console.error(String(error)); + $render(People Close ByOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/selected-contacts/widget.json b/docs/examples/selected-contacts/widget.json new file mode 100644 index 00000000..f2fdd0e6 --- /dev/null +++ b/docs/examples/selected-contacts/widget.json @@ -0,0 +1,18 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.selected-contacts", + "name": "People Close By", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "contacts" + ], + "networkDomains": [], + "license": "Apache-2.0" +} diff --git a/docs/examples/weather-forecast/README.md b/docs/examples/weather-forecast/README.md new file mode 100644 index 00000000..5cfa636d --- /dev/null +++ b/docs/examples/weather-forecast/README.md @@ -0,0 +1,5 @@ +# Weather Ahead + +Requires Runtime 1.6. Import this folder as a Package 2.0 widget. Open this widget’s System Access in ScriptWidget, save access and authorize the system service. + +Web Studio uses simulated data only. Native CLI renders cannot run real system actions. See [system API contracts](../../system-services-api.md) for limits, replay rules and the pending physical-device acceptance checklist. diff --git a/docs/examples/weather-forecast/main.jsx b/docs/examples/weather-forecast/main.jsx new file mode 100644 index 00000000..91365c01 --- /dev/null +++ b/docs/examples/weather-forecast/main.jsx @@ -0,0 +1,17 @@ +// Runtime 1.6; native grants are separate from this exported package. +if ($getenv("widget-size") !== "action") { + try { + const weather = await $weather.forecast({latitude:37.33,longitude:-122.01,hours:6}); + const lines = weather.hours.slice(0,2).map(item => item.time.slice(11,16) + " " + Math.round(item.temperatureC) + "°C · " + item.windMetersPerSecond + " m/s"); + lines.push(weather.isStale ? "Cached forecast · may be out of date" : "Forecast fetched " + weather.fetchedAt.slice(11,16)); + $render( + Weather Ahead + {lines.map(line => {line})} + + {weather.attribution.text} + ); + } catch (error) { + console.error(String(error)); + $render(Weather AheadOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); + } +} diff --git a/docs/examples/weather-forecast/widget.json b/docs/examples/weather-forecast/widget.json new file mode 100644 index 00000000..66b4e4ea --- /dev/null +++ b/docs/examples/weather-forecast/widget.json @@ -0,0 +1,21 @@ +{ + "formatVersion": 2, + "id": "app.scriptwidget.example.weather-forecast", + "name": "Weather Ahead", + "version": "1.0.0", + "runtimeVersion": "1.0", + "minimumRuntimeVersion": "1.6", + "entry": "main.jsx", + "supportedFamilies": [ + "systemMedium", + "systemLarge" + ], + "permissions": [ + "weather", + "network" + ], + "networkDomains": [ + "api.met.no" + ], + "license": "Apache-2.0" +} diff --git a/docs/images/system-services/health-history-web.png b/docs/images/system-services/health-history-web.png new file mode 100644 index 0000000000000000000000000000000000000000..bd8ab6de273c0fcff074113f9ce8411a7b3077f9 GIT binary patch literal 288572 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
  • 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 z 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%0Aw7cWwo)xp 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
    ›YVA9G;^#k6@9A7&^Yz#ZzKO~@I(c8d)It*! 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

    ;TI+`OMX^Yl;G;sFYiTuO^<qd>v8J!v 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 literal 290282 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

    >!fGK@;42zdW|&2RNhqBqtvfD--|?j^`JT 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≫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 diff --git a/docs/system-services-api.md b/docs/system-services-api.md index 42631537..53c1c825 100644 --- a/docs/system-services-api.md +++ b/docs/system-services-api.md @@ -154,6 +154,14 @@ Native CLI check/pack validate manifests and syntax. CLI renders use isolated re Run `node Scripts/test-system-services.mjs` for deterministic native validators, grants, file imports and private-key isolation. Application-host tests also verify real JSExport calls deny unmanaged/preview packages. Preview tests cover scopes, writes, replay/uncertainty, lifecycle simulation and budgets. Native builds/fixtures are not proof of real permissions, delivery or hardware behavior. +## Preview examples + +These captures show Web Studio simulated data; they do not represent real-device system authorization or delivery. + +![Daily steps with editable simulated data](images/system-services/health-history-web.png) + +![Daily notification example in Web Studio](images/system-services/notification-reminder-web.png) + ## Physical-device acceptance before release - Fresh install, deny/grant/revoke each OS permission; verify missing native grant, copied widget and retired owner stay denied. From c8d3d9c6fb1d65dd948fa9f70158e5dd7b89dbd2 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 19:43:48 -0700 Subject: [PATCH 03/15] Isolate Web Studio server tests from active library state --- .../WebStudioServerTests.swift | 42 ++++++++++++++----- .../Manager/WebStudioServer.swift | 6 ++- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Tests/ScriptWidgetRuntimeTests/WebStudioServerTests.swift b/Tests/ScriptWidgetRuntimeTests/WebStudioServerTests.swift index 99840cc9..79672ce5 100644 --- a/Tests/ScriptWidgetRuntimeTests/WebStudioServerTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/WebStudioServerTests.swift @@ -2,6 +2,27 @@ import XCTest @testable import ScriptWidget final class WebStudioServerTests: XCTestCase { + private var root: URL! + private var manager: ScriptManager! + override func setUpWithError() throws { + root = FileManager.default.temporaryDirectory.appendingPathComponent("WebStudioServerTests-" + UUID().uuidString) + manager = ScriptManager(isBuild: false, scriptDirectoryOverride: root) + } + override func tearDownWithError() throws { + manager = nil + try? FileManager.default.removeItem(at: root) + root = nil + } + @MainActor func testUnavailableLibraryFailsClosedBeforeListening() { + let unavailable = ScriptManager(isBuild: false, unavailableReason: "Unavailable test library") + let server = WebStudioServer(manager: unavailable) + server.start() + defer { server.stop() } + XCTAssertFalse(server.isRunning) + XCTAssertEqual(server.port, 0) + XCTAssertNotNil(server.lastError) + } + func testParsesBoundedJSONRequest() throws { let payload = Data(#"{"code":"123456"}"#.utf8) var data = Data("POST /api/v1/pair HTTP/1.1\r\nHost: device\r\nContent-Type: application/json\r\nContent-Length: \(payload.count)\r\n\r\n".utf8) @@ -40,7 +61,7 @@ final class WebStudioServerTests: XCTestCase { } func testHTTPServerServesStudioAndAuthenticatedSession() async throws { - let server = WebStudioServer(sessionLease: 5) + let server = WebStudioServer(sessionLease: 5, manager: manager) await MainActor.run { server.start() } let port = try await waitForPort(server) defer { server.stop() } @@ -61,8 +82,8 @@ final class WebStudioServerTests: XCTestCase { let packageName = "WebStudio-P0-\(UUID().uuidString)" let initialSource = "const widget = ;" - XCTAssertTrue(sharedScriptManager.saveScript(packageName: packageName, content: initialSource, imageCopyPath: nil).0) - defer { _ = sharedScriptManager.deleteScript(packageName: packageName) } + XCTAssertTrue(manager.saveScript(packageName: packageName, content: initialSource, imageCopyPath: nil).0) + defer { _ = manager.deleteScript(packageName: packageName) } var packagesRequest = URLRequest(url: URL(string: "http://127.0.0.1:\(port)/api/v1/packages")!) packagesRequest.setValue(token, forHTTPHeaderField: "X-Studio-Token") @@ -87,7 +108,7 @@ final class WebStudioServerTests: XCTestCase { createRequest.httpBody = try JSONSerialization.data(withJSONObject: ["package": packageName, "path": "source/helper.js"]) let (_, createResponse) = try await URLSession.shared.data(for: createRequest) XCTAssertEqual((createResponse as? HTTPURLResponse)?.statusCode, 201) - XCTAssertEqual(sharedScriptManager.getScriptPackage(packageName: packageName).readFile(relativePath: "source/helper.js").0, "") + XCTAssertEqual(manager.getScriptPackage(packageName: packageName).readFile(relativePath: "source/helper.js").0, "") let updatedSource = "const widget = ;" var saveRequest = URLRequest(url: URL(string: "http://127.0.0.1:\(port)/api/v1/document")!) @@ -103,7 +124,7 @@ final class WebStudioServerTests: XCTestCase { let (saveData, saveResponse) = try await URLSession.shared.data(for: saveRequest) XCTAssertEqual((saveResponse as? HTTPURLResponse)?.statusCode, 200) let savedRevision = try XCTUnwrap((try JSONSerialization.jsonObject(with: saveData) as? [String: Any])?["revision"] as? String) - XCTAssertEqual(sharedScriptManager.getScriptPackage(packageName: packageName).readMainFile().0, updatedSource) + XCTAssertEqual(manager.getScriptPackage(packageName: packageName).readMainFile().0, updatedSource) var eventsRequest = URLRequest(url: URL(string: "http://127.0.0.1:\(port)/api/v1/events?after=0")!) eventsRequest.setValue(token, forHTTPHeaderField: "X-Studio-Token") @@ -119,7 +140,7 @@ final class WebStudioServerTests: XCTestCase { deleteRequest.setValue(token, forHTTPHeaderField: "X-Studio-Token") let (_, deleteFileResponse) = try await URLSession.shared.data(for: deleteRequest) XCTAssertEqual((deleteFileResponse as? HTTPURLResponse)?.statusCode, 200) - XCTAssertNil(sharedScriptManager.getScriptPackage(packageName: packageName).readFile(relativePath: "source/helper.js").0) + XCTAssertNil(manager.getScriptPackage(packageName: packageName).readFile(relativePath: "source/helper.js").0) let conflictingSource = "const widget = ;" saveRequest.httpBody = try JSONSerialization.data(withJSONObject: [ @@ -133,7 +154,7 @@ final class WebStudioServerTests: XCTestCase { let conflict = try XCTUnwrap(try JSONSerialization.jsonObject(with: conflictData) as? [String: Any]) XCTAssertEqual(conflict["currentContent"] as? String, updatedSource) XCTAssertEqual(conflict["currentRevision"] as? String, savedRevision) - XCTAssertEqual(sharedScriptManager.getScriptPackage(packageName: packageName).readMainFile().0, updatedSource) + XCTAssertEqual(manager.getScriptPackage(packageName: packageName).readMainFile().0, updatedSource) var sessionRequest = URLRequest(url: URL(string: "http://127.0.0.1:\(port)/api/v1/session")!) sessionRequest.setValue(token, forHTTPHeaderField: "X-Studio-Token") @@ -151,7 +172,7 @@ final class WebStudioServerTests: XCTestCase { } func testSessionLeaseReleasesClosedBrowser() async throws { - let server = WebStudioServer(sessionLease: 0.25) + let server = WebStudioServer(sessionLease: 0.25, manager: manager) await MainActor.run { server.start() } let port = try await waitForPort(server) defer { server.stop() } @@ -172,7 +193,7 @@ final class WebStudioServerTests: XCTestCase { } func testHTTPServerRejectsOversizedRequestAndStaysAvailable() async throws { - let server = WebStudioServer(sessionLease: 5) + let server = WebStudioServer(sessionLease: 5, manager: manager) await MainActor.run { server.start() } let port = try await waitForPort(server) defer { server.stop() } @@ -193,7 +214,8 @@ final class WebStudioServerTests: XCTestCase { if port != 0 { return port } try await Task.sleep(nanoseconds: 20_000_000) } - XCTFail("Web Studio listener did not become ready") + let diagnostics = await MainActor.run { server.diagnosticReport } + XCTFail("Web Studio listener did not become ready: \(diagnostics)") throw URLError(.cannotConnectToHost) } } diff --git a/iOS/ScriptWidget/Manager/WebStudioServer.swift b/iOS/ScriptWidget/Manager/WebStudioServer.swift index 3fe7ba43..7dcf4b1c 100644 --- a/iOS/ScriptWidget/Manager/WebStudioServer.swift +++ b/iOS/ScriptWidget/Manager/WebStudioServer.swift @@ -46,13 +46,15 @@ final class WebStudioServer: ObservableObject { private var leaseWorkItem: DispatchWorkItem? private let maximumRequestBytes = 2 * 1024 * 1024 private let sessionLease: TimeInterval + private let managerOverride: ScriptManager? private var eventSequence = 0 private var events = [WebStudioEvent]() private var previewSnapshot: Data? private let eventLock = NSLock() - init(sessionLease: TimeInterval = 15) { + init(sessionLease: TimeInterval = 15, manager: ScriptManager? = nil) { self.sessionLease = sessionLease + self.managerOverride = manager } var displayURLs: [String] { @@ -74,7 +76,7 @@ final class WebStudioServer: ObservableObject { let lease = ScriptWidgetEditorPresence.register() libraryEditorLease = lease do { - let library = try ScriptWidgetEditingLibrary(manager: sharedScriptManager) + let library = try ScriptWidgetEditingLibrary(manager: managerOverride ?? sharedScriptManager) let listener = try NWListener(using: .tcp, on: .any) listener.service = NWListener.Service(name: "ScriptWidget", type: "_scriptwidget._tcp") listener.stateUpdateHandler = { [weak self] state in From 3af976ed9fec960d03553a9ec5a8d04186b78aa9 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 20:51:13 -0700 Subject: [PATCH 04/15] Preserve storage identity across device remounts Bind private storage to the filesystem volume UUID while preserving existing receipt domains, directory inodes and record bytes. Recover legacy mount-number changes only within the OS application group. Reject missing modern markers, replaced stores and linked metadata; cover recovery and interrupted publication with regression tests. --- Scripts/test-icloud-json.mjs | 2 +- .../Common/ScriptWidgetPackage.swift | 16 ++- .../Widget/API/ScriptWidgetStorageFiles.swift | 55 ++++++--- .../API/ScriptWidgetStorageNamespaces.swift | 104 ++++++++++++++++++ .../RuntimeUnitTests.swift | 82 ++++++++++++++ docs/storage-api.md | 6 + 6 files changed, 240 insertions(+), 25 deletions(-) diff --git a/Scripts/test-icloud-json.mjs b/Scripts/test-icloud-json.mjs index 3a97a768..d34235c4 100644 --- a/Scripts/test-icloud-json.mjs +++ b/Scripts/test-icloud-json.mjs @@ -27,7 +27,7 @@ suite.run() guard let result = suite.testRun, result.executionCount >= 10, result.totalFailureCount == 0 else { exit(1) } `); const binary = join(temporary, "tests"); - await exec("xcrun", ["swiftc", "-F", frameworks, "-I", libraries, "-L", libraries, + await exec("xcrun", ["swiftc", "-D", "SCRIPTWIDGET_CLI", "-F", frameworks, "-I", libraries, "-L", libraries, ...[frameworks, libraries, join(platform, "Library/PrivateFrameworks"), resolve(developer, "../SharedFrameworks")] .flatMap(path => ["-Xlinker", "-rpath", "-Xlinker", path]), ...["Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageLock.swift", diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift index 97b9a030..99531954 100644 --- a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift +++ b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetPackage.swift @@ -852,8 +852,7 @@ enum ScriptWidgetPackageFiles { guard fstatat(sourceDirectory, sourceName, &info, AT_SYMLINK_NOFOLLOW) == 0, info.st_mode & S_IFMT == S_IFREG || info.st_mode & S_IFMT == S_IFDIR else { return false } if let expectedReceipt { - guard info.st_mode & S_IFMT == S_IFDIR, expectedReceipt.device == UInt64(UInt32(bitPattern: info.st_dev)), - expectedReceipt.inode == info.st_ino else { return false } + guard info.st_mode & S_IFMT == S_IFDIR, expectedReceipt.matches(parent: sourceDirectory, name: sourceName) else { return false } } return withParent(root: root, relative: destination) { destinationDirectory, destinationName in renameatx_np(sourceDirectory, sourceName, destinationDirectory, destinationName, UInt32(RENAME_EXCL)) == 0 @@ -881,7 +880,8 @@ enum ScriptWidgetPackageFiles { guard fstat(child, &opened) == 0, opened.st_dev == entry.st_dev, opened.st_ino == entry.st_ino else { return .failure(ScriptWidgetStorageNamespaceError.conflict) } - return .success(.init(device: UInt64(UInt32(bitPattern: opened.st_dev)), inode: opened.st_ino)) + do { return .success(try ScriptWidgetStoragePublicationReceipt.capture(directory: child)) } + catch { return .failure(error) } } guard let result else { throw ScriptWidgetStorageNamespaceError.unavailable } return try result.get() @@ -893,7 +893,7 @@ enum ScriptWidgetPackageFiles { var info = stat() guard fstatat(sourceParent, sourceName, &info, AT_SYMLINK_NOFOLLOW) == 0, info.st_mode & S_IFMT == S_IFDIR else { return false } if let expectedReceipt { - guard expectedReceipt.device == UInt64(UInt32(bitPattern: info.st_dev)), expectedReceipt.inode == info.st_ino else { return false } + guard expectedReceipt.matches(parent: sourceParent, name: sourceName) else { return false } } return withParent(root: root, relative: name) { parent, finalName in renameatx_np(sourceParent, sourceName, parent, finalName, UInt32(RENAME_EXCL)) == 0 @@ -908,8 +908,7 @@ enum ScriptWidgetPackageFiles { return withParent(root: source.deletingLastPathComponent(), relative: source.lastPathComponent) { sourceParent, sourceName in var prepared = stat() guard fstatat(sourceParent, sourceName, &prepared, AT_SYMLINK_NOFOLLOW) == 0, - prepared.st_mode & S_IFMT == S_IFDIR, expectedReceipt.device == UInt64(UInt32(bitPattern: prepared.st_dev)), - expectedReceipt.inode == prepared.st_ino else { return false } + prepared.st_mode & S_IFMT == S_IFDIR, expectedReceipt.matches(parent: sourceParent, name: sourceName) else { return false } return withParent(root: root, relative: name) { parent, finalName in var existing = stat() if fstatat(parent, finalName, &existing, AT_SYMLINK_NOFOLLOW) != 0 { @@ -932,8 +931,7 @@ enum ScriptWidgetPackageFiles { var info = stat() guard fstatat(parent, name, &info, AT_SYMLINK_NOFOLLOW) == 0 else { return false } if depth == 0, let expectedReceipt { - guard info.st_mode & S_IFMT == S_IFDIR, expectedReceipt.device == UInt64(UInt32(bitPattern: info.st_dev)), - expectedReceipt.inode == info.st_ino else { return false } + guard info.st_mode & S_IFMT == S_IFDIR, expectedReceipt.matches(parent: parent, name: name) else { return false } } if info.st_mode & S_IFMT == S_IFDIR { let child = openat(parent, name, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) @@ -974,7 +972,7 @@ enum ScriptWidgetPackageFiles { guard source >= 0 else { throw ScriptWidgetStorageNamespaceError.unavailable } defer { close(source) } var info = stat() - guard fstat(source, &info) == 0, UInt64(UInt32(bitPattern: info.st_dev)) == receipt.device, info.st_ino == receipt.inode else { + guard fstat(source, &info) == 0, try ScriptWidgetStoragePublicationReceipt.capture(directory: source) == receipt else { throw ScriptWidgetStorageNamespaceError.conflict } let target = open(destination.path, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift index 098541e1..e0471aa9 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift @@ -34,6 +34,7 @@ final class ScriptWidgetStorageFiles { private let rootDevice: dev_t private let rootInode: ino_t private let storeReceipt: ScriptWidgetStoragePublicationReceipt + private let volumeIdentity: Data private static let anchorName = ".ScriptWidgetStorage.v2.anchor" var storageReceipt: ScriptWidgetStoragePublicationReceipt { storeReceipt } private static let maximumRecordFileBytes = 3 * 1024 * 1024 @@ -70,7 +71,8 @@ final class ScriptWidgetStorageFiles { return true } - init(container: URL, expectedStoreReceipt: ScriptWidgetStoragePublicationReceipt? = nil) throws { + init(container: URL, expectedStoreReceipt: ScriptWidgetStoragePublicationReceipt? = nil, + legacyRecoveryRoot: URL? = ScriptWidgetStorageVolume.nativeGroupRoot, inheritedDevice: UInt64? = nil) throws { let root = container.standardizedFileURL.resolvingSymlinksInPath() var original = stat() guard lstat(container.path, &original) == 0, original.st_mode & S_IFMT == S_IFDIR else { throw ScriptWidgetStorageFileError.unavailable } @@ -80,42 +82,63 @@ final class ScriptWidgetStorageFiles { var info = stat() guard fstat(fd, &info) == 0, info.st_dev == original.st_dev, info.st_ino == original.st_ino else { throw ScriptWidgetStorageFileError.unavailable } self.container = root; rootDevice = info.st_dev; rootInode = info.st_ino + let volume = try ScriptWidgetStorageVolume.identifier(fd) + volumeIdentity = volume guard let result = ScriptWidgetStorageLock.withExclusiveAccess(container: root, namespace: "ScriptWidgetStorage.FileInitialization.v1", operation: { () -> Result in Result { let directory = try Self.child(fd, name: Self.directoryName) defer { close(directory) } var storeInfo = stat() - guard fstat(directory, &storeInfo) == 0 else { throw ScriptWidgetStorageFileError.unavailable } - let receipt = Self.receipt(storeInfo) - guard expectedStoreReceipt == nil || expectedStoreReceipt == receipt else { throw ScriptWidgetStorageFileError.unavailable } - let anchor = Self.anchor(receipt) + guard fstat(directory, &storeInfo) == 0, storeInfo.st_dev == info.st_dev else { throw ScriptWidgetStorageFileError.unavailable } + let physicalDevice = UInt64(UInt32(bitPattern: storeInfo.st_dev)) + let marker = try Self.read(directory, name: ScriptWidgetStorageVolume.markerName, maximum: 24) + let receipt: ScriptWidgetStoragePublicationReceipt if let existing = try Self.read(fd, name: Self.anchorName, maximum: 24) { - guard existing == anchor else { throw ScriptWidgetStorageFileError.invalidData } + receipt = try ScriptWidgetStorageVolume.anchorReceipt(existing) + guard receipt.inode == storeInfo.st_ino else { throw ScriptWidgetStorageFileError.invalidData } + if let marker { + guard marker == ScriptWidgetStorageVolume.markerMagic + volume else { throw ScriptWidgetStorageFileError.invalidData } + } else { + guard existing.prefix(8) == Data("SWANCH01".utf8) else { throw ScriptWidgetStorageFileError.invalidData } + // Legacy anchors stored a boot-local mount number. Only + // native OS-group descendants may recover a changed one; + // never adopt a replaced directory or arbitrary volume. + guard receipt.device == physicalDevice || ScriptWidgetStorageVolume.permitsLegacyRecovery(container: root, groupRoot: legacyRecoveryRoot, volume: volume) else { + throw ScriptWidgetStorageFileError.invalidData + } + } } else { // Anchor publication precedes the version marker. A retry // may complete an empty store, but never adopts existing // data whose durable identity has gone missing. guard try Self.names(directory).isEmpty else { throw ScriptWidgetStorageFileError.invalidData } - try Self.write(anchor, directory: fd, name: Self.anchorName) + receipt = .init(device: inheritedDevice ?? physicalDevice, inode: storeInfo.st_ino) + try Self.write(Self.anchor(receipt, legacy: true), directory: fd, name: Self.anchorName) } + guard expectedStoreReceipt == nil || expectedStoreReceipt == receipt else { throw ScriptWidgetStorageFileError.unavailable } if let marker = try Self.read(directory, name: "version", maximum: 32) { guard marker == Self.rootMagic else { throw ScriptWidgetStorageFileError.invalidData } } else { guard try Self.names(directory).isEmpty else { throw ScriptWidgetStorageFileError.invalidData } try Self.write(Self.rootMagic, directory: directory, name: "version") } + if marker == nil { + try Self.write(ScriptWidgetStorageVolume.markerMagic + volume, directory: directory, name: ScriptWidgetStorageVolume.markerName) + } + // The upgraded anchor requires the volume marker. A removed + // marker can never be mistaken for a legacy store on reopen. + let upgraded = Self.anchor(receipt) + if try Self.read(fd, name: Self.anchorName, maximum: 24) != upgraded { + try Self.write(upgraded, directory: fd, name: Self.anchorName) + } return receipt } }) else { throw ScriptWidgetStorageFileError.unavailable } storeReceipt = try result.get() } - private static func receipt(_ info: stat) -> ScriptWidgetStoragePublicationReceipt { - .init(device: UInt64(UInt32(bitPattern: info.st_dev)), inode: UInt64(info.st_ino)) - } - - private static func anchor(_ receipt: ScriptWidgetStoragePublicationReceipt) -> Data { - var bytes = Data("SWANCH01".utf8) + private static func anchor(_ receipt: ScriptWidgetStoragePublicationReceipt, legacy: Bool = false) -> Data { + var bytes = Data((legacy ? "SWANCH01" : "SWANCH02").utf8) for value in [receipt.device, receipt.inode] { for index in (0..<8).reversed() { bytes.append(UInt8((value >> (index * 8)) & 255)) } } @@ -131,9 +154,11 @@ final class ScriptWidgetStorageFiles { let directory = try Self.child(root, name: Self.directoryName) defer { close(directory) } var storeInfo = stat() - guard fstat(directory, &storeInfo) == 0, Self.receipt(storeInfo) == storeReceipt, + guard fstat(directory, &storeInfo) == 0, storeInfo.st_dev == rootDevice, storeInfo.st_ino == storeReceipt.inode, try Self.read(root, name: Self.anchorName, maximum: 24) == Self.anchor(storeReceipt) else { throw ScriptWidgetStorageFileError.unavailable } guard try Self.read(directory, name: "version", maximum: 32) == Self.rootMagic else { throw ScriptWidgetStorageFileError.invalidData } + guard try Self.read(directory, name: ScriptWidgetStorageVolume.markerName, maximum: 24) == ScriptWidgetStorageVolume.markerMagic + volumeIdentity, + try ScriptWidgetStorageVolume.identifier(directory) == volumeIdentity else { throw ScriptWidgetStorageFileError.invalidData } let bucket = try Self.child(directory, name: name) defer { close(bucket) } return try operation(bucket) @@ -193,7 +218,7 @@ final class ScriptWidgetStorageFiles { var receipt = stat() guard fstat(descriptor, &receipt) == 0 else { throw ScriptWidgetStorageFileError.unavailable } let path = container.appendingPathComponent(Self.directoryName).appendingPathComponent("profiles").appendingPathComponent(id) - let files = try ScriptWidgetStorageFiles(container: path, expectedStoreReceipt: expectedStoreReceipt) + let files = try ScriptWidgetStorageFiles(container: path, expectedStoreReceipt: expectedStoreReceipt, inheritedDevice: storeReceipt.device) guard files.rootDevice == receipt.st_dev, files.rootInode == receipt.st_ino else { throw ScriptWidgetStorageFileError.unavailable } return files } diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift index f7848457..26e04dab 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift @@ -1,6 +1,7 @@ import Foundation import CoreFoundation import CryptoKit +import Darwin /// Native-owned identities. Package manifests and backup files cannot choose an /// identity. The prefix deliberately sits outside the old `script.` domain. @@ -61,6 +62,109 @@ struct ScriptWidgetLegacyStoragePreview { struct ScriptWidgetStoragePublicationReceipt: Codable, Equatable, Sendable { let device: UInt64 let inode: UInt64 + + static func capture(directory: Int32, groupRoot: URL? = ScriptWidgetStorageVolume.nativeGroupRoot) throws -> Self { + var info = stat() + guard fstat(directory, &info) == 0, info.st_mode & S_IFMT == S_IFDIR else { throw ScriptWidgetStorageNamespaceError.unavailable } + let physicalDevice = UInt64(UInt32(bitPattern: info.st_dev)) + guard let identity = try ScriptWidgetStorageVolume.groupIdentity(root: groupRoot) else { + return .init(device: physicalDevice, inode: info.st_ino) + } + let volume = try ScriptWidgetStorageVolume.identifier(directory) + // Keep the original logical domain so owner IDs, existing journals and + // location hashes survive a reboot. A mount number is not a volume ID. + if volume == identity.volume { return .init(device: identity.device, inode: info.st_ino) } + // Another filesystem cannot collide with this app's legacy domain. + let digest = SHA256.hash(data: volume).prefix(8).reduce(UInt64(0)) { ($0 << 8) | UInt64($1) } + return .init(device: digest | (1 << 63), inode: info.st_ino) + } + + func matches(parent: Int32, name: String) -> Bool { + let fd = openat(parent, name, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) + guard fd >= 0 else { return false } + defer { close(fd) } + return (try? Self.capture(directory: fd)) == self + } +} + +/// Volume UUIDs survive remounts; st_dev does not. The marker is native private +/// metadata and remains paired with the original directory inode and anchor. +enum ScriptWidgetStorageVolume { + static let markerName = "volume" + static let markerMagic = Data("SWVOL001".utf8) + static var nativeGroupRoot: URL? { +#if SCRIPTWIDGET_CLI + return nil +#else + FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.everettjf.scriptwidget") +#endif + } + + static func identifier(_ fd: Int32) throws -> Data { + var attrs = attrlist() + attrs.bitmapcount = UInt16(ATTR_BIT_MAP_COUNT) + attrs.volattr = UInt32(ATTR_VOL_INFO) | UInt32(ATTR_VOL_UUID) + var data = Data(count: 20) + let status = data.withUnsafeMutableBytes { fgetattrlist(fd, &attrs, $0.baseAddress, $0.count, 0) } + guard status == 0, data.withUnsafeBytes({ $0.loadUnaligned(as: UInt32.self) }) == 20, + data.dropFirst(4).contains(where: { $0 != 0 }) else { throw ScriptWidgetStorageNamespaceError.unavailable } + return Data(data.dropFirst(4)) + } + + static func anchorReceipt(_ bytes: Data) throws -> ScriptWidgetStoragePublicationReceipt { + guard bytes.count == 24, [Data("SWANCH01".utf8), Data("SWANCH02".utf8)].contains(Data(bytes.prefix(8))) else { throw ScriptWidgetStorageNamespaceError.invalidRegistry } + return .init(device: bytes[8..<16].reduce(0) { ($0 << 8) | UInt64($1) }, + inode: bytes[16..<24].reduce(0) { ($0 << 8) | UInt64($1) }) + } + + static func permitsLegacyRecovery(container: URL, groupRoot: URL?, volume: Data) -> Bool { + guard let groupRoot else { return false } + let group = groupRoot.standardizedFileURL.resolvingSymlinksInPath() + let candidate = container.standardizedFileURL.resolvingSymlinksInPath() + guard candidate.pathComponents.starts(with: group.pathComponents) else { return false } + let fd = open(group.path, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) + guard fd >= 0 else { return false } + defer { close(fd) } + return (try? identifier(fd)) == volume + } + + static func groupIdentity(root: URL?) throws -> (volume: Data, device: UInt64)? { + guard let root else { return nil } + let parent = open(root.standardizedFileURL.resolvingSymlinksInPath().path, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) + guard parent >= 0 else { throw ScriptWidgetStorageNamespaceError.unavailable } + defer { close(parent) } + let directory = openat(parent, "__WidgetStorage.v2", O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC) + if directory < 0 { + if errno == ENOENT { return nil } + throw ScriptWidgetStorageNamespaceError.unavailable + } + defer { close(directory) } + guard let marker = try readMarker(directory, markerName) else { return nil } + guard let anchor = try readMarker(parent, ".ScriptWidgetStorage.v2.anchor") else { throw ScriptWidgetStorageNamespaceError.invalidRegistry } + let receipt = try anchorReceipt(anchor) + var info = stat() + let volume = try identifier(directory) + guard fstat(directory, &info) == 0, info.st_ino == receipt.inode, + marker == markerMagic + volume else { throw ScriptWidgetStorageNamespaceError.invalidRegistry } + return (volume, receipt.device) + } + + private static func readMarker(_ parent: Int32, _ name: String) throws -> Data? { + let fd = openat(parent, name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC) + if fd < 0 { + if errno == ENOENT { return nil } + throw ScriptWidgetStorageNamespaceError.unavailable + } + defer { close(fd) } + var info = stat() + guard fstat(fd, &info) == 0, info.st_mode & S_IFMT == S_IFREG, info.st_nlink == 1, info.st_size == 24 else { + throw ScriptWidgetStorageNamespaceError.invalidRegistry + } + var bytes = Data(count: 24) + let count = bytes.withUnsafeMutableBytes { Darwin.read(fd, $0.baseAddress, $0.count) } + guard count == 24 else { throw ScriptWidgetStorageNamespaceError.unavailable } + return bytes + } } enum ScriptWidgetStorageDirectoryRole: String, Codable, Sendable { diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index d9359753..4e364b9f 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -6543,3 +6543,85 @@ final class PublicAnimationTests: XCTestCase { XCTAssertEqual(quarter-zero,8,accuracy:0.5); XCTAssertEqual(reduced,quarter,accuracy:0.5) } } + +extension NativeStorageFileTests { + private func legacyVolumeFixture(changedMount: Bool, retainMarker: Bool = false) throws -> (Data, UInt64) { + let store = try ScriptWidgetStorageFiles(container: root) + var values = ScriptWidgetStorageFileMap(); values["kept"] = "original record" + try store.commitNamespace(ownerID: owner, values: values) + let bytes = try Data(contentsOf: recordURL) + let original = store.storageReceipt.device + let logical = changedMount ? original ^ 1 : original + var anchor = Data("SWANCH01".utf8) + for value in [logical, store.storageReceipt.inode] { + for shift in (0..<8).reversed() { anchor.append(UInt8((value >> (shift * 8)) & 255)) } + } + try anchor.write(to: root.appendingPathComponent(".ScriptWidgetStorage.v2.anchor")) + if !retainMarker { try FileManager.default.removeItem(at: root.appendingPathComponent(ScriptWidgetStorageFiles.directoryName).appendingPathComponent("volume")) } + return (bytes, logical) + } + + func testRemountedNativeVolumePreservesRecordsReceiptsAndLogicalDevice() throws { + let (bytes, logical) = try legacyVolumeFixture(changedMount: true) + let reopened = try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root) + XCTAssertEqual(reopened.storageReceipt.device, logical) + XCTAssertEqual(try reopened.readNamespace(ownerID: owner)["kept"] as? String, "original record") + XCTAssertEqual(try Data(contentsOf: recordURL), bytes) + let source = root.appendingPathComponent("Scripts") + try FileManager.default.createDirectory(at: source, withIntermediateDirectories: true) + let fd = open(source.path, O_RDONLY | O_DIRECTORY | O_NOFOLLOW) + guard fd >= 0 else { return XCTFail("Fixture directory could not open") } + defer { close(fd) } + let receipt = try ScriptWidgetStoragePublicationReceipt.capture(directory: fd, groupRoot: root) + XCTAssertEqual(receipt.device, logical) + let nested = try reopened.profileFiles(id: UUID().uuidString.lowercased()) + XCTAssertEqual(nested.storageReceipt.device, logical) + XCTAssertEqual(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: nil).storageReceipt, reopened.storageReceipt) + } + + func testChangedLegacyMountOutsideNativeGroupIsNotAutomaticallyAdopted() throws { + let (bytes, _) = try legacyVolumeFixture(changedMount: true) + let anchorURL = root.appendingPathComponent(".ScriptWidgetStorage.v2.anchor") + let anchor = try Data(contentsOf: anchorURL) + XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: nil)) + XCTAssertEqual(try Data(contentsOf: anchorURL), anchor) + XCTAssertEqual(try Data(contentsOf: recordURL), bytes) + } + + func testLegacyVolumeUpgradeResumesAfterMarkerPublicationWithoutChangingRecords() throws { + let (bytes, _) = try legacyVolumeFixture(changedMount: true, retainMarker: true) + let reopened = try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: nil) + XCTAssertEqual(try Data(contentsOf: root.appendingPathComponent(".ScriptWidgetStorage.v2.anchor")).prefix(8), Data("SWANCH02".utf8)) + XCTAssertEqual(try reopened.readNamespace(ownerID: owner)["kept"] as? String, "original record") + XCTAssertEqual(try Data(contentsOf: recordURL), bytes) + } + + func testModernVolumeProofCannotBeRemovedAndRecreatedAsLegacy() throws { + let store = try ScriptWidgetStorageFiles(container: root) + let marker = root.appendingPathComponent(ScriptWidgetStorageFiles.directoryName).appendingPathComponent("volume") + try FileManager.default.removeItem(at: marker) + XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root)) + XCTAssertThrowsError(try store.readNamespace(ownerID: owner)) + XCTAssertFalse(FileManager.default.fileExists(atPath: marker.path)) + } + + func testForeignVolumeProofIsRejectedEvenForTheNativeRecoveryRoot() throws { + let (bytes, _) = try legacyVolumeFixture(changedMount: true, retainMarker: true) + let marker = root.appendingPathComponent(ScriptWidgetStorageFiles.directoryName).appendingPathComponent("volume") + try (Data("SWVOL001".utf8) + Data(repeating: 0xff, count: 16)).write(to: marker) + XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root)) + XCTAssertEqual(try Data(contentsOf: recordURL), bytes) + } + + func testVolumeProofSymlinkAndHardlinkDoNotAuthorizeAStore() throws { + _ = try ScriptWidgetStorageFiles(container: root) + let marker = root.appendingPathComponent(ScriptWidgetStorageFiles.directoryName).appendingPathComponent("volume") + let kept = root.appendingPathComponent("kept-volume-proof") + try FileManager.default.moveItem(at: marker, to: kept) + try FileManager.default.createSymbolicLink(at: marker, withDestinationURL: kept) + XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root)) + try FileManager.default.removeItem(at: marker) + try FileManager.default.linkItem(at: kept, to: marker) + XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root)) + } +} diff --git a/docs/storage-api.md b/docs/storage-api.md index e8504ac7..9f82f2cb 100644 --- a/docs/storage-api.md +++ b/docs/storage-api.md @@ -291,3 +291,9 @@ The `launcher` configuration-only kind saves title, accent and ordered link defi ## Optional iCloud JSON `$storage` remains local and is not migrated automatically. New packages can opt into the separate [iCloud JSON API](icloud-json-api.md) (Runtime 1.5), with explicit native user connection, cache-first reads and preserved conflicting revisions. + +## Filesystem identity across device restarts + +Native record storage now pairs its directory anchor with the filesystem's volume UUID. A POSIX mount device number (`st_dev`) can change after a device restart or system upgrade even when the directory inode and its contents are unchanged. The original logical record domain is retained, so package owner UUIDs, directory bindings, location hashes and saved records do not need to be recreated. + +On first opening an older store, a changed mount number can be recovered only inside the OS-provided ScriptWidget App Group, on the same current volume and with the original directory inode. The native service validates the existing anchor and version before publishing the volume proof, then marks the upgraded anchor. Interrupted proof publication can resume. Once upgraded, missing, malformed, symlinked or foreign-volume proofs fail closed instead of creating an empty store. A genuinely replaced directory still fails its inode check. Record payloads and original preferences are not rewritten by this compatibility upgrade. From bf1c746c25a3b5ef5676f3729ebecb2523be4fa1 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 21:08:47 -0700 Subject: [PATCH 05/15] Run declared iOS widget actions in the app host MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use LiveActivityIntent for declared and toggle actions on iOS 17–26 so app-owned permissions apply consistently with direct widget buttons. Reload widgets after native grant changes and retain timer controls when extension AlarmKit reads are unavailable. Add application-host conformance regression coverage. --- .../Common/ScriptWidgetSystemAccessView.swift | 2 +- .../AppIntents/ButtonActionAppIntent.swift | 9 ++++++++ .../RuntimeUnitTests.swift | 13 ++++++++++++ docs/examples/alarm-focus-timer/main.jsx | 21 ++++++++++++------- docs/system-services-api.md | 2 ++ 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift index 736883c7..8880b9ea 100644 --- a/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift +++ b/Shared/ScriptWidgetRuntime/Common/ScriptWidgetSystemAccessView.swift @@ -36,7 +36,7 @@ struct ScriptWidgetSystemAccessView: View { })) } Button("Save Access and Selections") { run { - let store = try Self.store(package); try store.save(grant, expected: original); reload(); message = "Access saved. System authorization may also be required below." + let store = try Self.store(package); try store.save(grant, expected: original); reload(); ScriptWidgetSystemRefresh.request(); message = "Access saved. System authorization may also be required below." } } Text("Turning access off takes effect for subsequent system calls. It does not delete imported files or cancel previously scheduled notifications or alarms; cancel those before revoking access.").font(.footnote) } diff --git a/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift b/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift index c070cfdc..a8646261 100644 --- a/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift +++ b/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift @@ -432,6 +432,15 @@ struct SetScriptWidgetActionValueIntent: SetValueIntent { } } +#if os(iOS) +// System permissions such as AlarmKit belong to the app, not the widget +// extension. Match the direct-button intent on iOS 17–26 as well as iOS 27. +@available(iOS 17.0, *) +extension RunScriptWidgetActionIntent: LiveActivityIntent {} +@available(iOS 17.0, *) +extension SetScriptWidgetActionValueIntent: LiveActivityIntent {} +#endif + #if os(macOS) private typealias ScriptWidgetActionIntentProtocol = AppIntent #else diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index 4e364b9f..a5fa2ce5 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -28,6 +28,7 @@ import Darwin import SwiftUI import UniformTypeIdentifiers #if os(iOS) +import AppIntents import UIKit #elseif os(macOS) import AppKit @@ -6625,3 +6626,15 @@ extension NativeStorageFileTests { XCTAssertThrowsError(try ScriptWidgetStorageFiles(container: root, legacyRecoveryRoot: root)) } } + +#if os(iOS) +@available(iOS 17.0, *) +final class ScriptWidgetActionHostTests: XCTestCase { + func testDeclaredActionsUseTheApplicationHostBeforeIOS27() { + let actionType: Any.Type = RunScriptWidgetActionIntent.self + let toggleType: Any.Type = SetScriptWidgetActionValueIntent.self + XCTAssertTrue(actionType is any LiveActivityIntent.Type) + XCTAssertTrue(toggleType is any LiveActivityIntent.Type) + } +} +#endif diff --git a/docs/examples/alarm-focus-timer/main.jsx b/docs/examples/alarm-focus-timer/main.jsx index 77df1a24..da72c3db 100644 --- a/docs/examples/alarm-focus-timer/main.jsx +++ b/docs/examples/alarm-focus-timer/main.jsx @@ -17,18 +17,25 @@ async function cancelTimer() { await $alarms.cancel("focus"); } async function pauseTimer() { await $alarms.pause("focus"); } async function resumeTimer() { await $alarms.resume("focus"); } if ($getenv("widget-size") !== "action") { + const lines = ["25 minutes, one thing at a time"]; try { const status = await $alarms.status(); - const timers = await $alarms.pending(); - const lines = ["25 minutes, one thing at a time", "Authorization: " + status.authorization, ...timers.filter(item => item.key === "focus").slice(0,1).map(item => item.key + " · " + item.state)]; - $render( + // AlarmKit authorization is process-scoped on some iOS versions. Widget + // actions run in the app; keep controls visible when extension reads differ. + if (status.authorization === "authorized") { + const timers = await $alarms.pending(); + lines.push(...timers.filter(item => item.key === "focus").slice(0,1).map(item => item.key + " · " + item.state)); + } else { + lines.push("Start checks app alarm access"); + } + } catch (error) { + console.error(String(error)); + lines.push("Review System Access in ScriptWidget"); + } + $render( Focus Timer {lines.map(line => {line})} ); - } catch (error) { - console.error(String(error)); - $render(Focus TimerOpen this widget’s System Access in ScriptWidget, save access and authorize the system service.); - } } diff --git a/docs/system-services-api.md b/docs/system-services-api.md index 53c1c825..a31168e1 100644 --- a/docs/system-services-api.md +++ b/docs/system-services-api.md @@ -90,6 +90,8 @@ await $alarms.stop("focus"); await $alarms.cancel("focus"); Use exactly one of `seconds` (60–86400) or `date` (future, at most 366 days). Titles are at most 128 UTF-8 bytes. Up to 32 named keys are tracked per installation. IDs are derived natively from installation + key; scripts cannot supply another alarm UUID. An active alarm is not silently replaced: cancel it explicitly first. Pause/resume depend on the system's current countdown state. Schedule uses the same bounded seven-day replay-receipt rules as calendar writes. Preserve pending requests when an outcome is unknown. +On iOS 17–26, declared actions and control value actions use the application host via `LiveActivityIntent`, matching direct widget buttons; iOS 27 also declares the main execution target. AlarmKit authorization is process-scoped on iOS 26: a widget extension can report `notDetermined` even after the containing app is authorized, and pending reads can be denied there. Keep action controls visible when extension reads are unavailable; scheduling and control actions check the app’s live authorization. + The extension includes native AlarmKit countdown Live Activity/Dynamic Island UI. It displays system dates without rerunning JavaScript. AlarmKit authorization, presentation, locked-device behavior, delivery and acknowledgments require physical-device acceptance. This API does not enumerate or edit alarms owned by Apple's Clock app. [Runnable Focus Timer](examples/alarm-focus-timer). From d1f643fd13bf004ff01bdc05896e97cd8a24cd8f Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 21:20:07 -0700 Subject: [PATCH 06/15] Avoid repeated library discovery while rendering action buttons --- .../Widget/API/ScriptWidgetStorageNamespaces.swift | 6 ++++-- .../Widget/AppIntents/ButtonActionAppIntent.swift | 4 ++++ .../Component/Elements/ScriptWidgetElementTagButton.swift | 2 +- Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift | 8 ++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift index 26e04dab..96205bb6 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift @@ -92,13 +92,15 @@ struct ScriptWidgetStoragePublicationReceipt: Codable, Equatable, Sendable { enum ScriptWidgetStorageVolume { static let markerName = "volume" static let markerMagic = Data("SWVOL001".utf8) - static var nativeGroupRoot: URL? { + // The OS group URL is stable for this process. Cache the lookup, not the + // volume/anchor proof, which is revalidated for every receipt. + static let nativeGroupRoot: URL? = { #if SCRIPTWIDGET_CLI return nil #else FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.everettjf.scriptwidget") #endif - } + }() static func identifier(_ fd: Int32) throws -> Data { var attrs = attrlist() diff --git a/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift b/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift index a8646261..5092f739 100644 --- a/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift +++ b/Shared/ScriptWidgetRuntime/Widget/AppIntents/ButtonActionAppIntent.swift @@ -385,6 +385,10 @@ struct RunScriptWidgetActionIntent: AppIntent { init() {} + init(resolved: ResolvedScriptWidgetAction) { + action = ScriptWidgetActionEntity(resolved: resolved) + } + init(identifier: String) { if let resolved = ScriptWidgetActionCatalog.live.resolve(identifier: identifier) { action = ScriptWidgetActionEntity(resolved: resolved) diff --git a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagButton.swift b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagButton.swift index d6bbcdc9..25322f07 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagButton.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagButton.swift @@ -39,7 +39,7 @@ class ScriptWidgetElementTagButton { .modifier(ScriptWidgetAttributeGeneralModifier(element, context)) case .declared(let actionID): if let resolved = context.actionCatalog.resolve(package: context.package, actionID: actionID) { - Button(intent: RunScriptWidgetActionIntent(identifier: resolved.identifier)) { + Button(intent: RunScriptWidgetActionIntent(resolved: resolved)) { buttonLabel(element: element, context: context) } .modifier(ScriptWidgetAttributeGeneralModifier(element, context)) diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index a5fa2ce5..0cc03b2d 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -1326,6 +1326,14 @@ final class ScriptWidgetActionTests: XCTestCase { XCTAssertTrue(catalog.actions().isEmpty, "Malformed Package 2.0 manifests must fail closed on system surfaces") } + func testResolvedButtonIntentPreservesLocalActionWithoutGlobalDiscovery() throws { + let (package, _) = try makeActionPackage() + let resolved = try XCTUnwrap(ScriptWidgetActionCatalog(packages: [package]).actions().first) + let intent = RunScriptWidgetActionIntent(resolved: resolved) + XCTAssertEqual(intent.action.id, resolved.identifier) + XCTAssertEqual(intent.action.title, resolved.action.title) + } + func testExecutorProvidesSharedActionAndLegacyControlEnvironments() throws { let (package, manifest) = try makeActionPackage() let resolved = try XCTUnwrap(ScriptWidgetActionCatalog(packages: [package]).actions().first) From a72d58ed8b898f97d4439d3f3b5a1c791b3e5ee7 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 21:26:25 -0700 Subject: [PATCH 07/15] Persist private system service state through the file backend --- Scripts/test-system-services.mjs | 4 +-- .../API/ScriptWidgetRuntimeAlarms.swift | 8 ++--- .../ScriptWidgetRuntimeCalendarWrites.swift | 6 ++-- .../ScriptWidgetRuntimeSystemServices.swift | 10 ++++++ .../Widget/API/ScriptWidgetStorageFiles.swift | 8 +++++ .../SystemServiceTests.swift | 33 +++++++++++++++++++ 6 files changed, 59 insertions(+), 10 deletions(-) diff --git a/Scripts/test-system-services.mjs b/Scripts/test-system-services.mjs index 9be1672e..2ecf755e 100644 --- a/Scripts/test-system-services.mjs +++ b/Scripts/test-system-services.mjs @@ -25,7 +25,7 @@ try{ const testSource=(await read("Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift")).replace("@testable import ScriptWidget",""); await writeFile(join(temporary,"main.swift"),testSource+`\nlet suite=SystemServiceTests.defaultTestSuite\nsuite.run()\nguard let run=suite.testRun,run.executionCount>=8,run.totalFailureCount==0 else {exit(1)}\n`); const binary=join(temporary,"tests"); - await exec("xcrun",["swiftc","-F",frameworks,"-I",libraries,"-L",libraries,...[frameworks,libraries,join(platform,"Library/PrivateFrameworks"),resolve(developer,"../SharedFrameworks")].flatMap(p=>["-Xlinker","-rpath","-Xlinker",p]), - ...["Widget/API/ScriptWidgetStorageLock.swift","Widget/API/ScriptWidgetStorageNamespaces.swift","Common/ScriptWidgetCloudJSON.swift"].map(p=>resolve(repo,"Shared/ScriptWidgetRuntime",p)),join(temporary,"helpers.swift"),join(temporary,"main.swift"),"-o",binary],{timeout:60000}); + await exec("xcrun",["swiftc","-D","SCRIPTWIDGET_CLI","-F",frameworks,"-I",libraries,"-L",libraries,...[frameworks,libraries,join(platform,"Library/PrivateFrameworks"),resolve(developer,"../SharedFrameworks")].flatMap(p=>["-Xlinker","-rpath","-Xlinker",p]), + ...["Widget/API/ScriptWidgetStorageLock.swift","Widget/API/ScriptWidgetStorageNamespaces.swift","Widget/API/ScriptWidgetStorageFiles.swift","Common/ScriptWidgetCloudJSON.swift"].map(p=>resolve(repo,"Shared/ScriptWidgetRuntime",p)),join(temporary,"helpers.swift"),join(temporary,"main.swift"),"-o",binary],{timeout:60000}); const result=await exec(binary,[],{timeout:30000});process.stdout.write(result.stdout+result.stderr); }catch(error){process.stderr.write(error.stdout??"");process.stderr.write(error.stderr??"");throw error;}finally{await rm(temporary,{recursive:true,force:true});} diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift index b1dd7b51..f6331dcb 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift @@ -45,7 +45,7 @@ struct ScriptWidgetAlarmOptions { static func retire(owner: String, backend: any ScriptWidgetStorageBackend) { #if os(iOS) && canImport(AlarmKit) if #available(iOS 26.0, *) { - guard let keys = try? backend.readValue(forKey: "ScriptWidget.SystemServices.alarmKeys.v1." + owner) as? [String], keys.count <= 32 else { return } + guard let keys = try? ScriptWidgetSystemAccessStore.readNativeValue([String].self, key: "ScriptWidget.SystemServices.alarmKeys.v1." + owner, backend: backend), keys.count <= 32 else { return } for key in keys where ScriptWidgetSystemOptions.validKey(key) { if let id = try? ScriptWidgetAlarmOptions.id(owner: owner, key: key) { try? AlarmManager.shared.cancel(id: id) } } @@ -63,8 +63,8 @@ struct ScriptWidgetAlarmOptions { let indexKey = context.access.privateKey("alarmKeys") guard let operationResult = ScriptWidgetStorageLock.withExclusiveAccess(container: context.access.container, namespace: indexKey, operation: { Result { guard backend.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } - let raw = try backend.readValue(forKey: indexKey) - guard raw == nil || raw is [String], let keys = (raw as? [String] ?? []) as [String]?, keys.count <= 32, keys.allSatisfy(ScriptWidgetSystemOptions.validKey), Set(keys).count == keys.count else { throw ScriptWidgetSystemServiceError.unavailable } + let keys = try ScriptWidgetSystemAccessStore.readNativeValue([String].self, key: indexKey, backend: backend) ?? [] + guard keys.count <= 32, keys.allSatisfy(ScriptWidgetSystemOptions.validKey), Set(keys).count == keys.count else { throw ScriptWidgetSystemServiceError.unavailable } if method == "pending" { let alarms = try manager.alarms let rows = try keys.compactMap { key -> [String: Any]? in @@ -88,7 +88,7 @@ struct ScriptWidgetAlarmOptions { guard keys.contains(key) || keys.count < 32 else { throw ScriptWidgetSystemServiceError.limitExceeded } // Never silently replace a running alarm. Cancel explicitly first. guard try !manager.alarms.contains(where: { $0.id == id }) else { throw ScriptWidgetSystemServiceError.staleRequest } - try backend.writeValue(Array(Set(keys + [key])).sorted(), forKey: indexKey) + try ScriptWidgetSystemAccessStore.writeNativeValue(Array(Set(keys + [key])).sorted(), key: indexKey, backend: backend) guard backend.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } try beforeCommit() let box = ScriptWidgetSystemCompletionBox() diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift index 9fb79ed4..69cd9347 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendarWrites.swift @@ -39,9 +39,7 @@ enum ScriptWidgetRuntimeCalendarWrites { let ownershipKey = context.access.privateKey("ownedEvents") guard let response = ScriptWidgetStorageLock.withExclusiveAccess(container: snapshot.context.container, namespace: ownershipKey, operation: { Result { guard snapshot.context.defaults.synchronize() else { throw ScriptWidgetSystemServiceError.unavailable } - let raw = try snapshot.context.defaults.readValue(forKey: ownershipKey) - guard raw == nil || raw is [String: String] else { throw ScriptWidgetSystemServiceError.unavailable } - var owned = raw as? [String: String] ?? [:] + var owned = try ScriptWidgetSystemAccessStore.readNativeValue([String: String].self, key: ownershipKey, backend: snapshot.context.defaults) ?? [:] guard owned.count <= 128, owned.allSatisfy({ !$0.key.isEmpty && $0.key.utf8.count <= 2048 && $0.value.utf8.count <= 256 }) else { throw ScriptWidgetSystemServiceError.limitExceeded } let event: EKEvent if let id = request.eventID { @@ -67,7 +65,7 @@ enum ScriptWidgetRuntimeCalendarWrites { } guard let id = result["id"] as? String else { throw ScriptWidgetSystemServiceError.outcomeUnknown } owned[id] = request.listID - try snapshot.context.defaults.writeValue(owned, forKey: ownershipKey) + try ScriptWidgetSystemAccessStore.writeNativeValue(owned, key: ownershipKey, backend: snapshot.context.defaults) guard snapshot.context.defaults.synchronize() else { throw ScriptWidgetSystemServiceError.outcomeUnknown } return ["id": id, "calendarID": request.listID, "status": "applied", "replayed": result["replayed"] ?? false] } }) else { throw ScriptWidgetSystemServiceError.unavailable } diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift index f856ff70..a5edcec3 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeSystemServices.swift @@ -41,6 +41,16 @@ struct ScriptWidgetSystemAccessStore { var directory: String { "SystemAccess.v1/" + owner } var path: String { directory + "/grant.json" } func privateKey(_ kind: String) -> String { "ScriptWidget.SystemServices." + kind + ".v1." + owner } + static func readNativeValue(_ type: T.Type, key: String, backend: any ScriptWidgetStorageBackend) throws -> T? { + guard let raw = try backend.readValue(forKey: key) else { return nil } + guard let bytes = raw as? Data, bytes.count <= 128 * 1024 else { throw ScriptWidgetSystemServiceError.unavailable } + return try JSONDecoder().decode(type, from: bytes) + } + static func writeNativeValue(_ value: T, key: String, backend: any ScriptWidgetStorageBackend) throws { + let bytes = try JSONEncoder().encode(value) + guard bytes.count <= 128 * 1024 else { throw ScriptWidgetSystemServiceError.limitExceeded } + try backend.writeValue(bytes, forKey: key) + } func load() throws -> ScriptWidgetSystemAccessGrant { try validate() guard UUID(uuidString: owner)?.uuidString.lowercased() == owner else { throw ScriptWidgetSystemServiceError.permissionDenied } diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift index e0471aa9..7d3360b5 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageFiles.swift @@ -502,6 +502,14 @@ final class ScriptWidgetFileStorageBackend: ScriptWidgetStorageBackend { private func metadata(_ key: String) -> Bool { if Self.metadataKeys.contains(key) { return true } + let servicePrefix = "ScriptWidget.SystemServices." + if key.hasPrefix(servicePrefix) { + let parts = key.dropFirst(servicePrefix.count).split(separator: ".", omittingEmptySubsequences: false) + let kinds: Set = ["alarmKeys", "alarmReceipts", "ownedEvents", "calendarReceipts", "homeReceipts", "weatherCache"] + guard parts.count == 3, kinds.contains(String(parts[0])), parts[1] == "v1" else { return false } + let owner = String(parts[2]) + return UUID(uuidString: owner)?.uuidString.lowercased() == owner + } return ["ScriptWidget.CalendarCache.v1.", "ScriptWidget.RemindersCache.v1.", "ScriptWidget.RemindersWrites.v1.", "ScriptWidget.PhotosCache.v1."].contains { prefix in let suffix = key.dropFirst(prefix.count) return key.hasPrefix(prefix) && suffix.count == 64 && suffix.utf8.allSatisfy { (48...57).contains($0) || (97...102).contains($0) } diff --git a/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift b/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift index 0977ab9a..c6fc62f3 100644 --- a/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift @@ -111,6 +111,39 @@ final class SystemServiceTests: XCTestCase { XCTAssertFalse(store.privateKey("alarmKeys").hasPrefix(prefix)) } + func testServicePrivateStateUsesTheProductionFileBackend() throws { + let root = FileManager.default.temporaryDirectory.appendingPathComponent("SystemFileBackend-" + UUID().uuidString) + try FileManager.default.createDirectory(at: root, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: root) } + let domain = "SystemFileBackend-" + UUID().uuidString + let legacy = UserDefaults(suiteName: domain)! + defer { legacy.removePersistentDomain(forName: domain) } + let backend = try ScriptWidgetFileStorageBackend(container: root, legacy: legacy) + let owner = UUID().uuidString.lowercased() + let access = ScriptWidgetSystemAccessStore(container: root, owner: owner, validate: {}) + let kinds = ["alarmKeys", "alarmReceipts", "ownedEvents", "calendarReceipts", "homeReceipts", "weatherCache"] + for kind in kinds { + let key = access.privateKey(kind) + XCTAssertNil(try backend.readValue(forKey: key)) + try backend.writeValue(Data("{}".utf8), forKey: key) + XCTAssertEqual(try backend.readValue(forKey: key) as? Data, Data("{}".utf8)) + } + try ScriptWidgetSystemAccessStore.writeNativeValue(["focus"], key: access.privateKey("alarmKeys"), backend: backend) + try ScriptWidgetSystemAccessStore.writeNativeValue(["event": "calendar"], key: access.privateKey("ownedEvents"), backend: backend) + let reopened = try ScriptWidgetFileStorageBackend(container: root, legacy: legacy) + XCTAssertEqual(try ScriptWidgetSystemAccessStore.readNativeValue([String].self, key: access.privateKey("alarmKeys"), backend: reopened), ["focus"]) + XCTAssertEqual(try ScriptWidgetSystemAccessStore.readNativeValue([String: String].self, key: access.privateKey("ownedEvents"), backend: reopened), ["event": "calendar"]) + XCTAssertTrue(try backend.values(in: "ScriptWidgetStorage.v2:" + owner + ":").isEmpty) + for key in [access.privateKey("unknown"), "ScriptWidget.SystemServices.alarmKeys.v1.not-an-owner", "ScriptWidget.SystemServices.alarmKeys.v2." + owner] { + XCTAssertThrowsError(try backend.readValue(forKey: key)) + XCTAssertThrowsError(try backend.writeValue(Data(), forKey: key)) + } + XCTAssertThrowsError(try backend.writeValue(["focus"], forKey: access.privateKey("alarmKeys"))) + try backend.writeValue(Data("invalid".utf8), forKey: access.privateKey("alarmKeys")) + XCTAssertThrowsError(try ScriptWidgetSystemAccessStore.readNativeValue([String].self, key: access.privateKey("alarmKeys"), backend: reopened)) + XCTAssertEqual(try backend.readValue(forKey: access.privateKey("alarmKeys")) as? Data, Data("invalid".utf8)) + } + func testDailyNotificationUsesOneRepeatingSlotAndStrictLocalClock() throws { let input: [String:Any] = ["key":"daily", "title":"Read", "body":"A chapter", "daily":["hour":20,"minute":0]] let parsed=try ScriptWidgetNotificationOptions(input) From 844fb1099011934a9ea35c47fd010552c6add22c Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 21:32:45 -0700 Subject: [PATCH 08/15] Align Calendar consent text and wait for loaded onboarding layout --- .../Widget/API/ScriptWidgetRuntimeCalendar.swift | 4 ++-- Web/studio/scripts/onboarding-smoke.ts | 4 ++++ iOS/ScriptWidget/Info.plist | 4 ++-- macOS/ScriptWidgetMac/Info.plist | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift index 0fdb1098..8f5cc4d8 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift @@ -650,8 +650,8 @@ struct CalendarAccessSettingsView: View { Label(connected ? "Calendar Connected" : "Connect Calendar", systemImage: connected ? "checkmark.circle" : "calendar.badge.clock") .font(.headline) Text(connected - ? "Calendar widgets can read events. Each package must also declare Calendar access. ScriptWidget does not expose event editing." - : "Allow access to display real events. Apple requires full Calendar permission to read events; ScriptWidget uses it only for reading.") + ? "Calendar widgets can read events from selected calendars. Creating or updating events also requires calendarWrite permission, access saved for that widget, and an explicit action. Only events created by that widget can be updated." + : "Apple requires full Calendar permission to read events. ScriptWidget reads selected calendars; widgets with separately granted Calendar write access can create events and update their own events through explicit actions.") .font(.footnote) .foregroundStyle(.secondary) .fixedSize(horizontal: false, vertical: true) diff --git a/Web/studio/scripts/onboarding-smoke.ts b/Web/studio/scripts/onboarding-smoke.ts index 9262cfb5..e352514b 100644 --- a/Web/studio/scripts/onboarding-smoke.ts +++ b/Web/studio/scripts/onboarding-smoke.ts @@ -35,6 +35,10 @@ try { assert.equal(await page.evaluate("document.documentElement.scrollWidth<=innerWidth"), true); if (output) fs.writeFileSync(path.join(output, "home-mobile.png"), await page.screenshot()); await page.goto(`${server.origin}/creator/`); + // Page.navigate returns before the new document and its stylesheet are ready. + // Wait for the destination, fonts and layout before measuring mobile overflow. + await page.waitFor("!!document.getElementById('install-command') && document.readyState==='complete'"); + await page.evaluate("(async()=>{await document.fonts.ready;await new Promise(resolve=>requestAnimationFrame(()=>requestAnimationFrame(resolve)))})()"); assert.equal(await page.evaluate("document.documentElement.scrollWidth<=innerWidth"), true); // Deterministic clipboard success/denial, including exact multiline payload. await page.evaluate("window.copied=[]; Object.defineProperty(navigator,'clipboard',{configurable:true,value:{writeText:async text=>window.copied.push(text)}})"); diff --git a/iOS/ScriptWidget/Info.plist b/iOS/ScriptWidget/Info.plist index 11f8a40a..bc246071 100644 --- a/iOS/ScriptWidget/Info.plist +++ b/iOS/ScriptWidget/Info.plist @@ -29,9 +29,9 @@ NSRemindersUsageDescription Allow ScriptWidget to read reminders from lists you choose and apply reminder actions you trigger. NSCalendarsFullAccessUsageDescription - Allow ScriptWidget to read events for calendar widgets you choose. + Allow ScriptWidget to read events from calendars you choose and create or update widget-owned events through actions you trigger. NSCalendarsUsageDescription - Allow ScriptWidget to read events for calendar widgets you choose. + Allow ScriptWidget to read events from calendars you choose and create or update widget-owned events through actions you trigger. CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName diff --git a/macOS/ScriptWidgetMac/Info.plist b/macOS/ScriptWidgetMac/Info.plist index 69f7e63e..49ca6811 100644 --- a/macOS/ScriptWidgetMac/Info.plist +++ b/macOS/ScriptWidgetMac/Info.plist @@ -35,9 +35,9 @@ NSCalendarsFullAccessUsageDescription - Allow ScriptWidget to read events for calendar widgets you choose. + Allow ScriptWidget to read events from calendars you choose and create or update widget-owned events through actions you trigger. NSCalendarsUsageDescription - Allow ScriptWidget to read events for calendar widgets you choose. + Allow ScriptWidget to read events from calendars you choose and create or update widget-owned events through actions you trigger. CFBundleDisplayName ScriptWidget Studio CFBundleName From 4f4b072b10cb5d0c26f52e86bc611c2eaa8941d5 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 21:43:47 -0700 Subject: [PATCH 09/15] Keep isolated storage tests out of the real App Group --- .../Widget/API/ScriptWidgetStorageNamespaces.swift | 8 +++++++- .../ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift | 4 ++-- Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift | 4 ++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift index 96205bb6..2ba8b852 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetStorageNamespaces.swift @@ -98,7 +98,13 @@ enum ScriptWidgetStorageVolume { #if SCRIPTWIDGET_CLI return nil #else - FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.everettjf.scriptwidget") + // Isolated test/preview libraries must not depend on, or inspect, the + // user's real App Group (which unsigned Mac test hosts cannot access). + guard ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] == nil, + ProcessInfo.processInfo.environment["XCTestBundlePath"] == nil, + ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] != "1", + NSClassFromString("XCTestCase") == nil, NSClassFromString("XCTest.XCTestCase") == nil else { return nil } + return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.everettjf.scriptwidget") #endif }() diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift index c1e12681..18b31ba4 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeExecutionTests.swift @@ -2622,8 +2622,8 @@ final class NativeAPIIdentityTests: XCTestCase { } override func tearDownWithError() throws { NativeIdentityURLProtocol.set(host, handler: nil) - defaults.removePersistentDomain(forName: suite) - if let build = ScriptManager.getSandboxBuildDirectoryURL() { _ = ScriptWidgetPackageFiles.removeTree(root: build, relative: packageName) } + if let defaults, let suite { defaults.removePersistentDomain(forName: suite) } + if let packageName, let build = ScriptManager.getSandboxBuildDirectoryURL() { _ = ScriptWidgetPackageFiles.removeTree(root: build, relative: packageName) } try FileManager.default.removeItem(at: root) } private func captured(_ source: String? = nil) throws -> ScriptWidgetExecutionSnapshot { diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index 0cc03b2d..0e74e8fe 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -5068,6 +5068,10 @@ final class StorageCapacityStudyTests: XCTestCase { } final class NativeStorageFileTests: XCTestCase { + func testIsolatedTestHostDoesNotDiscoverTheUsersNativeAppGroup() { + XCTAssertNil(ScriptWidgetStorageVolume.nativeGroupRoot) + } + private var root: URL! private var owner: String! override func setUpWithError() throws { From 46a22a4b5de87e8c9a32820ca01bda7f380f7e6b Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 22:16:47 -0700 Subject: [PATCH 10/15] Reduce dense widget rendering memory and await published reloads --- .../ScriptWidgetElementTagShape.swift | 83 ++++++++++++++++++ .../ScriptWidgetElementTagStack.swift | 5 ++ .../RuntimeUnitTests.swift | 84 ++++++++++++++++++- 3 files changed, 170 insertions(+), 2 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift index 49f08f3a..4adf1322 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift @@ -74,7 +74,52 @@ extension Shape { class ScriptWidgetElementTagRectangle { + struct CompactStyle { + let width: CGFloat + let height: CGFloat + let color: Color + let corner: CGFloat? + let clippingCorner: CGFloat? + + @ViewBuilder private var framedShape: some View { + if let corner { + RoundedRectangle(cornerRadius: corner).foregroundColor(color) + .frame(width: width, height: height) + } else { + Rectangle().foregroundColor(color).frame(width: width, height: height) + } + } + @ViewBuilder var view: some View { + // Preserve the existing shape + outer corner clip, including the + // distinction between string and numeric corner properties. + if let clippingCorner { framedShape.cornerRadius(clippingCorner).widgetAccentable(false) } + else { framedShape.widgetAccentable(false) } + } + } + + static func compactStyle(_ element: ScriptWidgetRuntimeElement, debugMode: Bool) -> CompactStyle? { + // Dense heatmaps otherwise build the full conditional modifier chain + // for every cell, exhausting WidgetKit's 30 MB process limit. + let allowed: Set = ["frame", "color", "corner"] + guard !debugMode, Set(element.getProps().keys).isSubset(of: allowed), + let value = element.getPropString("color"), + let color = ScriptWidgetAttributeColor(value).color else { return nil } + let frame = ScriptWidgetAttributeFrameModifier(element) + guard frame.frameMode == .width_height_alignment, + frame.width.isFinite, frame.height.isFinite, frame.width >= 0, frame.height >= 0 else { return nil } + let corner = element.getPropString("corner").flatMap { Double($0) }.map { CGFloat($0) } + if let corner, !corner.isFinite || corner < 0 { return nil } + let clippingCorner = element.getPropDouble("corner").map { CGFloat($0) } + if let clippingCorner, !clippingCorner.isFinite || clippingCorner < 0 { return nil } + return .init(width: frame.width, height: frame.height, color: color, corner: corner, clippingCorner: clippingCorner) + } + static func buildView(_ element: ScriptWidgetRuntimeElement, _ context: ScriptWidgetElementContext) -> AnyView { + if let style = compactStyle(element, debugMode: context.debugMode) { return AnyView(style.view) } + return buildGeneralView(element, context) + } + + static func buildGeneralView(_ element: ScriptWidgetRuntimeElement, _ context: ScriptWidgetElementContext) -> AnyView { var cornerRadius: CGFloat? if let cornerValue = element.getPropString("corner") { @@ -191,3 +236,41 @@ struct ScriptWidgetElementTagShape_Previews: PreviewProvider { ScriptWidgetElementTagShape() } } + +/// Flatten only noninteractive, fixed-size solid cells. Other stacks retain +/// their normal view hierarchy and all authored modifiers. +struct ScriptWidgetRectangleColumn: View { + let cells: [ScriptWidgetElementTagRectangle.CompactStyle] + let spacing: CGFloat + var height: CGFloat { cells.reduce(0) { $0 + $1.height } + CGFloat(cells.count - 1) * spacing } + + static func make(_ element: ScriptWidgetRuntimeElement, context: ScriptWidgetElementContext) -> Self? { + guard !context.debugMode, Set(element.getProps().keys).isSubset(of: [AnyHashable("spacing")]), + let spacing = element.getPropDouble("spacing"), spacing.isFinite, spacing >= 0 else { return nil } + let children = element.childrenAsElements() + guard (2...16).contains(children.count), children.allSatisfy({ $0.tagAsString() == "rect" }) else { return nil } + let cells = children.compactMap { ScriptWidgetElementTagRectangle.compactStyle($0, debugMode: false) } + guard cells.count == children.count, let first = cells.first, + first.width > 0, first.width <= 32, cells.allSatisfy({ $0.width == first.width && $0.height > 0 && $0.height <= 32 }) else { return nil } + let result = Self(cells: cells, spacing: CGFloat(spacing)) + return result.height <= 1024 ? result : nil + } + + var body: some View { + Canvas { context, _ in + var y: CGFloat = 0 + for cell in cells { + let rect = CGRect(x: 0, y: y, width: cell.width, height: cell.height) + var drawing = context + if let corner = cell.clippingCorner { + drawing.clip(to: RoundedRectangle(cornerRadius: corner).path(in: rect)) + } + let path = cell.corner.map { RoundedRectangle(cornerRadius: $0).path(in: rect) } ?? Path(rect) + drawing.fill(path, with: .color(cell.color)) + y += cell.height + spacing + } + } + .frame(width: cells[0].width, height: height) + .widgetAccentable(false) + } +} diff --git a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift index 604792de..1a3d8523 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift @@ -12,6 +12,11 @@ class ScriptWidgetElementTagStack { ///-------------------------------------------------------------------------------------------------------- static func buildViewVStack(_ element: ScriptWidgetRuntimeElement, _ context: ScriptWidgetElementContext) -> AnyView { + if let column = ScriptWidgetRectangleColumn.make(element, context: context) { return AnyView(column) } + return buildGeneralViewVStack(element, context) + } + + static func buildGeneralViewVStack(_ element: ScriptWidgetRuntimeElement, _ context: ScriptWidgetElementContext) -> AnyView { return AnyView(Self.buildVStack( element: element, context: context diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index 0e74e8fe..5f014711 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -1658,6 +1658,20 @@ final class PackageListRefreshTests: XCTestCase { #else let store = ScriptWidgetHomeViewDataObject(packages: listing) #endif + defer { listing.allowFirstToFinish.signal() } + let latestPublished = expectation(description: "The latest reload is published") + let stalePublished = expectation(description: "The stale reload is discarded") + stalePublished.isInverted = true +#if os(macOS) + let publisher = store.$scriptModels +#else + let publisher = store.$models +#endif + let subscription = publisher.sink { items in + if items.map(\.name) == ["Latest"] { latestPublished.fulfill() } + if items.map(\.name) == ["Stale"] { stalePublished.fulfill() } + } + defer { subscription.cancel() } XCTAssertEqual(listing.firstStarted.wait(timeout: .now() + 2), .success) #if os(macOS) store.reloadUserScripts() @@ -1665,7 +1679,7 @@ final class PackageListRefreshTests: XCTestCase { store.reload() #endif XCTAssertEqual(listing.secondFinished.wait(timeout: .now() + 2), .success) - RunLoop.main.run(until: Date().addingTimeInterval(0.1)) + wait(for: [latestPublished], timeout: 5) #if os(macOS) XCTAssertEqual(store.scriptModels.map(\.name), ["Latest"]) #else @@ -1673,7 +1687,7 @@ final class PackageListRefreshTests: XCTestCase { #endif listing.allowFirstToFinish.signal() - RunLoop.main.run(until: Date().addingTimeInterval(0.1)) + wait(for: [stalePublished], timeout: 0.5) #if os(macOS) XCTAssertEqual(store.scriptModels.map(\.name), ["Latest"]) #else @@ -6650,3 +6664,69 @@ final class ScriptWidgetActionHostTests: XCTestCase { } } #endif + +final class CompactRectangleTests: XCTestCase { + func testOnlyFixedSolidCellsWithoutOtherModifiersUseTheCompactPath() { + let base: [AnyHashable: Any] = ["frame": "7,7", "color": "#239A3B", "corner": "1.75"] + func style(_ props: [AnyHashable: Any], debug: Bool = false) -> ScriptWidgetElementTagRectangle.CompactStyle? { + ScriptWidgetElementTagRectangle.compactStyle(.init(tagString: "rect", props: props, children: nil), debugMode: debug) + } + XCTAssertNotNil(style(base)) + XCTAssertNil(style(base, debug: true)) + for key in ["padding", "background", "opacity", "trim", "stroke", "shadow", "linkurl", "widgetAccentable", "animation", "unknown"] { + var props = base; props[key] = "1"; XCTAssertNil(style(props), key) + } + for value in ["max", "7,max", "-1,7", "nan,7"] { + var props = base; props["frame"] = value; XCTAssertNil(style(props), value) + } + } + + @MainActor func testCompactCellsMatchGeneralRendererPixelsInBothAppearances() throws { + let package = ScriptWidgetPackage(path: FileManager.default.temporaryDirectory, readonly: true) + let context = ScriptWidgetElementContext(runtime: nil, debugMode: false, scriptName: "Cell fixture", scriptParameter: "", package: package) + func pixels(_ view: AnyView, _ scheme: ColorScheme) throws -> [UInt8] { + let renderer = ImageRenderer(content: view.frame(width: 32, height: 128).background(Color.white).environment(\.colorScheme, scheme)) + renderer.scale = 2 + let image = try XCTUnwrap(renderer.cgImage) + var bytes = [UInt8](repeating: 0, count: image.width * image.height * 4) + let bitmap = try XCTUnwrap(CGContext(data: &bytes, width: image.width, height: image.height, bitsPerComponent: 8, bytesPerRow: image.width * 4, space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)) + bitmap.draw(image, in: CGRect(x: 0, y: 0, width: image.width, height: image.height)) + return bytes + } + let children = (0..<7).map { index in ScriptWidgetRuntimeElement(tagString: "rect", props: ["frame": "7,7", "color": index % 3 == 0 ? "red,0.5" : index % 3 == 1 ? "clear" : "#239A3B", "corner": index % 2 == 0 ? "1.75" as Any : 1.75], children: nil) } + let column = ScriptWidgetRuntimeElement(tagString: "vstack", props: ["spacing": 3.0], children: children) + XCTAssertNotNil(ScriptWidgetRectangleColumn.make(column, context: context)) + for spacing in [-1.0, Double.nan, Double.infinity, 200.0] { + let invalid = ScriptWidgetRuntimeElement(tagString: "vstack", props: ["spacing": spacing], children: children) + XCTAssertNil(ScriptWidgetRectangleColumn.make(invalid, context: context)) + } + let decorated = ScriptWidgetRuntimeElement(tagString: "vstack", props: ["spacing": 3.0, "opacity": 0.5], children: children) + XCTAssertNil(ScriptWidgetRectangleColumn.make(decorated, context: context)) + let oversized = ScriptWidgetRuntimeElement(tagString: "rect", props: ["frame": "33,7", "color": "red"], children: nil) + let mixed = ScriptWidgetRuntimeElement(tagString: "vstack", props: ["spacing": 3.0], children: [children[0], oversized]) + XCTAssertNil(ScriptWidgetRectangleColumn.make(mixed, context: context)) + var linked = children[0].getProps(); linked["linkurl"] = "https://example.com"; children[0].props = linked + XCTAssertNil(ScriptWidgetRectangleColumn.make(column, context: context)) + linked.removeValue(forKey: "linkurl"); children[0].props = linked + for scheme in [ColorScheme.light, .dark] { + let flat = try pixels(ScriptWidgetElementTagStack.buildViewVStack(column, context), scheme) + let stacked = try pixels(ScriptWidgetElementTagStack.buildGeneralViewVStack(column, context), scheme) + let differences = zip(flat, stacked).filter { $0 != $1 }.count + let maximumDelta = zip(flat, stacked).map { abs(Int($0) - Int($1)) }.max() ?? 0 + XCTAssertEqual(differences, 0, "column \(scheme), maximum channel delta=\(maximumDelta)") + for color in ["#239A3B", "clear", "red", "red,0.5"] { + for corner in [nil, "1.75", 1.75] as [Any?] { + var props: [AnyHashable: Any] = ["frame": "7,11", "color": color] + props["corner"] = corner + let element = ScriptWidgetRuntimeElement(tagString: "rect", props: props, children: nil) + XCTAssertNotNil(ScriptWidgetElementTagRectangle.compactStyle(element, debugMode: false)) + let compact = try pixels(ScriptWidgetElementTagRectangle.buildView(element, context), scheme) + let general = try pixels(ScriptWidgetElementTagRectangle.buildGeneralView(element, context), scheme) + let differences = zip(compact, general).filter { $0 != $1 }.count + let maximumDelta = zip(compact, general).map { abs(Int($0) - Int($1)) }.max() ?? 0 + XCTAssertEqual(differences, 0, "\(scheme) \(color) corner=\(String(describing: corner)), maximum channel delta=\(maximumDelta)") + } + } + } + } +} From cab716219516db2e4a26850c5d4c55089e2f0c56 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 22:17:30 -0700 Subject: [PATCH 11/15] Keep column renderer with stack coverage metadata --- .../ScriptWidgetElementTagShape.swift | 38 ------------------- .../ScriptWidgetElementTagStack.swift | 38 +++++++++++++++++++ 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift index 4adf1322..a50aa20d 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagShape.swift @@ -236,41 +236,3 @@ struct ScriptWidgetElementTagShape_Previews: PreviewProvider { ScriptWidgetElementTagShape() } } - -/// Flatten only noninteractive, fixed-size solid cells. Other stacks retain -/// their normal view hierarchy and all authored modifiers. -struct ScriptWidgetRectangleColumn: View { - let cells: [ScriptWidgetElementTagRectangle.CompactStyle] - let spacing: CGFloat - var height: CGFloat { cells.reduce(0) { $0 + $1.height } + CGFloat(cells.count - 1) * spacing } - - static func make(_ element: ScriptWidgetRuntimeElement, context: ScriptWidgetElementContext) -> Self? { - guard !context.debugMode, Set(element.getProps().keys).isSubset(of: [AnyHashable("spacing")]), - let spacing = element.getPropDouble("spacing"), spacing.isFinite, spacing >= 0 else { return nil } - let children = element.childrenAsElements() - guard (2...16).contains(children.count), children.allSatisfy({ $0.tagAsString() == "rect" }) else { return nil } - let cells = children.compactMap { ScriptWidgetElementTagRectangle.compactStyle($0, debugMode: false) } - guard cells.count == children.count, let first = cells.first, - first.width > 0, first.width <= 32, cells.allSatisfy({ $0.width == first.width && $0.height > 0 && $0.height <= 32 }) else { return nil } - let result = Self(cells: cells, spacing: CGFloat(spacing)) - return result.height <= 1024 ? result : nil - } - - var body: some View { - Canvas { context, _ in - var y: CGFloat = 0 - for cell in cells { - let rect = CGRect(x: 0, y: y, width: cell.width, height: cell.height) - var drawing = context - if let corner = cell.clippingCorner { - drawing.clip(to: RoundedRectangle(cornerRadius: corner).path(in: rect)) - } - let path = cell.corner.map { RoundedRectangle(cornerRadius: $0).path(in: rect) } ?? Path(rect) - drawing.fill(path, with: .color(cell.color)) - y += cell.height + spacing - } - } - .frame(width: cells[0].width, height: height) - .widgetAccentable(false) - } -} diff --git a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift index 1a3d8523..4b3fade0 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Component/Elements/ScriptWidgetElementTagStack.swift @@ -76,3 +76,41 @@ class ScriptWidgetElementTagStack { return CGFloat(spacing) } } + +/// Flatten only noninteractive, fixed-size solid cells. Other stacks retain +/// their normal view hierarchy and all authored modifiers. +struct ScriptWidgetRectangleColumn: View { + let cells: [ScriptWidgetElementTagRectangle.CompactStyle] + let spacing: CGFloat + var height: CGFloat { cells.reduce(0) { $0 + $1.height } + CGFloat(cells.count - 1) * spacing } + + static func make(_ element: ScriptWidgetRuntimeElement, context: ScriptWidgetElementContext) -> Self? { + guard !context.debugMode, Set(element.getProps().keys).isSubset(of: [AnyHashable("spacing")]), + let spacing = element.getPropDouble("spacing"), spacing.isFinite, spacing >= 0 else { return nil } + let children = element.childrenAsElements() + guard (2...16).contains(children.count), children.allSatisfy({ $0.tagAsString() == "rect" }) else { return nil } + let cells = children.compactMap { ScriptWidgetElementTagRectangle.compactStyle($0, debugMode: false) } + guard cells.count == children.count, let first = cells.first, + first.width > 0, first.width <= 32, cells.allSatisfy({ $0.width == first.width && $0.height > 0 && $0.height <= 32 }) else { return nil } + let result = Self(cells: cells, spacing: CGFloat(spacing)) + return result.height <= 1024 ? result : nil + } + + var body: some View { + Canvas { context, _ in + var y: CGFloat = 0 + for cell in cells { + let rect = CGRect(x: 0, y: y, width: cell.width, height: cell.height) + var drawing = context + if let corner = cell.clippingCorner { + drawing.clip(to: RoundedRectangle(cornerRadius: corner).path(in: rect)) + } + let path = cell.corner.map { RoundedRectangle(cornerRadius: $0).path(in: rect) } ?? Path(rect) + drawing.fill(path, with: .color(cell.color)) + y += cell.height + spacing + } + } + .frame(width: cells[0].width, height: height) + .widgetAccentable(false) + } +} From ad5d0a77e1fa38866cc8c81375bf44c6bbda16e4 Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 23:24:11 -0700 Subject: [PATCH 12/15] Adapt widget authoring layouts for resizable iPhone displays Bound preview images to their grid cells, resize image resources with the available view width, and keep photo import controls separate in short windows. Preserve hardware screen API semantics and existing storage. Prepare 27.1.6 (27017) for TestFlight. --- .../Widget/Runtime/ScriptWidgetAppState.swift | 9 -- .../RuntimeUnitTests.swift | 77 +++++++++++++++++ iOS/ScriptWidget.xcodeproj/project.pbxproj | 24 +++--- iOS/ScriptWidget/App/APIs/APIsHomeView.swift | 20 +---- iOS/ScriptWidget/App/AppDelegate.swift | 2 +- .../App/Components/ComponentsHomeView.swift | 20 +---- .../App/Scripts/CreateGuideView.swift | 11 ++- .../App/Scripts/ImageListView.swift | 86 +++++++++---------- iOS/ScriptWidget/Data/ScreenData.swift | 6 +- .../en.lproj/PhotoPicker.storyboard | 9 +- .../ScriptWidgetMac.xcodeproj/project.pbxproj | 16 ++-- 11 files changed, 163 insertions(+), 117 deletions(-) diff --git a/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetAppState.swift b/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetAppState.swift index dcbdc2d2..5c445131 100644 --- a/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetAppState.swift +++ b/Shared/ScriptWidgetRuntime/Widget/Runtime/ScriptWidgetAppState.swift @@ -15,15 +15,6 @@ import UIKit class ScriptWidgetAppState { -#if os(macOS) - let screenBounds = NSScreen.main!.frame - let screenScale = 0.5 -#else - let screenBounds = UIScreen.main.bounds - let screenScale = UIScreen.main.scale -#endif - - init() { #if os(macOS) #else diff --git a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift index 5f014711..022db798 100644 --- a/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift +++ b/Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift @@ -6730,3 +6730,80 @@ final class CompactRectangleTests: XCTestCase { } } } + +#if os(iOS) +final class TemplateCardLayoutTests: XCTestCase { + @MainActor func testPhotoPickerControlsAndPreviewFitResizableScenes() throws { + let controller = try XCTUnwrap(UIStoryboard(name: "PhotoPicker", bundle: .main).instantiateViewController(identifier: "PhotoPickerViewController") as? PhotoPickerViewController) + controller.loadViewIfNeeded() + let view = try XCTUnwrap(controller.view) + let buttons = view.subviews.compactMap { $0 as? UIButton } + let save = try XCTUnwrap(buttons.first { $0.currentTitle == "Save" }) + let options = buttons.filter { ["Inline", "Circular", "Rectangular"].contains($0.currentTitle ?? "") } + XCTAssertEqual(options.count, 3) + for size in [CGSize(width: 375, height: 600), CGSize(width: 382, height: 626), CGSize(width: 653, height: 641)] { + view.frame = CGRect(origin: .zero, size: size) + view.setNeedsLayout() + view.layoutIfNeeded() + for option in options { + XCTAssertLessThanOrEqual(option.frame.maxY + 12, save.frame.minY + 0.5, "\(option.currentTitle ?? "Option") overlaps Save at \(size).") + } + let imageView = try XCTUnwrap(controller.imageView) + let container = try XCTUnwrap(imageView.superview) + XCTAssertGreaterThan(imageView.frame.width, 0) + XCTAssertGreaterThan(imageView.frame.height, 0) + XCTAssertGreaterThanOrEqual(imageView.frame.minX, -0.5, "\(size)") + XCTAssertGreaterThanOrEqual(imageView.frame.minY, -0.5, "\(size)") + XCTAssertLessThanOrEqual(imageView.frame.maxX, container.bounds.width + 0.5, "\(size)") + XCTAssertLessThanOrEqual(imageView.frame.maxY, container.bounds.height + 0.5, "\(size)") + } + } + + @MainActor func testWidePreviewStaysWithinTwoColumnCards() throws { + let directory = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString, isDirectory: true) + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: directory) } + let format = UIGraphicsImageRendererFormat(); format.scale = 1 + let preview = UIGraphicsImageRenderer(size: CGSize(width: 600, height: 100), format: format).image { context in + UIColor.red.setFill() + context.fill(CGRect(x: 0, y: 0, width: 600, height: 100)) + } + try XCTUnwrap(preview.pngData()).write(to: directory.appendingPathComponent("preview.png")) + let model = ScriptModel(package: ScriptWidgetPackage(path: directory, readonly: true)) + XCTAssertNotNil(model.package.previewImageURL()) + let cards = HStack(alignment: .top, spacing: 12) { + TemplateCardView(model: model).frame(width: 160) + TemplateCardView(model: model).frame(width: 160) + } + .padding(16) + .background(Color.white) + .environment(\.colorScheme, .light) + let renderer = ImageRenderer(content: cards); renderer.scale = 1 + let image = try XCTUnwrap(renderer.cgImage) + XCTAssertEqual(image.width, 364) + var bytes = [UInt8](repeating: 0, count: image.width * image.height * 4) + let bitmap = try XCTUnwrap(CGContext(data: &bytes, width: image.width, height: image.height, bitsPerComponent: 8, bytesPerRow: image.width * 4, space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)) + bitmap.draw(image, in: CGRect(x: 0, y: 0, width: image.width, height: image.height)) + var redPixels = 0 + for y in 0.. 240 && bytes[offset + 1] < 15 && bytes[offset + 2] < 15 { redPixels += 1 } + } + } + XCTAssertGreaterThan(redPixels, 100, "The actual package image must render, rather than only a placeholder.") + for (name, columns) in [("left margin", 0..<12), ("column gap", 179..<185), ("right margin", 352..<364)] { + var coveredPixels = 0 + for y in 0..= 250 && bytes[offset + 1] >= 250 && bytes[offset + 2] >= 250 + if !transparent && !white { coveredPixels += 1 } + } + } + XCTAssertEqual(coveredPixels, 0, "Preview content escaped into the \(name).") + } + } +} +#endif diff --git a/iOS/ScriptWidget.xcodeproj/project.pbxproj b/iOS/ScriptWidget.xcodeproj/project.pbxproj index fbd2c158..21859650 100644 --- a/iOS/ScriptWidget.xcodeproj/project.pbxproj +++ b/iOS/ScriptWidget.xcodeproj/project.pbxproj @@ -2560,7 +2560,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2572,7 +2572,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2593,7 +2593,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2604,7 +2604,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2621,7 +2621,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2630,7 +2630,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; OTHER_SWIFT_FLAGS = "-D IsWidgetTarget"; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.widget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2647,7 +2647,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2656,7 +2656,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; OTHER_SWIFT_FLAGS = "-D IsWidgetTarget"; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.widget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2672,7 +2672,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; @@ -2681,7 +2681,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2696,7 +2696,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; @@ -2705,7 +2705,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/iOS/ScriptWidget/App/APIs/APIsHomeView.swift b/iOS/ScriptWidget/App/APIs/APIsHomeView.swift index 526bdd66..d594f945 100644 --- a/iOS/ScriptWidget/App/APIs/APIsHomeView.swift +++ b/iOS/ScriptWidget/App/APIs/APIsHomeView.swift @@ -8,8 +8,8 @@ import SwiftUI struct APIsHomeView: View { - @State private var tabBar: UITabBar! = nil - private var idiom : UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom } + @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @State private var isTabBarVisible = true var body: some View { NavigationStack { @@ -19,23 +19,11 @@ struct APIsHomeView: View { showTabBar(true) } } - .background(TabBarAccessor { tabbar in // << here !! - if idiom != .pad { - self.tabBar = tabbar - } - }) + .toolbar(horizontalSizeClass == .regular || isTabBarVisible ? .visible : .hidden, for: .tabBar) } func showTabBar(_ visible: Bool) { - guard let tabBar = tabBar else { - return - } - - if visible { - tabBar.isHidden = false - } else { - tabBar.isHidden = true - } + isTabBarVisible = visible } } diff --git a/iOS/ScriptWidget/App/AppDelegate.swift b/iOS/ScriptWidget/App/AppDelegate.swift index 8aff7569..d9fd05df 100644 --- a/iOS/ScriptWidget/App/AppDelegate.swift +++ b/iOS/ScriptWidget/App/AppDelegate.swift @@ -12,7 +12,7 @@ class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { - let _ = sharedAppState.screenBounds + let _ = sharedAppState #if !DEBUG DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1)) { diff --git a/iOS/ScriptWidget/App/Components/ComponentsHomeView.swift b/iOS/ScriptWidget/App/Components/ComponentsHomeView.swift index dad73d03..6d1314df 100644 --- a/iOS/ScriptWidget/App/Components/ComponentsHomeView.swift +++ b/iOS/ScriptWidget/App/Components/ComponentsHomeView.swift @@ -8,8 +8,8 @@ import SwiftUI struct ComponentsHomeView: View { - @State private var tabBar: UITabBar! = nil - private var idiom : UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom } + @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @State private var isTabBarVisible = true var body: some View { NavigationStack { @@ -22,23 +22,11 @@ struct ComponentsHomeView: View { showTabBar(true) } } - .background(TabBarAccessor { tabbar in // << here !! - if idiom != .pad { - self.tabBar = tabbar - } - }) + .toolbar(horizontalSizeClass == .regular || isTabBarVisible ? .visible : .hidden, for: .tabBar) } func showTabBar(_ visible: Bool) { - guard let tabBar = tabBar else { - return - } - - if visible { - tabBar.isHidden = false - } else { - tabBar.isHidden = true - } + isTabBarVisible = visible } } diff --git a/iOS/ScriptWidget/App/Scripts/CreateGuideView.swift b/iOS/ScriptWidget/App/Scripts/CreateGuideView.swift index e1d217b2..674226d3 100644 --- a/iOS/ScriptWidget/App/Scripts/CreateGuideView.swift +++ b/iOS/ScriptWidget/App/Scripts/CreateGuideView.swift @@ -327,10 +327,13 @@ struct TemplateCardView: View { if let url = model.package.previewImageURL(), let uiImage = UIImage(contentsOfFile: url.path) { - Image(uiImage: uiImage) - .resizable() - .scaledToFill() - .clipShape(RoundedRectangle(cornerRadius: 10)) + GeometryReader { proxy in + Image(uiImage: uiImage) + .resizable() + .scaledToFit() + .frame(width: proxy.size.width, height: proxy.size.height) + .clipShape(RoundedRectangle(cornerRadius: 10)) + } } else { Image(systemName: model.iconSystemName) .font(.system(size: 34, weight: .regular)) diff --git a/iOS/ScriptWidget/App/Scripts/ImageListView.swift b/iOS/ScriptWidget/App/Scripts/ImageListView.swift index 38620301..6e76f901 100644 --- a/iOS/ScriptWidget/App/Scripts/ImageListView.swift +++ b/iOS/ScriptWidget/App/Scripts/ImageListView.swift @@ -51,66 +51,66 @@ struct ImageListView: View { @State private var isAddingImage: Bool = false @StateObject private var dataObject: ImageDataObject - let size: CGFloat - let columns: [GridItem] let title: String init(model: ScriptModel) { - // Cap thumbnail size so the grid stays well-proportioned on iPad / wide - // multitasking windows instead of rendering a few oversized images. - self.size = min(screenShortLength / 3 - 10, 110) - self.columns = [ - GridItem(.adaptive(minimum: size), spacing: 5), - ] _dataObject = StateObject(wrappedValue: ImageDataObject(model: model)) self.title = "Images" } var body: some View { - ScrollView { - LazyVGrid(columns: columns, spacing: 16) { - if dataObject.images.isEmpty { - VStack(spacing: 10) { - Image(systemName: "photo.on.rectangle.angled") - .font(.largeTitle) - Text("No images yet") - .font(.headline) - Text("Add an image to use it from your widget script.") - .font(.caption) - .multilineTextAlignment(.center) + GeometryReader { proxy in + // Use this view's available width so thumbnails follow scene resizing. + let size = min(max((proxy.size.width - 32) / 3 - 10, 1), 110) + let columns = [GridItem(.adaptive(minimum: size), spacing: 5)] + ScrollView { + LazyVGrid(columns: columns, spacing: 16) { + if dataObject.images.isEmpty { + VStack(spacing: 10) { + Image(systemName: "photo.on.rectangle.angled") + .font(.largeTitle) + Text("No images yet") + .font(.headline) + Text("Add an image to use it from your widget script.") + .font(.caption) + .multilineTextAlignment(.center) + } + .foregroundStyle(.secondary) + .frame(maxWidth: .infinity) + .padding(.vertical, 60) } - .foregroundStyle(.secondary) - .frame(maxWidth: .infinity) - .padding(.vertical, 60) - } - ForEach(dataObject.images) { item in - Button(action: { - self.previewingImage = item - }) { + ForEach(dataObject.images) { item in + Button(action: { + self.previewingImage = item + }) { - VStack(alignment: .leading, spacing: 8) { - WebImage(url: item.path) - .placeholder { - RoundedRectangle(cornerRadius: 12) - .fill(.quaternary) + VStack(alignment: .leading, spacing: 8) { + GeometryReader { thumbnail in + WebImage(url: item.path) + .placeholder { + RoundedRectangle(cornerRadius: 12) + .fill(.quaternary) + } + .resizable() + .aspectRatio(contentMode: .fill) + .frame(width: thumbnail.size.width, height: size) + .clipped() } - .resizable() - .aspectRatio(contentMode: .fill) .frame(height: size) - .frame(maxWidth: .infinity) .clipShape(.rect(cornerRadius: 12)) - Text(item.name) - .font(.caption.weight(.medium)) - .foregroundStyle(.primary) - .lineLimit(1) + Text(item.name) + .font(.caption.weight(.medium)) + .foregroundStyle(.primary) + .lineLimit(1) + } + .padding(10) + .background(Color(.secondarySystemGroupedBackground), in: .rect(cornerRadius: 16)) } - .padding(10) - .background(Color(.secondarySystemGroupedBackground), in: .rect(cornerRadius: 16)) + .buttonStyle(.plain) } - .buttonStyle(.plain) } + .padding() } - .padding() } .background(Color(.systemGroupedBackground)) .navigationTitle(title) diff --git a/iOS/ScriptWidget/Data/ScreenData.swift b/iOS/ScriptWidget/Data/ScreenData.swift index e6b6ef72..783af5b3 100644 --- a/iOS/ScriptWidget/Data/ScreenData.swift +++ b/iOS/ScriptWidget/Data/ScreenData.swift @@ -5,8 +5,4 @@ // Created by everettjf on 2021/2/14. // -import SwiftUI - -let screenWidth = UIScreen.main.bounds.width -let screenHeight = UIScreen.main.bounds.height -let screenShortLength = screenWidth > screenHeight ? screenHeight : screenWidth +// Layout reads local GeometryReader sizes instead of process-wide screen constants. diff --git a/iOS/ScriptWidget/View/PhotoPicker/en.lproj/PhotoPicker.storyboard b/iOS/ScriptWidget/View/PhotoPicker/en.lproj/PhotoPicker.storyboard index c6522d46..5e4dfc77 100644 --- a/iOS/ScriptWidget/View/PhotoPicker/en.lproj/PhotoPicker.storyboard +++ b/iOS/ScriptWidget/View/PhotoPicker/en.lproj/PhotoPicker.storyboard @@ -133,15 +133,17 @@ - - + + - + + + @@ -237,6 +239,7 @@ + diff --git a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj index acd30a79..3570744a 100644 --- a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj +++ b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj @@ -1766,7 +1766,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1786,7 +1786,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = ScriptWidget; REGISTER_APP_GROUPS = YES; @@ -1804,7 +1804,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1823,7 +1823,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = ScriptWidget; REGISTER_APP_GROUPS = YES; @@ -1840,7 +1840,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1856,7 +1856,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.macwidget; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; @@ -1874,7 +1874,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27016; + CURRENT_PROJECT_VERSION = 27017; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1890,7 +1890,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.5; + MARKETING_VERSION = 27.1.6; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.macwidget; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; From 841a62e43ae7b083a4b18f13f37fe49d22f244f5 Mon Sep 17 00:00:00 2001 From: Everett Date: Tue, 27 Oct 2026 07:44:26 -0700 Subject: [PATCH 13/15] Clarify iCloud store sharing and prepare build 27018 --- Editor/editorfe/src/scriptWidgetAPI.js | 2 +- .../Widget/API/ScriptWidgetRuntimeCloudJSON.swift | 7 +++++++ docs/examples/icloud-json-note/main.jsx | 4 ++++ docs/icloud-json-api.md | 10 ++++++++++ docs/scriptwidget-runtime-api.md | 2 +- iOS/ScriptWidget.xcodeproj/project.pbxproj | 12 ++++++------ .../assets/{index-DIlVDbPO.js => index-ijvFWH5h.js} | 2 +- .../MirrorEditor/StudioEditor.bundle/index.html | 2 +- macOS/ScriptWidgetMac.xcodeproj/project.pbxproj | 8 ++++---- .../assets/{index-DIlVDbPO.js => index-ijvFWH5h.js} | 2 +- macOS/ScriptWidgetMac/StudioEditor.bundle/index.html | 2 +- 11 files changed, 37 insertions(+), 16 deletions(-) rename iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/{index-DIlVDbPO.js => index-ijvFWH5h.js} (99%) rename macOS/ScriptWidgetMac/StudioEditor.bundle/assets/{index-DIlVDbPO.js => index-ijvFWH5h.js} (99%) diff --git a/Editor/editorfe/src/scriptWidgetAPI.js b/Editor/editorfe/src/scriptWidgetAPI.js index 19e53d0f..11e4708e 100644 --- a/Editor/editorfe/src/scriptWidgetAPI.js +++ b/Editor/editorfe/src/scriptWidgetAPI.js @@ -76,7 +76,7 @@ export const scriptWidgetAPI = { "$icloud.writeJSON": {"documentation": "Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.", "arguments": ["name", "value", "expectedRevision"], "returns": "Promise", "minimumRuntimeVersion": "1.5"}, "$icloud.resolveJSON": {"documentation": "Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.", "arguments": ["name", "value", "expectedRevision"], "returns": "Promise", "minimumRuntimeVersion": "1.5"}, "$icloud.sync": {"documentation": "Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.", "arguments": [], "returns": "Promise", "minimumRuntimeVersion": "1.5"}, - "$icloud.status": {"documentation": "Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.", "arguments": [], "returns": "Promise", "minimumRuntimeVersion": "1.5"}, + "$icloud.status": {"documentation": "Read native connection state. In the app, explicitly connect packages to separate stores for isolation or the same store ID to share JSON documents. Scripts cannot choose store IDs. Sync is eventual; local $storage is not migrated. Web uses preview mocks.", "arguments": [], "returns": "Promise", "minimumRuntimeVersion": "1.5"}, "$file.exists": { "documentation": "Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.", "arguments": ["path"], "returns": "boolean", "minimumRuntimeVersion": "1.3" }, "$file.read": { "documentation": "Read package-relative UTF-8 text. Missing or unavailable files return an empty string.", "arguments": ["path"], "returns": "string" }, "$file.readJSON": { "documentation": "Read a package-relative JSON object.", "arguments": ["path"], "returns": "json" }, diff --git a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCloudJSON.swift b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCloudJSON.swift index 66062553..4db5d21a 100644 --- a/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCloudJSON.swift +++ b/Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCloudJSON.swift @@ -2,6 +2,13 @@ import Foundation import JavaScriptCore import WidgetKit +/// JSON documents belong to the store explicitly connected in the native app. +/// Each installed package has its own grant; users may connect several packages +/// to the same store to share documents, or separate stores to isolate them. +/// JavaScript supplies only a document name, never a store ID or arbitrary path. +/// Home Screen instances of one package share its connection. Cross-device +/// exchange is eventual and can retain conflicts; $storage stays local and is +/// never automatically migrated by connecting a cloud store. @objc protocol ScriptWidgetRuntimeCloudJSONExports: JSExport { static func readJSON(_ name: String) -> ScriptWidgetRuntimePromise static func writeJSON(_ name: String, _ value: [String: Any], _ expectedRevision: String) -> ScriptWidgetRuntimePromise diff --git a/docs/examples/icloud-json-note/main.jsx b/docs/examples/icloud-json-note/main.jsx index bd48479b..1b2a3693 100644 --- a/docs/examples/icloud-json-note/main.jsx +++ b/docs/examples/icloud-json-note/main.jsx @@ -1,4 +1,8 @@ // Connect this installed package through the native "iCloud Data" menu first. +// Choose a new store for isolation, or explicitly connect another widget to +// the same store ID to share note.json. JS cannot select that ID or a path. +// Shared widgets must agree on the schema and handle eventual-sync conflicts. +// Connecting does not migrate existing local $storage records. // Writes are actions only; normal render never creates a cloud record. async function syncNote() { await $icloud.sync(); } async function saveNote() { diff --git a/docs/icloud-json-api.md b/docs/icloud-json-api.md index b1f3dec2..a6976070 100644 --- a/docs/icloud-json-api.md +++ b/docs/icloud-json-api.md @@ -10,6 +10,16 @@ In the native widget list, open the context menu → **iCloud Data**. Create a n Grants and caches are bound to a native installation UUID and current iCloud identity. Sign-out/account change denies old-account cached reads and writes. Reconnect explicitly for a new account. A system change to the identity token's archive can require reconnection rather than guessing authority. +## Separate and shared data spaces + +The `Scripts//` folder contains widget source and resources. It is separate from the JSON data stores under `WidgetData//`. A widget does not automatically receive a cloud data store just because its package is saved in iCloud. + +Each installed package has its own native read/write grant. In **iCloud Data**, the user can create a separate store for each package, or explicitly connect multiple packages to the **same store ID**. Connected packages share documents: a reading heatmap and reading statistics widget connected to the same store can both read and update `reading.json`. The same filename in different stores refers to independent data. Multiple Home Screen instances of the same installed package use that package's connection. + +JavaScript supplies only the document filename, such as `$icloud.readJSON("reading.json")`; it cannot choose a store ID, switch stores, access another unconnected store, or browse arbitrary iCloud files. Sharing grants read/write access to the connected store, so connect only widgets you trust with that data. Matching package names alone never establish sharing. On another device signed into the same iCloud account, explicitly connect the installed package to the same store ID. + +Shared data is eventually synchronized, not instantly shared memory. Widgets must agree on their JSON schema and handle retained conflicting revisions when devices edit offline or concurrently. `$storage` remains local and separate; connecting a store does not move existing habit records into iCloud. + ## Methods Every method returns a Promise. `name` is a flat lowercase ASCII filename matching `/^[a-z][a-z0-9_-]{0,58}\.json$/`. No directories, absolute paths, URLs or arbitrary iCloud access. diff --git a/docs/scriptwidget-runtime-api.md b/docs/scriptwidget-runtime-api.md index 7bc87d32..8056457e 100644 --- a/docs/scriptwidget-runtime-api.md +++ b/docs/scriptwidget-runtime-api.md @@ -915,7 +915,7 @@ Interactive widget toggle. A declared actionID requires a package-relative stora - `$icloud.writeJSON`: Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual. - `$icloud.resolveJSON`: Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain. - `$icloud.sync`: Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown. -- `$icloud.status`: Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks. +- `$icloud.status`: Read native connection state. In the app, explicitly connect packages to separate stores for isolation or the same store ID to share JSON documents. Scripts cannot choose store IDs. Sync is eventual; local $storage is not migrated. Web uses preview mocks. - `$file.exists`: Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence. - `$file.read`: Read package-relative UTF-8 text. Missing or unavailable files return an empty string. - `$file.readJSON`: Read a package-relative JSON object. diff --git a/iOS/ScriptWidget.xcodeproj/project.pbxproj b/iOS/ScriptWidget.xcodeproj/project.pbxproj index 21859650..9936f77a 100644 --- a/iOS/ScriptWidget.xcodeproj/project.pbxproj +++ b/iOS/ScriptWidget.xcodeproj/project.pbxproj @@ -2560,7 +2560,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2593,7 +2593,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2621,7 +2621,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2647,7 +2647,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2672,7 +2672,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; @@ -2696,7 +2696,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; diff --git a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-ijvFWH5h.js similarity index 99% rename from iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js rename to iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-ijvFWH5h.js index 2c1a0aa7..339e39fc 100644 --- a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js +++ b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-ijvFWH5h.js @@ -21,7 +21,7 @@ \${} } }`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Hc=new dO,ad=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ld(n,e){let t=Hc.get(e);if(t)return t;let i=[],s=!0;function r(o,a){let l=n.sliceString(o.from,o.to);i.push({label:l,type:a})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let a=fb[o.name];if(a&&a(o,r)||ad.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ld(n,o.node))i.push(a);return!1}}),Hc.set(e,i),i}const Gc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Gc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)ad.has(s.name)&&(i=i.concat(ld(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:Gc}}const Xt=Xs.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Nr({except:/^\s*({|else\b)/}),TryStatement:Nr({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:MO,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:ZO({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Nr({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),sf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":DO,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Xt.configure({dialect:"ts"},"typescript"),mb=Xt.configure({dialect:"jsx",props:[Za.add(n=>n.isTop?[hd]:void 0)]}),gb=Xt.configure({dialect:"jsx ts",props:[Za.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),Ob=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?gb:mb:n.typescript?pb:Xt,t=n.typescript?hb.concat(Ob):od.concat(fd);return new kO(e,[Xt.data.of({autocomplete:Ty(cd,Yf(t))}),Xt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=$.inputHandler.of((n,e,t,i,s)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Xt.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,a=o.changeByRange(l=>{var c;let{head:h}=l,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(n.dispatch([r,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?a=>r(Jc(a)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fa(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,a=!0;;r++){let l=s.charCodeAt(r),c=this.match(l,o,a,this.bufferPos+this.bufferStart,r==s.length-1);if(c)return this.value=c,this;if(r==s.length-1)break;a&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=_s(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let a=new Li(t,e.sliceString(t,i));return oo.set(e,a),a}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=_s(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Li.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Na),!0}catch{return!1}}function _s(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const vb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=jg(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let a=e.doc.lineAt(e.selection.main.head),[,l,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:a.number;if(c&&u){let g=d/100;l&&(g=g*(l=="-"?-1:1)+a.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else c&&l&&(d=d*(l=="-"?-1:1)+a.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,$.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},wb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,wb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[$b,Rb]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const Rb=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return B.none;let l=t.wordAt(s.head);if(!l)return B.none;o=t.charCategorizer(s.head),r=t.sliceDoc(l.from,l.to)}else{let l=s.to-s.from;if(l200)return B.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(eh(o,t,s.from,s.to)&&Tb(o,t,s.from,s.to)))return B.none}else if(r=t.sliceDoc(s.from,s.to),!r)return B.none}let a=[];for(let l of n.visibleRanges){let c=new Yi(t.doc,r,l.from,l.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(s.empty&&h<=s.from&&u>=s.to?a.push(Cb.range(h,u)):(h>=s.to||u<=s.from)&&a.push(Pb.range(h,u)),a.length>e.maxMatches))return B.none}}return B.set(a)}},{decorations:n=>n.decorations}),$b=$.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(s=>n.wordAt(s.head)||A.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,a=new Yi(n.doc,e,i[i.length-1].to);;)if(a.next(),a.done){if(o)return null;a=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(l=>l.from==a.value.from))continue;if(r){let l=n.wordAt(a.value.from);if(!l||l.from!=a.value.from||l.to!=a.value.to)continue}return a.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=Zb(n,i);return s?(e(n.update({selection:n.selection.addRange(A.range(s.from,s.to),!1),effects:$.scrollIntoView(s.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>$.scrollIntoView(e)})}});class gd{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. In the app, explicitly connect packages to separate stores for isolation or the same store ID to share JSON documents. Scripts cannot choose store IDs. Sync is eventual; local $storage is not migrated. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> \${} `:`<${n}${i} />`}const ah=Object.entries($e.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:SS(n,e)}));function xS(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function vS(n,e){const t=$e.components[n];return t?Object.entries({...$e.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,s])=>({label:i,type:"property",detail:s.required?`${s.type} · required`:s.type,info:s.deprecated?`Deprecated: ${s.deprecated}`:s.documentation,apply:`${i}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`})):[]}function wS(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=$e.components[e[1]]?.properties?.[e[2]]??$e.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function kS(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=wS(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:ah,validFor:/^[A-Za-z]*$/};const s=xS(e);if(s&&/(?:\s|^)\w*$/.test(s.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),a=new Set([...s.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(l=>l[1]));return{from:o?.from??n.pos,options:vS(s.name,a),validFor:/^[A-Za-z][\w]*$/}}const r=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(r){const o=r.text.slice(0,r.text.indexOf(".")+1),a=Object.entries($e.functions).filter(([l])=>l.startsWith(o));return a.length?{from:r.from+o.length,options:a.map(([l,c])=>({label:l.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:ah,validFor:/^[A-Za-z]*$/}:null}function lh(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const s=lh(t,"JSXIdentifier")[0];s&&e.push({name:n.doc.sliceString(s.from,s.to),from:s.from,to:s.to,attributes:lh(t,"JSXAttribute").map(r=>{const o=r.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=$e.components[t.name];if(!i)continue;const s=new Set([...Object.keys($e.globalProperties),...Object.keys(i.properties??{})]),r=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){s.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const a=i.properties?.[o.name]??$e.globalProperties[o.name];a?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${a.deprecated}`})}for(const[o,a]of Object.entries(i.properties??{}))if(a.required&&!r.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),r.has(o)){for(const l of a.requires??[])r.has(l)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${l}” property.`});for(const l of a.conflicts??[])r.has(l)&&o cannot combine “${o}” with “${l}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>r.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function QS(n,e){const t=Md(n.state).find(s=>e>=s.from&&e<=s.to);if(!t)return null;const i=$e.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const s=document.createElement("div");s.className="studio-hover";const r=document.createElement("strong");r.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,s.append(r,o),{dom:s}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function PS(n,e){return $.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const CS=Xn.define([{tag:[O.keyword,O.controlKeyword,O.moduleKeyword,O.operatorKeyword,O.bool,O.null],color:"#FF7AB2"},{tag:[O.string,O.special(O.string)],color:"#FF8170"},{tag:[O.number,O.regexp],color:"#D9C97C"},{tag:[O.comment,O.lineComment,O.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[O.tagName,O.typeName,O.className],color:"#5DD8FF"},{tag:O.attributeName,color:"#B281EB"},{tag:[O.propertyName,O.function(O.variableName),O.function(O.propertyName)],color:"#67B7A4"},{tag:O.definition(O.variableName),color:"#4EB0CC"},{tag:[O.variableName,O.operator,O.punctuation,O.bracket],color:"#E8E8ED"},{tag:O.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[PS(e?ch.dark:ch.light,e),JO(e?CS:i0)]}const TS=Xt.parser.configure({dialect:"jsx"}),RS=new Map(Object.keys($e.components).map(n=>[n.toLowerCase(),n])),$S=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),KS=512*1024,ZS=512,MS=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,s)=>{const r={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(r,s))return r[s];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(s)){const o=s[1].toLowerCase()==="x"?parseInt(s.slice(2),16):Number(s.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function vi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>KS)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=TS.parse(n);let i=!1;if(t.iterate({enter:r=>{r.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function s(r,o,a){(a>MS||e.nodes.length>=ZS)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const l=ci(r),c=l[0],h=l.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=RS.get(f.toLowerCase()),p=$e.components[d],m={...$e.globalProperties,...p?.properties??{}},g=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=g?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&g&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(r.from),parentID:o,tag:f,component:d??null,from:r.from,to:r.to,openingEnd:c.to,insertAt:c.to-(g?1:2),contentFrom:c.to,contentTo:g?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:a};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const w=ci(S),U=hi(n,w[0]),F=w[2],V=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):V,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=g?l.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(s(S,b.id,a+1).id);if(b.structure=!b.locked&&g&&$S.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(w=>w.id===S).locked),!b.locked&&d==="Text"&&g&&k.length===1){const S=k[0],w=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(w)?Fd(w):S.name==="JSXEscape"?co(w.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(r){if(r.name!=="CallExpression")return;const o=ci(r.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const a=ci(o[1]).filter(l=>!["(",")"].includes(l.name));if(a.length===1&&a[0].name==="JSXElement")return e.roots.push(s(a[0],null,0).id),!1}})}catch(r){return{...e,nodes:[],roots:[],issue:r.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function ha(n){return!n?.component||n.locked?{}:{...$e.globalProperties,...$e.components[n.component]?.properties??{}}}function ES(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(l=>l.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let s=[],r=i.from;if(t.type==="property"){const l=ha(i),c=Object.hasOwn(l,t.name)?l[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=$e.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),s=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;s=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),s=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")s=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:r};s=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],r=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const l={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(l,t.kind)||de("Unsupported new layer."),s=[{from:i.contentTo,to:i.contentTo,insert:l[t.kind]}],r=i.contentTo}else de("Unsupported layout operation.");s.sort((l,c)=>l.from-c.from);let o=e;for(const l of[...s].reverse())o=o.slice(0,l.from)+l.insert+o.slice(l.to);return vi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:s,selectedFrom:r}}const Dd=Xt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Hi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:$e.globalProperties.font.values},bodyFont:{values:$e.globalProperties.font.values},fontDesign:{values:$e.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),ms={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},sr=Object.freeze({Meadow:Object.freeze({...ms,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...ms,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...ms,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...ms,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Ld(n,e){Object.hasOwn(Hi,n)||Qe("Unknown theme token.");const t=Hi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function el(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Hi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Ld(e,n[e]);return n}function Xd(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),el(e.tokens),e}function US(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Xd(t),t}function rr(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],s=[];if(t.iterate({enter(l){l.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(l.name)&&n.slice(l.from,l.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(l.from,l.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(l.name)&&(l.name==="VariableDefinition"?i:s).push(l.node)}}),!i.length&&!s.length){const l=vi(n);e.canInitialize=!l.issue&&l.roots.length===1&&!l.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;l.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froml.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const r=i[0].parent,o=Ci(r);(r.name!=="VariableDeclaration"||r.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(l=>l.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const a={};for(const l of Ci(o[3])){if(["{","}",","].includes(l.name))continue;const c=Ci(l),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(l.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(a,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Ld(u,f),a[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}el(a);for(const l of s){const c=l.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==l.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Hi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=a}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),el(t),{changes:Object.keys(Hi).filter(s=>t[s]!==n.tokens[s]).map(s=>({...n.ranges[s],insert:JSON.stringify(t[s])})).sort((s,r)=>s.from-r.from)}}function FS(n,e="Meadow"){(!rr(n).canInitialize||!Object.hasOwn(sr,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=vi(n),s=i.nodes[0],r=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;r.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(s,c,c,!0);s.structure&&o(s,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let a=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")a=c.to;else break;r.push({from:a,to:a,insert:` const widgetTheme = ${JSON.stringify(sr[e],null,2)}; diff --git a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html index 3bc96711..55c4909d 100644 --- a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html +++ b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html @@ -5,7 +5,7 @@ ScriptWidget Web Studio - + diff --git a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj index 3570744a..481a1bac 100644 --- a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj +++ b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj @@ -1766,7 +1766,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1804,7 +1804,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1840,7 +1840,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1874,7 +1874,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27017; + CURRENT_PROJECT_VERSION = 27018; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; diff --git a/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js b/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-ijvFWH5h.js similarity index 99% rename from macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js rename to macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-ijvFWH5h.js index 2c1a0aa7..339e39fc 100644 --- a/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js +++ b/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-ijvFWH5h.js @@ -21,7 +21,7 @@ \${} } }`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Hc=new dO,ad=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ld(n,e){let t=Hc.get(e);if(t)return t;let i=[],s=!0;function r(o,a){let l=n.sliceString(o.from,o.to);i.push({label:l,type:a})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let a=fb[o.name];if(a&&a(o,r)||ad.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ld(n,o.node))i.push(a);return!1}}),Hc.set(e,i),i}const Gc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Gc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)ad.has(s.name)&&(i=i.concat(ld(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:Gc}}const Xt=Xs.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Nr({except:/^\s*({|else\b)/}),TryStatement:Nr({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:MO,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:ZO({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Nr({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),sf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":DO,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Xt.configure({dialect:"ts"},"typescript"),mb=Xt.configure({dialect:"jsx",props:[Za.add(n=>n.isTop?[hd]:void 0)]}),gb=Xt.configure({dialect:"jsx ts",props:[Za.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),Ob=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?gb:mb:n.typescript?pb:Xt,t=n.typescript?hb.concat(Ob):od.concat(fd);return new kO(e,[Xt.data.of({autocomplete:Ty(cd,Yf(t))}),Xt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=$.inputHandler.of((n,e,t,i,s)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Xt.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,a=o.changeByRange(l=>{var c;let{head:h}=l,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(n.dispatch([r,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?a=>r(Jc(a)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fa(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,a=!0;;r++){let l=s.charCodeAt(r),c=this.match(l,o,a,this.bufferPos+this.bufferStart,r==s.length-1);if(c)return this.value=c,this;if(r==s.length-1)break;a&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=_s(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let a=new Li(t,e.sliceString(t,i));return oo.set(e,a),a}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=_s(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Li.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Na),!0}catch{return!1}}function _s(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const vb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=jg(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let a=e.doc.lineAt(e.selection.main.head),[,l,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:a.number;if(c&&u){let g=d/100;l&&(g=g*(l=="-"?-1:1)+a.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else c&&l&&(d=d*(l=="-"?-1:1)+a.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,$.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},wb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,wb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[$b,Rb]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const Rb=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return B.none;let l=t.wordAt(s.head);if(!l)return B.none;o=t.charCategorizer(s.head),r=t.sliceDoc(l.from,l.to)}else{let l=s.to-s.from;if(l200)return B.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(eh(o,t,s.from,s.to)&&Tb(o,t,s.from,s.to)))return B.none}else if(r=t.sliceDoc(s.from,s.to),!r)return B.none}let a=[];for(let l of n.visibleRanges){let c=new Yi(t.doc,r,l.from,l.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(s.empty&&h<=s.from&&u>=s.to?a.push(Cb.range(h,u)):(h>=s.to||u<=s.from)&&a.push(Pb.range(h,u)),a.length>e.maxMatches))return B.none}}return B.set(a)}},{decorations:n=>n.decorations}),$b=$.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(s=>n.wordAt(s.head)||A.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,a=new Yi(n.doc,e,i[i.length-1].to);;)if(a.next(),a.done){if(o)return null;a=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(l=>l.from==a.value.from))continue;if(r){let l=n.wordAt(a.value.from);if(!l||l.from!=a.value.from||l.to!=a.value.to)continue}return a.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=Zb(n,i);return s?(e(n.update({selection:n.selection.addRange(A.range(s.from,s.to),!1),effects:$.scrollIntoView(s.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>$.scrollIntoView(e)})}});class gd{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDQO3UnooooEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9uKKKK5z1QooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi+9865PlwIf3UIPCj1Pq3qaaR0UKDqPyL3jjx5f+LrrykzDZRn93Fnr/tN6n9B+p2Phv4/fw3cjStUYmxlbr18pj3H+ye4/Ed8+U0U7HqOlFx5LaH6BI6SoJIyGVhkEcgg9xTq+afhh8Q/7MdPDmtv/AKMxxDIx/wBWT/CT/dPb0+nT6WqTyKtJ05WYUUUUGQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRTzw20LXFwwREGWY9AKlrxX4i6+9xd/2HbtiOLBkx/E3UD6Afr9K78twEsbWVGO3V9kcOY46ODoutLfou7DX/iLeXDtb6H+5jHHmEZZvoDwB+v0rzu5vr28YvdzPKT3Zif51Vor9KwmAoYWPLRjbz6/efnOKx9bEy5q0r+XT7i1bX17ZsHtJniI7qxH8q9E0D4i3lu62+ufvozx5gGGX6gcEfr9a8xooxeAoYqPLWjfz6/eGFx9bDS5qMreXT7j6zgnhuYVuLdg6OMqw6EVLXivw6197e7/sO4bMcuTHn+FupH0I/X617VX5rmWAlgqzoy26Puj9Gy7HRxlFVo79V2YUUUVwHcFFFFABRRRQB//T/biiiiuc9UKKKKACiiigAooooAKKKKACub8T+KdL8Kaeb7UWyx4jjH3nPoP6ntVPxh4z03whY+dc/vLhx+6hB5Y+p9FHc18h67r2peItQfUtUk3yNwB/Co7Ko7Af55ppHVh8O6nvS2LfifxRqnirUDfai3AyI4x91F9B/U965yiiqPVSSVkFFFFAwr6I+F3xD80R+GNcf5x8tvKx6+iMfX+6e/T0r53pQSDkcEUjOrSVRcrP0Dorxz4Z/EIa3Eug6y/+mRj925/5aqP/AGYd/Uc+tex1J41Sm4PlkFFFFBAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV8o31y15ezXbnJldmP4nNfV1fKN9bNZ3s1o4wYnZT+BxX2HCVuar30/X/AIB8lxXflpdtf0KtFFFfanxgUUUUAWrG5azvYbtDgxOrD8Dmvq6vlGxtmvL2G0QZMrqo/E4r6ur4ri23NS76/p/wT7PhS/LV7afqFFFFfHn1oUUUUAFFFFAH/9T9uKKKK5z1QooooAKKKKACiiigArz/AMcePbDwjbeTHia9kH7uL0/2n9B+p/M1n+PviLa+F4207TsS37Dp1WMHu3v6D8Tx1+VLy8utQunvb2QyyyHczMckmmkduHw3P709ifVNUv8AWb59R1KQyzSHJY/yHoB2FZ9FFUemlbRBRRRQAUUUUAFFFFAEkM0tvKs8DFHQhlYHBBHQg19Z/Dvx7F4ps/sN+Qt/CPmHTzFH8Q/qP6V8kVbsb67027jv7FzHLEdysOoNJmNaiqit1PvmiuG8DeNbTxfp244ju4gBLH/7Mv8Asn9OldzUnjyi4vlYUUUUEhRRRQAUUUUAFFFFABRRRQAUUV83fHP472Xw7tX8PeHmWfWpV+q24I4Z/Vu6r+J4wCGtGjKtJQgtS58bvjnp/wANbJtG0crca1MvyJ1WEHo8nv8A3V79Tx18T8KfFSz+IQVtRCwasFAmQcLKVGPMT0yPvL2PI4PHxnf397ql7LqOoytPPOxeSRzlmY8kkmore5ntJ0urVzHJGQyspwQR3FduW5hLBVlWjquq7o9TMOGqOMwjw0n726l2f+R+hVFebfCzxwvjhV0O5ZV1VB8qEhfPA6lM8bh3Xr3GeQPU7mxvbNil3C8RHZlI/nX6ZhMwoYqKlRl8uv3H4vmOVYnAVHSxMLW69H6Mq0VatrG9vGCWkLyk9lUn+VeiaB8Ory4dbjXP3MY58sHLN9SOAP1+lGLx9DCx5q0reXX7jLC4CtiZctGN/Pp94fDrQHuLv+3LhcRxZEef4m6E/QD9fpXtVRQQQ20K29uoREGFUdAKlr81zLHyxtZ1pbdF2R+jZdgY4OiqMd+r7sKKKK4DuCiiigAooooA/9X9uKKKK5z1QooooAKKKKACvHPiH8S4tDD6NoTB7w8PJ1WL/Fv5d/Ssr4ifE8WvmaF4akzLyss6/wAPqqH19T27c9PnQksSzHJNNI78Phb+/MfLLLPK007F3ckszHJJPUk1HRRVHohRRRQAUUUUAFFFFABRRRQAUUUUAamjaxf6DqMeqaa+yWM/gR3BHcHvX2R4S8VWHi3S1v7T5ZF4ljJ5Rv8AA9j3/OviOug8NeJNQ8L6omp2B6cOh6OvcH+h7Gk0c+IoKorrc+5KKxPD+v6f4k0yPVNObKPwyn7yt3U+4/8Ar1t1J5DTTswooooEFFFFABRRRQAUUV8qfHn4/wAPgyOXwj4PkWTVmG2WUYK2wP6GT0H8PU+lBtQoTrSUIIu/Hb4+WvgOCTwv4WdZtZkXDvwy2wI6nsXI+6vbqewP5u3d3dX91Je3sjTTSsXd3JZmYnJJJ5JJpk8891O9zcu0kkjFndiSzMTkkk8kk9TUVTc+twmEhh48sd+rCiiikdZLBPPazpc2rtHJGwZHUkMrA5BBHIIPQ1+i/wAB/wBoGDxjHF4R8YyLFqyjbFMcBbkDt6CT26N254r846fHI8TrLExVlOQRwQR0INM5cVhIYiPLLfoz9xaK+PvgJ+0KniEQ+C/HUwW/4S3umOBP6I57Seh/i/3uv2DVHyWIw86EuSaCiiigwCiiigAooooAKKKKAP/W/biiiiuc9UKKKjmmit4mnnYIiAlmY4AA6kmgB5IUFmOAOpr5z+InxQN35mheGpMRcrLOvVvVUPp6nv2465XxC+JcuuF9G0Jiln0d+jS/4L7d+/pXjtUkelh8Lb35hRRRTO4KKKKACiiigAooooAKKKKACiiigAooooAKKKKAOv8ABvi+98I6mLqHLwSYE0XZl9R/tDsa+xdL1Sx1mwj1LTnEkMoypH8j6EdxXwXXoPgHxxceEb/ypyXspj+9T+6f76+47+o/DCaOTE4fnXNHc+w6Kgtbq3vbZLu0cSRSAMrLyCDU9SeWFFFFAgoor44+Pv7Qi6GJvBPgSYG95S5ukPEPYpGf+enqf4eg+b7ob4fDzrz5IF749/tBR+F1m8G+CZQ+pHK3FwvIt/VV9ZPX+79en55ySSTSNNMxd3JLMTkknqSfWkZmdi7kkk5JPUmm1J9bhcLDDx5Y/eFFFFI6gooooAKKKKAFBIORwRX3j8A/2hxfeT4I8fz4n4S1vHP3+wjlJ/i/usevQ88n4NopnNicNCvHkmfuRRXwp8BP2iDB5Pgj4gT/ACcJa3kh+72EcpPb0c9Oh45H3WCCMiqPksThp0JckwooooOcKKKKACiiigD/1/24oorP1TVLDRrF9R1KQRQxjJJ/kB3J7Cuc9ZK+iJ7y8tdPtXvb2QRRRjczMcACvlPx98RbrxRKdP08mKwU9OjSEd29vQfieemd448eX/i668pMw2UZ/dxZ6/7Tep/QfqeBqkj08PhuT3p7hRRRTOwKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9W+G/j9/DdyNK1RibGVuvXymPcf7J7j8R3z9WI6SIJIyGVhkEcgg9xX5+17d8MPiH/Zrp4d1x/wDRmOIZGP8Aqyf4Sf7p7en06Jo4cVh7+/A+lqKK+G/j9+0N/r/A/gCf1S6vIz+BjiI/JmH0HrUnLhsNOvLkgXvj7+0MLHz/AAP4BnzPyl1eIfudjHER/F2Zh93oOeR8HEknJpKKk+tw2GhQjyQCiiikdIUUUUAFFFFABRRRQAUUUUAFfY/wE/aGfRDD4K8eTFrLhLa7c8w9gkh7p6N/D0Py/d+OKKZhiMPCvHkmfuMjrIodCGVhkEcgg06vzq+A37QU3hJ4vB/jSUyaWSFgnblrf0B7mP8AVe3HA/RGGaG5hS4t3EkbgMrKcgg8ggjgg1R8lisLPDy5ZbdGSUUUUHKFFFFAH//Q/Z/Xde03w5p76lqkmxF4A/iY9lUdya+RPGHjPU/F9951yfLgQ/uoQeFHqfVvU1S8T+KNU8Vagb7UW4HEcY+6i+g/qeprnKxSPrMPh1T957hRRRTOkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACjpyaQkAZPAFeI+NfHJvd+kaM+Iekkg/j9h/s+/f6dU3Y1pUnUdkeh+N/2gPEdx4aPgPRJ8RDKS3Sn940eMeWp9OxbqRx06/M9FFZt3PTo0YUlaCCiiikbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABX0/8Cvj7deBJo/C/ip2m0ZzhH5ZrYnuO5T1Xt1HcH5gopmNajGtFwmtD9wLS7tb+1jvrGRZoZlDo6EMrKRkEEcEEVYr8xPgf8d7/wCHN0ug68WuNFlblerW5J5dPVe7L+I5yD+l2najYavYxanpcyz286h45EOVZT0INVc+TxeDnh5Wlt0ZdooooOM//9H60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. In the app, explicitly connect packages to separate stores for isolation or the same store ID to share JSON documents. Scripts cannot choose store IDs. Sync is eventual; local $storage is not migrated. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> \${} `:`<${n}${i} />`}const ah=Object.entries($e.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:SS(n,e)}));function xS(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function vS(n,e){const t=$e.components[n];return t?Object.entries({...$e.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,s])=>({label:i,type:"property",detail:s.required?`${s.type} · required`:s.type,info:s.deprecated?`Deprecated: ${s.deprecated}`:s.documentation,apply:`${i}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`})):[]}function wS(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=$e.components[e[1]]?.properties?.[e[2]]??$e.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function kS(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=wS(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:ah,validFor:/^[A-Za-z]*$/};const s=xS(e);if(s&&/(?:\s|^)\w*$/.test(s.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),a=new Set([...s.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(l=>l[1]));return{from:o?.from??n.pos,options:vS(s.name,a),validFor:/^[A-Za-z][\w]*$/}}const r=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(r){const o=r.text.slice(0,r.text.indexOf(".")+1),a=Object.entries($e.functions).filter(([l])=>l.startsWith(o));return a.length?{from:r.from+o.length,options:a.map(([l,c])=>({label:l.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:ah,validFor:/^[A-Za-z]*$/}:null}function lh(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const s=lh(t,"JSXIdentifier")[0];s&&e.push({name:n.doc.sliceString(s.from,s.to),from:s.from,to:s.to,attributes:lh(t,"JSXAttribute").map(r=>{const o=r.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=$e.components[t.name];if(!i)continue;const s=new Set([...Object.keys($e.globalProperties),...Object.keys(i.properties??{})]),r=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){s.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const a=i.properties?.[o.name]??$e.globalProperties[o.name];a?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${a.deprecated}`})}for(const[o,a]of Object.entries(i.properties??{}))if(a.required&&!r.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),r.has(o)){for(const l of a.requires??[])r.has(l)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${l}” property.`});for(const l of a.conflicts??[])r.has(l)&&o cannot combine “${o}” with “${l}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>r.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function QS(n,e){const t=Md(n.state).find(s=>e>=s.from&&e<=s.to);if(!t)return null;const i=$e.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const s=document.createElement("div");s.className="studio-hover";const r=document.createElement("strong");r.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,s.append(r,o),{dom:s}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function PS(n,e){return $.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const CS=Xn.define([{tag:[O.keyword,O.controlKeyword,O.moduleKeyword,O.operatorKeyword,O.bool,O.null],color:"#FF7AB2"},{tag:[O.string,O.special(O.string)],color:"#FF8170"},{tag:[O.number,O.regexp],color:"#D9C97C"},{tag:[O.comment,O.lineComment,O.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[O.tagName,O.typeName,O.className],color:"#5DD8FF"},{tag:O.attributeName,color:"#B281EB"},{tag:[O.propertyName,O.function(O.variableName),O.function(O.propertyName)],color:"#67B7A4"},{tag:O.definition(O.variableName),color:"#4EB0CC"},{tag:[O.variableName,O.operator,O.punctuation,O.bracket],color:"#E8E8ED"},{tag:O.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[PS(e?ch.dark:ch.light,e),JO(e?CS:i0)]}const TS=Xt.parser.configure({dialect:"jsx"}),RS=new Map(Object.keys($e.components).map(n=>[n.toLowerCase(),n])),$S=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),KS=512*1024,ZS=512,MS=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,s)=>{const r={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(r,s))return r[s];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(s)){const o=s[1].toLowerCase()==="x"?parseInt(s.slice(2),16):Number(s.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function vi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>KS)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=TS.parse(n);let i=!1;if(t.iterate({enter:r=>{r.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function s(r,o,a){(a>MS||e.nodes.length>=ZS)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const l=ci(r),c=l[0],h=l.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=RS.get(f.toLowerCase()),p=$e.components[d],m={...$e.globalProperties,...p?.properties??{}},g=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=g?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&g&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(r.from),parentID:o,tag:f,component:d??null,from:r.from,to:r.to,openingEnd:c.to,insertAt:c.to-(g?1:2),contentFrom:c.to,contentTo:g?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:a};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const w=ci(S),U=hi(n,w[0]),F=w[2],V=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):V,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=g?l.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(s(S,b.id,a+1).id);if(b.structure=!b.locked&&g&&$S.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(w=>w.id===S).locked),!b.locked&&d==="Text"&&g&&k.length===1){const S=k[0],w=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(w)?Fd(w):S.name==="JSXEscape"?co(w.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(r){if(r.name!=="CallExpression")return;const o=ci(r.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const a=ci(o[1]).filter(l=>!["(",")"].includes(l.name));if(a.length===1&&a[0].name==="JSXElement")return e.roots.push(s(a[0],null,0).id),!1}})}catch(r){return{...e,nodes:[],roots:[],issue:r.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function ha(n){return!n?.component||n.locked?{}:{...$e.globalProperties,...$e.components[n.component]?.properties??{}}}function ES(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(l=>l.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let s=[],r=i.from;if(t.type==="property"){const l=ha(i),c=Object.hasOwn(l,t.name)?l[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=$e.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),s=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;s=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),s=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")s=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:r};s=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],r=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const l={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(l,t.kind)||de("Unsupported new layer."),s=[{from:i.contentTo,to:i.contentTo,insert:l[t.kind]}],r=i.contentTo}else de("Unsupported layout operation.");s.sort((l,c)=>l.from-c.from);let o=e;for(const l of[...s].reverse())o=o.slice(0,l.from)+l.insert+o.slice(l.to);return vi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:s,selectedFrom:r}}const Dd=Xt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Hi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:$e.globalProperties.font.values},bodyFont:{values:$e.globalProperties.font.values},fontDesign:{values:$e.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),ms={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},sr=Object.freeze({Meadow:Object.freeze({...ms,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...ms,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...ms,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...ms,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Ld(n,e){Object.hasOwn(Hi,n)||Qe("Unknown theme token.");const t=Hi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function el(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Hi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Ld(e,n[e]);return n}function Xd(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),el(e.tokens),e}function US(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Xd(t),t}function rr(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],s=[];if(t.iterate({enter(l){l.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(l.name)&&n.slice(l.from,l.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(l.from,l.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(l.name)&&(l.name==="VariableDefinition"?i:s).push(l.node)}}),!i.length&&!s.length){const l=vi(n);e.canInitialize=!l.issue&&l.roots.length===1&&!l.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;l.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froml.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const r=i[0].parent,o=Ci(r);(r.name!=="VariableDeclaration"||r.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(l=>l.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const a={};for(const l of Ci(o[3])){if(["{","}",","].includes(l.name))continue;const c=Ci(l),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(l.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(a,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Ld(u,f),a[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}el(a);for(const l of s){const c=l.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==l.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Hi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=a}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),el(t),{changes:Object.keys(Hi).filter(s=>t[s]!==n.tokens[s]).map(s=>({...n.ranges[s],insert:JSON.stringify(t[s])})).sort((s,r)=>s.from-r.from)}}function FS(n,e="Meadow"){(!rr(n).canInitialize||!Object.hasOwn(sr,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=vi(n),s=i.nodes[0],r=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;r.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(s,c,c,!0);s.structure&&o(s,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let a=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")a=c.to;else break;r.push({from:a,to:a,insert:` const widgetTheme = ${JSON.stringify(sr[e],null,2)}; diff --git a/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html b/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html index 3bc96711..55c4909d 100644 --- a/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html +++ b/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html @@ -5,7 +5,7 @@ ScriptWidget Web Studio - + From 002cab0b568e79a882b942e244d28dd4cbd187b4 Mon Sep 17 00:00:00 2001 From: Everett Date: Tue, 27 Oct 2026 07:55:30 -0700 Subject: [PATCH 14/15] Wait for saved project state in preview handoff smoke test --- Web/studio/scripts/preview-handoff-smoke.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Web/studio/scripts/preview-handoff-smoke.ts b/Web/studio/scripts/preview-handoff-smoke.ts index 4606aedf..709c81e3 100644 --- a/Web/studio/scripts/preview-handoff-smoke.ts +++ b/Web/studio/scripts/preview-handoff-smoke.ts @@ -12,7 +12,9 @@ try { const page=await chrome.newPage(); const base=process.env.SCRIPTWIDGET_STUDIO_URL || server.origin+'/index.html'; await page.goto(base); - await page.waitFor("!!document.querySelector('.sw-widget')",20000); + // Measure the baseline only after the saved project UI is ready, and wait + // for the imported project's list update as well as its asynchronous preview. + await page.waitFor("!!document.querySelector('.sw-widget') && document.querySelectorAll('#project-list li').length>0 && document.getElementById('save-state')?.textContent==='Saved in this browser'",20000); const initial=await page.evaluate("document.querySelectorAll('#project-list li').length"); let fragment: string; if(process.env.SCRIPTWIDGET_CLI && process.env.SCRIPTWIDGET_PREVIEW_PACKAGE) { @@ -26,6 +28,7 @@ try { await page.goto(base+fragment); try { await page.waitFor("document.querySelector('.sw-widget')?.textContent.includes('Agent handoff loaded ✓')",25000); } catch(error) { console.error(await page.evaluate("document.body.innerText.slice(-4500)"), page.consoleMessages); throw error; } + await page.waitFor(`document.querySelectorAll('#project-list li').length===${initial+1} && document.getElementById('save-state')?.textContent==='Saved in this browser'`,20000); if(await page.evaluate("location.hash!==''"))throw Error('Payload remained in browser URL'); if(await page.evaluate("document.querySelectorAll('#project-list li').length")!==initial+1)throw Error('Existing project overwritten or handoff imported more than once'); await page.goto(base); From 37b723dae889ba9e6894b18d3e45df683bfcce24 Mon Sep 17 00:00:00 2001 From: Everett Date: Tue, 27 Oct 2026 08:57:57 -0700 Subject: [PATCH 15/15] Prepare version 27.2 build 27019 --- iOS/ScriptWidget.xcodeproj/project.pbxproj | 24 +++++++++---------- .../ScriptWidgetMac.xcodeproj/project.pbxproj | 16 ++++++------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/iOS/ScriptWidget.xcodeproj/project.pbxproj b/iOS/ScriptWidget.xcodeproj/project.pbxproj index 9936f77a..0eeab8f0 100644 --- a/iOS/ScriptWidget.xcodeproj/project.pbxproj +++ b/iOS/ScriptWidget.xcodeproj/project.pbxproj @@ -2560,7 +2560,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2572,7 +2572,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2593,7 +2593,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidget/ScriptWidget.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_ASSET_PATHS = "\"ScriptWidget/Preview Content\""; DEVELOPMENT_TEAM = YPV49M8592; ENABLE_PREVIEWS = YES; @@ -2604,7 +2604,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2621,7 +2621,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2630,7 +2630,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; OTHER_SWIFT_FLAGS = "-D IsWidgetTarget"; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.widget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2647,7 +2647,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetWidget/ScriptWidgetWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetWidget/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 18.0; @@ -2656,7 +2656,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; OTHER_SWIFT_FLAGS = "-D IsWidgetTarget"; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.widget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2672,7 +2672,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; @@ -2681,7 +2681,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2696,7 +2696,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetShare/ScriptWidgetShare.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEVELOPMENT_TEAM = YPV49M8592; INFOPLIST_FILE = ScriptWidgetShare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 16.0; @@ -2705,7 +2705,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.share; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj index 481a1bac..316036ac 100644 --- a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj +++ b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj @@ -1766,7 +1766,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1786,7 +1786,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = ScriptWidget; REGISTER_APP_GROUPS = YES; @@ -1804,7 +1804,7 @@ CODE_SIGN_ENTITLEMENTS = ScriptWidgetMac/macOS.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1823,7 +1823,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget; PRODUCT_NAME = ScriptWidget; REGISTER_APP_GROUPS = YES; @@ -1840,7 +1840,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1856,7 +1856,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.macwidget; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES; @@ -1874,7 +1874,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 27018; + CURRENT_PROJECT_VERSION = 27019; DEAD_CODE_STRIPPING = YES; ENABLE_APP_SANDBOX = YES; ENABLE_FILE_ACCESS_DOWNLOADS_FOLDER = readonly; @@ -1890,7 +1890,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 26.0; - MARKETING_VERSION = 27.1.6; + MARKETING_VERSION = 27.2; PRODUCT_BUNDLE_IDENTIFIER = com.everettjf.scriptwidget.macwidget; PRODUCT_NAME = "$(TARGET_NAME)"; REGISTER_APP_GROUPS = YES;

  • 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

    >!fGK@;42zdW|&2RNhqBqtvfD--|?j^`JT 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≫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 literal 0 HcmV?d00001 diff --git a/docs/scriptwidget-runtime-api.md b/docs/scriptwidget-runtime-api.md index cd8a13cb..7bc87d32 100644 --- a/docs/scriptwidget-runtime-api.md +++ b/docs/scriptwidget-runtime-api.md @@ -1,6 +1,6 @@ # ScriptWidget Runtime API -> Generated from Studio's static API metadata (schema v1, runtime 1.5). The native runtime switch is authoritative. Do not edit by hand. +> Generated from Studio's static API metadata (schema v1, runtime 1.6). The native runtime switch is authoritative. Do not edit by hand. ## Components @@ -885,6 +885,32 @@ Interactive widget toggle. A declared actionID requires a package-relative stora - `$location.isAuthorizedForWidgetUpdates`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. - `$location.requestAuthorization`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. - `$location.current`: Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale. +- `$notifications.status`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.pending`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.schedule`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$notifications.cancel`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$health.dailyStatistics`: Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data. +- `$calendar.create`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created. +- `$calendar.update`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created. +- `$weather.forecast`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.status`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.pending`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.schedule`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.cancel`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.stop`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.pause`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$alarms.resume`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.list`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.readJSON`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$documents.readCSV`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$contacts.selected`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.search`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.geocode`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.reverseGeocode`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$maps.snapshot`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.items`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.setPower`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. +- `$home.runScene`: Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. - `$icloud.readJSON`: Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload. - `$icloud.writeJSON`: Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual. - `$icloud.resolveJSON`: Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain. diff --git a/docs/system-services-api.md b/docs/system-services-api.md new file mode 100644 index 00000000..42631537 --- /dev/null +++ b/docs/system-services-api.md @@ -0,0 +1,169 @@ +# System services (Runtime 1.6) + +These APIs extend existing Calendar, HealthKit, network and App Intent capabilities. They use Apple's frameworks and the existing bounded HTTP transport; no third-party SDK, inference server or application server is added. Weather currently uses MET Norway rather than WeatherKit. + +## Install and authorize + +Use Package 2.0, `minimumRuntimeVersion: "1.6"`, and the relevant permissions below. Older runtimes reject unsupported permissions/versions. In the native widget list, open the widget's context menu → **System Access**, select capabilities and items, then **Save Access and Selections**. Separately authorize Notifications, Contacts, Home or Alarms there when needed. Calendar and Health authorization/source selection stay in app Settings. + +Native grants are local, bound to the installation UUID, and absent from exported packages. Rename retains access; a remix, import or new same-name installation does not inherit it. Revoking access stops subsequent calls without removing user records or imported copies. Cancel outstanding notifications/alarms before revocation. Native deletion requests cancellation of that installation's schedules; delivery/cancellation after process termination or OS denial still needs device acceptance. Calendar events are never deleted during widget deletion. + +All methods return Promises. All calls require a live installed execution, share the **8-query/execution** budget, and are denied during future timeline projections and scripted Live Activity presentations. Writes require a user-initiated native action. Native service callbacks recheck installation identity and the captured grant before delivery. No authorization sheets are presented automatically during widget rendering. + +| Capability | Manifest permissions | Native support | +| --- | --- | --- | +| Notifications | `notifications` | iOS/iPadOS, macOS; OS notification authorization | +| Health history | `health` | iPhone/iPad with available HealthKit; review types in Settings | +| Calendar writes | `calendar`, `calendarWrite` | iOS/iPadOS, macOS; full Calendar access and permitted calendar | +| Forecast | `weather`, `network`, `networkDomains:["api.met.no"]` | iOS/iPadOS, macOS; supplied coordinates, no automatic GPS | +| Alarms/timers | `alarms` | iOS/iPadOS 26+; AlarmKit authorization; unavailable on native macOS | +| Imported data | `documents` | iOS/iPadOS, macOS; explicit native file importer | +| Contacts | `contacts` | iOS/iPadOS, macOS; OS access plus native per-widget selection | +| Maps/places | `maps` | iOS/iPadOS, macOS; supplied query/coordinates sent to Apple Maps | +| Home accessories/scenes | `home` | iPhone/iPad; HomeKit authorization and selected items; unavailable on native macOS | + +Health history uses the existing Health review rather than the System Access toggle. Read authorization remains undisclosed by HealthKit: an empty result cannot establish denial. These APIs do not persist Health readings or log contacts, document contents, home values or system responses. + +## Local notifications + +```js +await $notifications.status(); // {authorization:"authorized"|...} +await $notifications.schedule({key:"reading",title:"Time to read",body:"One chapter",daily:{hour:20,minute:0}}); +await $notifications.schedule({key:"one-time",title:"A reminder",body:"Take a break",date:"2026-11-01T12:00:00Z"}); +await $notifications.pending(); // own keys, title, body, repeats, next date +await $notifications.cancel("reading"); // {key,status:"cancellationRequested"} +``` + +Supply exactly one of `date` (future ISO date-time, at most 366 days away) or `daily` (integer hour 0–23 and minute 0–59, system local clock). Daily reminders occupy one repeating slot; they do not require JavaScript to keep running. A key matches `[a-zA-Z0-9_-]{1,64}`. A repeated schedule with the same key replaces that installation's slot. Titles/body are nonempty, without control characters, at most 256/1024 UTF-8 bytes. Unknown fields reject. + +At most 32 slots per installation, with a conservative application-wide capacity check at 60 pending requests and a cross-process lock. Scheduling acknowledges OS acceptance, not delivery: Focus, notification settings and system behavior still apply. An acknowledgment timeout is an unknown outcome; inspect `pending()` before retrying. Cancellation targets only owned pending notifications, not notifications from other apps or already delivered history. + +[Runnable Reading Reminder](examples/notification-reminder). + +## Health history + +```js +const history = await $health.dailyStatistics({metric:"steps",days:7}); +// {metric,unit,aggregation,timeZone,items:[{date:"YYYY-MM-DD",value,hasSamples}]} +``` + +Metrics: `steps` (count), `activeEnergy` (kcal), `walkingDistance` (meters), `water` (milliliters), `bodyMass` (kilograms), `heartRate` (beats/minute). Body mass and heart rate use daily averages; the others use sums. `days` is an integer 1–31, default 7, including the current partial day. Bins use Gregorian local days and calendar boundaries, including DST. Missing readings return `value:null,hasSamples:false`; a measured zero remains valid. No raw samples, write access, routes or source identifiers are exposed. + +[Runnable Seven Day Steps](examples/health-history). + +## Calendar writes + +```js +const result = await $calendar.create({requestID:"11111111-1111-4111-8111-111111111111",calendarID:"",title:"Focus",start:"2026-11-01T12:00:00Z",end:"2026-11-01T12:30:00Z",allDay:false}); +await $calendar.update({requestID:"22222222-2222-4222-8222-222222222222",calendarID:"",id:result.id,title:"Updated focus",start:"2026-11-01T13:00:00Z",end:"2026-11-01T13:30:00Z",allDay:false}); +// {id,calendarID,status:"applied",replayed:boolean} +``` + +Create/update accept closed fields and a canonical lowercase request UUID. Start/end are explicit ISO date-times with positive duration up to 366 days. Update supplies the complete title/start/end, not a partial patch. Titles are at most 512 UTF-8 bytes. Calendar must be in the native selected source scope and writable. Updates are limited to single, nonrecurring events this installation created; importing an event ID cannot grant ownership. Recurrence, deletion and modification of other events are deliberately outside this contract. The native ownership registry is bounded to 128 events and stored outside script-accessible `$storage`. + +Create/update use private native replay receipts. A repeated requestID with the same operation returns its confirmed result; different arguments reject. Prepared/uncertain receipts cannot be retried blindly. Up to 128 receipts/64 KiB are retained; completed receipts expire after seven days, prepared receipts are not automatically discarded. Save the pending operation locally **before** calling the API. Retry an unchanged recent request only; inspect Calendar before resetting an old or uncertain operation. A system write can succeed even if the widget execution expires before receiving its result. + +[Runnable Focus Session with durable pending request](examples/calendar-focus). + +## Weather + +```js +const forecast = await $weather.forecast({latitude:37.33,longitude:-122.01,hours:24}); +// {provider,attribution:{text,url},latitude,longitude,fetchedAt,isStale, +// hours:[{time,temperatureC,windMetersPerSecond,precipitationMM,condition}]} +``` + +Coordinates are rounded to two decimals before transmission; latitude/longitude bounds are enforced. `hours` is an integer 1–48, default 24. MET Norway's compact forecast is normalized and bounded. Fresh matching private cache can be used for one hour; failures may return matching cache up to six hours old with `isStale:true`. `fetchedAt` is the fetch time, not an observation timestamp. Missing precipitation/condition remain null. Display the returned provider attribution and link. No WeatherKit entitlement, Apple weather quota or API key is involved. Network/domain restrictions, redirects, cancellation and request budgets still apply. + +[Runnable Weather Ahead with attribution](examples/weather-forecast). + +## Alarms and timers + +```js +await $alarms.status(); +await $alarms.schedule({requestID:"11111111-1111-4111-8111-111111111111",key:"focus",title:"Focus complete",seconds:1500}); +// Or supply date: instead of seconds. +await $alarms.pending(); // this installation's {key,state} items +await $alarms.pause("focus"); await $alarms.resume("focus"); +await $alarms.stop("focus"); await $alarms.cancel("focus"); +``` + +Use exactly one of `seconds` (60–86400) or `date` (future, at most 366 days). Titles are at most 128 UTF-8 bytes. Up to 32 named keys are tracked per installation. IDs are derived natively from installation + key; scripts cannot supply another alarm UUID. An active alarm is not silently replaced: cancel it explicitly first. Pause/resume depend on the system's current countdown state. Schedule uses the same bounded seven-day replay-receipt rules as calendar writes. Preserve pending requests when an outcome is unknown. + +The extension includes native AlarmKit countdown Live Activity/Dynamic Island UI. It displays system dates without rerunning JavaScript. AlarmKit authorization, presentation, locked-device behavior, delivery and acknowledgments require physical-device acceptance. This API does not enumerate or edit alarms owned by Apple's Clock app. + +[Runnable Focus Timer](examples/alarm-focus-timer). + +## Imported JSON and CSV + +```js +const files = await $documents.list(); // [{id,name,type,bytes}] +const object = await $documents.readJSON(files.find(f => f.type === "json").id); +const table = await $documents.readCSV(files.find(f => f.type === "csv").id); +// {headers:[...],rows:[[...]],truncated:false} +``` + +Enable documents and import through System Access. The native picker authorizes a source file; a bounded descriptor read rejects links, nonregular files and concurrent source changes. The original is never modified. Copies and handles are installation-local and not exported with the script. Up to eight files, 256 KiB each; JSON root must be an object or array. CSV supports UTF-8/BOM, quoted delimiters/newlines and escaped quotes, up to 500 data rows, 32 unique nonempty headers and 8 KiB per cell. Ragged rows, invalid UTF-8, unclosed quotes and excess data reject rather than silently truncate. IDs are native UUIDs, never paths or bookmarks. Reimport captures an updated source; automatic live-file synchronization is not provided. + +[Runnable My JSON Data](examples/document-data). + +## Selected contacts + +```js +const people = await $contacts.selected(); +// [{id,name,organization,phones:[...],emails:[...]}] +``` + +Authorize Contacts and select up to 20 contacts in System Access, then save. The selection UI lists at most 200 system-accessible contacts. On iOS, limited authorization is respected. Each returned contact includes up to three phone numbers and three email addresses. Notes, photos, birthdays, arbitrary search and contact mutation are not exposed. No native contacts cache is retained; revocation is checked on reads. Data sent to Web Studio is always an editable sample, never this native selection. + +[Runnable People Close By](examples/selected-contacts). + +## Maps and places + +```js +await $maps.search({query:"park",latitude:37.33,longitude:-122.01,radiusMeters:3000}); +await $maps.geocode("Cupertino, California"); +await $maps.reverseGeocode({latitude:37.33,longitude:-122.01}); +const map = await $maps.snapshot({latitude:37.33,longitude:-122.01,radiusMeters:2000,size:256}); +// map: {image:,width,height,provider:"Apple Maps"} +``` + +Search/geocoding return up to five results. Queries/address text are bounded to 256 UTF-8 bytes; supplied coordinates are validated. Region radius is 100–50000 meters. Snapshots are square, integer 128–512 points, bounded JPEGs of at most 256 KiB; iOS uses scale 1 to bound decoded pixels. Preserve map attribution when displaying the image. New systems use MapKit geocoding requests; older iOS uses the supported fallback. Place results expose name/address/coordinates, not arbitrary provider objects. Older iOS returns the same bounded name/address/coordinate shape through its fallback. No device location is read implicitly. Requests are cancellable and system service availability/extension resource limits still apply. + +[Runnable A Place to Go](examples/map-place). + +## Home accessories and scenes + +```js +const items = await $home.items(); // selected {id,name,kind,metric,unit,value,isCached:true} +await $home.setPower({id:"",on:true}); +await $home.runScene({id:"",requestID:"11111111-1111-4111-8111-111111111111"}); +``` + +Authorize Home, select up to 20 exposed items and save. Discovery is bounded and exposes power, temperature, humidity, motion/contact sensors and scenes. Only power-state characteristics are directly writable; `setPower` is an absolute Boolean, never a blind toggle. Sensor values are HomeKit's cached readings and can be null; no claim of live accessory connectivity is made. Native macOS returns unavailable. + +Scenes can contain security-sensitive actions according to the user's Home configuration; native selection describes this before granting access. Only explicitly selected scenes execute, and platform authentication/lock restrictions remain in force. Scene execution uses private bounded replay receipts, with the same uncertainty and retention rules as calendar writes. An acknowledgment is not proof that every physical accessory reached its target. No arbitrary characteristic writes, lock/door API, discovery pairing, camera streaming or Home configuration changes are exposed. + +[Runnable A Calmer Home](examples/home-light). + +## Web Studio, CLI and validation + +Web Studio has editable per-method samples plus a **System access grants** section. `systemAccess.permissions` and selected `contacts`/`home` IDs model native scope. Manifest permission, Runtime 1.6, action-only writes, argument bounds and query budgets run before mock replies. Simulated notification/alarm/calendar/home mutations return `systemState` into the browser draft; Reset simulated state clears it. `systemCommitUncertain:true` models prepared mutation receipts. None of this touches Apple's services or changes package exports. Simulated receipts operate on the saved preview state; they do not certify real seven-day retention or OS side effects. + +Native CLI check/pack validate manifests and syntax. CLI renders use isolated read fixtures, with diagnostics that offline replies do not certify native query arguments; new system writes are rejected. An offline fixture cannot authorize a real system operation. Native record/receipt/grant files are separate from package-relative `$file` and public `$storage` keys. + +Run `node Scripts/test-system-services.mjs` for deterministic native validators, grants, file imports and private-key isolation. Application-host tests also verify real JSExport calls deny unmanaged/preview packages. Preview tests cover scopes, writes, replay/uncertainty, lifecycle simulation and budgets. Native builds/fixtures are not proof of real permissions, delivery or hardware behavior. + +## Physical-device acceptance before release + +- Fresh install, deny/grant/revoke each OS permission; verify missing native grant, copied widget and retired owner stay denied. +- One-time/daily notifications: replace/cancel, local-time/DST behavior, Focus suppression, capacity and concurrent app/extension requests. +- Health: readable data, no shared samples, actual zeros, new metric review, day boundaries and widget memory. +- Calendar: selected/writable source, create/update, denied foreign/recurring event, same request replay, changed arguments, interruption and unchanged existing events. +- Weather/Maps: offline/cache expiry, native attribution, geocoding, snapshot pixels, cancellation and extension memory. +- AlarmKit: authorize/deny, countdown Live Activity/Dynamic Island, pause/resume/stop/cancel, locked device, acknowledgment timeout and no Clock-app access. +- File picker: iCloud Drive and local files, UTF-8/quoted CSV, source unchanged, copies surviving relaunch, cross-widget denial and stale grant writes. +- Contacts/Home: limited selection, revocation, missing items, no automatic prompts in widgets, selected lights/scenes only, system authentication and stale sensor labels. +- Delete/rename/remix: native schedule cleanup requests, grant isolation, original package records retained and no same-name inheritance. + +Sources: [local notifications](https://developer.apple.com/documentation/usernotifications/scheduling-a-notification-locally-from-your-app), [HealthKit statistics](https://developer.apple.com/documentation/healthkit/hkstatisticscollectionquery), [EventKit access](https://developer.apple.com/documentation/eventkit/accessing-the-event-store), [AlarmKit](https://developer.apple.com/documentation/alarmkit), [Contacts access](https://developer.apple.com/documentation/contacts/accessing-the-contact-store), [HomeKit](https://developer.apple.com/documentation/homekit). diff --git a/iOS/ScriptWidget.xcodeproj/project.pbxproj b/iOS/ScriptWidget.xcodeproj/project.pbxproj index f209d037..fbd2c158 100644 --- a/iOS/ScriptWidget.xcodeproj/project.pbxproj +++ b/iOS/ScriptWidget.xcodeproj/project.pbxproj @@ -36,6 +36,7 @@ 774D548855AA4BF0BF1E9DBA /* ScriptWidgetRuntimeLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC40ED375515427089251479 /* ScriptWidgetRuntimeLocation.swift */; }; 7D960C5FE159D8D1CB823654 /* ScriptWidgetRuntimeSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AE63BF6B17D4C800EFF80E9 /* ScriptWidgetRuntimeSystem.swift */; }; 84C1353FBC065F971E23478C /* PackageCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99DD0AE0F4C799D5DFEE8E76 /* PackageCacheTests.swift */; }; + 0A3A531AF5AC4D499D95C0F1 /* SystemServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BD0B733DF8415FBF9D22F9 /* SystemServiceTests.swift */; }; 8B3078FA29098AA7314D1B74 /* ScriptWidgetRuntimeHealth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 654916CAF3464C1D5149BB77 /* ScriptWidgetRuntimeHealth.swift */; }; 08A34358AD98E4A7706B116B /* ScriptWidgetRuntimeCalendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28960B338B1C363177987F8C /* ScriptWidgetRuntimeCalendar.swift */; }; 10CCA333072F422691BA7C60 /* ScriptWidgetRuntimeReminders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46E343599D0D41D29692292B /* ScriptWidgetRuntimeReminders.swift */; }; @@ -131,6 +132,7 @@ D1CBAED228D5B13400DE4E65 /* ScriptLiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CBAED128D5B13400DE4E65 /* ScriptLiveActivityAttributes.swift */; }; D1CBAED328D5B13400DE4E65 /* ScriptLiveActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CBAED128D5B13400DE4E65 /* ScriptLiveActivityAttributes.swift */; }; D1CBAED628D5B1DE00DE4E65 /* ScriptLiveActivityWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CBAED528D5B1DE00DE4E65 /* ScriptLiveActivityWidget.swift */; }; + 909A08CF7F984EA5BBE67AE6 /* ScriptWidgetAlarmLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68A769B2F4CF48C693A359C8 /* ScriptWidgetAlarmLiveActivity.swift */; }; D1CBAEDA28D5DA9700DE4E65 /* ScriptWidgetDataObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CBAED928D5DA9700DE4E65 /* ScriptWidgetDataObject.swift */; }; D1F9883228CCE7BF00C56B06 /* ScriptCodePreviewConsoleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F9883128CCE7BF00C56B06 /* ScriptCodePreviewConsoleView.swift */; }; D58FF19E4AF865ACBDAF306A /* ScriptWidgetElementTagExtras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5116262BE362901C3EAD93A5 /* ScriptWidgetElementTagExtras.swift */; }; @@ -407,8 +409,28 @@ F2D738C925D0CA8900021E08 /* SettingTemplatesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D738C825D0CA8900021E08 /* SettingTemplatesView.swift */; }; F2F0A7AE27F6841700D7911B /* ScriptWidgetRuntimeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F0A7AD27F6841700D7911B /* ScriptWidgetRuntimeFile.swift */; }; FBABB490DFDA409D8D266385 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC92A21DC4745FB8B1F582E /* ScriptWidgetRuntimeCloudJSON.swift */; }; + 493C018FD30D4FC1A2D33CAE /* ScriptWidgetRuntimeHome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279E48E9059E44EEBCA5BE1E /* ScriptWidgetRuntimeHome.swift */; }; + 6CE6807AB92D473B90430578 /* ScriptWidgetRuntimeContacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 122CF699B12040C89F141B81 /* ScriptWidgetRuntimeContacts.swift */; }; + 14B364BBCA2C463B895ED69D /* ScriptWidgetRuntimeDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4615A24A08384031A6652F21 /* ScriptWidgetRuntimeDocuments.swift */; }; + 6E3C7EE934474FD4AC1E6AE6 /* ScriptWidgetRuntimeAlarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978C2231EB584BD39A45C9DE /* ScriptWidgetRuntimeAlarms.swift */; }; + 4C8326FBA7B64D51AAE7097E /* ScriptWidgetRuntimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AB6B70AB594C658947233F /* ScriptWidgetRuntimeWeather.swift */; }; + 82FBA0AE8CE34B4DAD0C4897 /* ScriptWidgetRuntimeMaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C957ED353A04BC4B282DCC8 /* ScriptWidgetRuntimeMaps.swift */; }; + 89C39D3BB1E643AEA85EA2B5 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E85C982B018243269DEDC303 /* ScriptWidgetRuntimeHealthHistory.swift */; }; + 5CCE97E07B3D455185E8946E /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0E44B4112D435998BB2C2E /* ScriptWidgetRuntimeCalendarWrites.swift */; }; + 3B1F005818494B1596C2F2D6 /* ScriptWidgetRuntimeNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82031D1FFF65497BAE2FD92D /* ScriptWidgetRuntimeNotifications.swift */; }; + DC35F11FA99C4BB197FCAF63 /* ScriptWidgetRuntimeSystemServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB010D58873044FCADF6EF73 /* ScriptWidgetRuntimeSystemServices.swift */; }; F2F0A7AF27F6841700D7911B /* ScriptWidgetRuntimeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F0A7AD27F6841700D7911B /* ScriptWidgetRuntimeFile.swift */; }; 0F853DA1A57C46DCB7F10E8E /* ScriptWidgetRuntimeCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC92A21DC4745FB8B1F582E /* ScriptWidgetRuntimeCloudJSON.swift */; }; + AAE5AEE8B6164B898A7A19D0 /* ScriptWidgetRuntimeHome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 279E48E9059E44EEBCA5BE1E /* ScriptWidgetRuntimeHome.swift */; }; + 2287776114FE4116B6AA410F /* ScriptWidgetRuntimeContacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 122CF699B12040C89F141B81 /* ScriptWidgetRuntimeContacts.swift */; }; + 7D78B97645E64E2EA0396697 /* ScriptWidgetRuntimeDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4615A24A08384031A6652F21 /* ScriptWidgetRuntimeDocuments.swift */; }; + A9953FF2D7CA4FB0B9D3F665 /* ScriptWidgetRuntimeAlarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978C2231EB584BD39A45C9DE /* ScriptWidgetRuntimeAlarms.swift */; }; + 4AE33603CDAC471783071C79 /* ScriptWidgetRuntimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5AB6B70AB594C658947233F /* ScriptWidgetRuntimeWeather.swift */; }; + BAFA4CE9BB80400EA07E1C66 /* ScriptWidgetRuntimeMaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C957ED353A04BC4B282DCC8 /* ScriptWidgetRuntimeMaps.swift */; }; + 51E80A0B83904F0CA3862B66 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E85C982B018243269DEDC303 /* ScriptWidgetRuntimeHealthHistory.swift */; }; + 4087BA20E7C54529BCA5E8CF /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0E44B4112D435998BB2C2E /* ScriptWidgetRuntimeCalendarWrites.swift */; }; + 20BFB3F656E44E0CAF48598F /* ScriptWidgetRuntimeNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82031D1FFF65497BAE2FD92D /* ScriptWidgetRuntimeNotifications.swift */; }; + 815D58697D5C47EEBE5A4E1F /* ScriptWidgetRuntimeSystemServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB010D58873044FCADF6EF73 /* ScriptWidgetRuntimeSystemServices.swift */; }; F2F8398E27CBBC8800D74288 /* HomeHelloView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F8398D27CBBC8800D74288 /* HomeHelloView.swift */; }; F2FC062327DC5D9000A6A99D /* MirrorEditorScriptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FC062227DC5D9000A6A99D /* MirrorEditorScriptView.swift */; }; F2FC062827DC5DB300A6A99D /* WKWebViewJavascriptBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2FC062527DC5DB300A6A99D /* WKWebViewJavascriptBridge.swift */; }; @@ -423,6 +445,7 @@ A815305D31B24EFE9AE72321 /* ScriptWidgetCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113B591460C0428199E1B2D3 /* ScriptWidgetCloudJSON.swift */; }; 4635FD7C47944227987DB767 /* ScriptWidgetRecordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96A79828AD84572AB1D6170 /* ScriptWidgetRecordsView.swift */; }; 6E5ACA07639849578EAF9019 /* ScriptWidgetCloudJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5802CF1E2FEF4FFCAAC3BEC9 /* ScriptWidgetCloudJSONView.swift */; }; + 8AFAEADE37DE4A0589FB69CB /* ScriptWidgetSystemAccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3870C1E2FAC54FA2B5CC888A /* ScriptWidgetSystemAccessView.swift */; }; A666715063344E9EBBE6E4E9 /* ScriptWidgetStorageUpgradeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3501C2E4244E879AD942D7 /* ScriptWidgetStorageUpgradeView.swift */; }; D96A3CEA7A35471B83EE7BD1 /* ScriptWidgetRecordStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C847E9CCBC140F6B53AC772 /* ScriptWidgetRecordStore.swift */; }; 65E61B2E0949425591993A22 /* ScriptWidgetCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113B591460C0428199E1B2D3 /* ScriptWidgetCloudJSON.swift */; }; @@ -511,6 +534,7 @@ 750919EB639B4EB3B07D27FC /* ReloadWidgetAppIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReloadWidgetAppIntent.swift; sourceTree = ""; }; 95D38A9C0960C28615553017 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 99DD0AE0F4C799D5DFEE8E76 /* PackageCacheTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PackageCacheTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/PackageCacheTests.swift; sourceTree = ""; }; + 85BD0B733DF8415FBF9D22F9 /* SystemServiceTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SystemServiceTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift; sourceTree = ""; }; 9CAE338C670B4A70B52A6CFD /* ScriptWidgetRuntimeStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeStorage.swift; sourceTree = ""; }; 99619D8E19192386E982EC46 /* ScriptWidgetStorageLock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageLock.swift; sourceTree = ""; }; A101000100000000000000B0 /* AISettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AISettings.swift; sourceTree = ""; }; @@ -599,6 +623,7 @@ D1BD329B28E0713D00F217ED /* ScriptLiveActivityDataObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptLiveActivityDataObject.swift; sourceTree = ""; }; D1CBAED128D5B13400DE4E65 /* ScriptLiveActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptLiveActivityAttributes.swift; sourceTree = ""; }; D1CBAED528D5B1DE00DE4E65 /* ScriptLiveActivityWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptLiveActivityWidget.swift; sourceTree = ""; }; + 68A769B2F4CF48C693A359C8 /* ScriptWidgetAlarmLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetAlarmLiveActivity.swift; sourceTree = ""; }; D1CBAED928D5DA9700DE4E65 /* ScriptWidgetDataObject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetDataObject.swift; sourceTree = ""; }; D1F9883128CCE7BF00C56B06 /* ScriptCodePreviewConsoleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptCodePreviewConsoleView.swift; sourceTree = ""; }; DC40ED375515427089251479 /* ScriptWidgetRuntimeLocation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeLocation.swift; sourceTree = ""; }; @@ -797,6 +822,16 @@ F2D738C825D0CA8900021E08 /* SettingTemplatesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingTemplatesView.swift; sourceTree = ""; }; F2F0A7AD27F6841700D7911B /* ScriptWidgetRuntimeFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeFile.swift; sourceTree = ""; }; 8EC92A21DC4745FB8B1F582E /* ScriptWidgetRuntimeCloudJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCloudJSON.swift; sourceTree = ""; }; + 279E48E9059E44EEBCA5BE1E /* ScriptWidgetRuntimeHome.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHome.swift; sourceTree = ""; }; + 122CF699B12040C89F141B81 /* ScriptWidgetRuntimeContacts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeContacts.swift; sourceTree = ""; }; + 4615A24A08384031A6652F21 /* ScriptWidgetRuntimeDocuments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeDocuments.swift; sourceTree = ""; }; + 978C2231EB584BD39A45C9DE /* ScriptWidgetRuntimeAlarms.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeAlarms.swift; sourceTree = ""; }; + D5AB6B70AB594C658947233F /* ScriptWidgetRuntimeWeather.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeWeather.swift; sourceTree = ""; }; + 9C957ED353A04BC4B282DCC8 /* ScriptWidgetRuntimeMaps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeMaps.swift; sourceTree = ""; }; + E85C982B018243269DEDC303 /* ScriptWidgetRuntimeHealthHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHealthHistory.swift; sourceTree = ""; }; + 9E0E44B4112D435998BB2C2E /* ScriptWidgetRuntimeCalendarWrites.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCalendarWrites.swift; sourceTree = ""; }; + 82031D1FFF65497BAE2FD92D /* ScriptWidgetRuntimeNotifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeNotifications.swift; sourceTree = ""; }; + DB010D58873044FCADF6EF73 /* ScriptWidgetRuntimeSystemServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeSystemServices.swift; sourceTree = ""; }; F2F8398D27CBBC8800D74288 /* HomeHelloView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeHelloView.swift; sourceTree = ""; }; F2FC062227DC5D9000A6A99D /* MirrorEditorScriptView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MirrorEditorScriptView.swift; sourceTree = ""; }; F2FC062527DC5DB300A6A99D /* WKWebViewJavascriptBridge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WKWebViewJavascriptBridge.swift; sourceTree = ""; }; @@ -811,6 +846,7 @@ 113B591460C0428199E1B2D3 /* ScriptWidgetCloudJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetCloudJSON.swift; sourceTree = ""; }; B96A79828AD84572AB1D6170 /* ScriptWidgetRecordsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRecordsView.swift; sourceTree = ""; }; 5802CF1E2FEF4FFCAAC3BEC9 /* ScriptWidgetCloudJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetCloudJSONView.swift; sourceTree = ""; }; + 3870C1E2FAC54FA2B5CC888A /* ScriptWidgetSystemAccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetSystemAccessView.swift; sourceTree = ""; }; BE3501C2E4244E879AD942D7 /* ScriptWidgetStorageUpgradeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageUpgradeView.swift; sourceTree = ""; }; A804AC8F6C5F4242BBA72345 /* ScriptWidgetStorageNamespaces.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageNamespaces.swift; sourceTree = ""; }; 903FF2D5FB884143B154AA20 /* ScriptWidgetStorageFiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageFiles.swift; sourceTree = ""; }; @@ -890,6 +926,7 @@ E9ABF8F095487FE21DB73700 /* RuntimeExecutionTests.swift */, 4504B2C47E011F6AE74734CD /* BrowserPreviewParityTests.swift */, 99DD0AE0F4C799D5DFEE8E76 /* PackageCacheTests.swift */, + 85BD0B733DF8415FBF9D22F9 /* SystemServiceTests.swift */, ); name = Tests; sourceTree = SOURCE_ROOT; @@ -1192,6 +1229,7 @@ isa = PBXGroup; children = ( D1CBAED528D5B1DE00DE4E65 /* ScriptLiveActivityWidget.swift */, + 68A769B2F4CF48C693A359C8 /* ScriptWidgetAlarmLiveActivity.swift */, D1BD329B28E0713D00F217ED /* ScriptLiveActivityDataObject.swift */, D132336628E09630002C26A2 /* ScriptDynamicIslandCreator.swift */, ); @@ -1303,6 +1341,7 @@ 113B591460C0428199E1B2D3 /* ScriptWidgetCloudJSON.swift */, B96A79828AD84572AB1D6170 /* ScriptWidgetRecordsView.swift */, 5802CF1E2FEF4FFCAAC3BEC9 /* ScriptWidgetCloudJSONView.swift */, + 3870C1E2FAC54FA2B5CC888A /* ScriptWidgetSystemAccessView.swift */, BE3501C2E4244E879AD942D7 /* ScriptWidgetStorageUpgradeView.swift */, F29118EC2793034D00B860B0 /* ScriptModel.swift */, D1A0000000E0000000000001 /* ScriptMetadata.swift */, @@ -1461,6 +1500,16 @@ F29119302793035E00B860B0 /* ScriptWidgetRuntimeDevice.swift */, F2F0A7AD27F6841700D7911B /* ScriptWidgetRuntimeFile.swift */, 8EC92A21DC4745FB8B1F582E /* ScriptWidgetRuntimeCloudJSON.swift */, + 279E48E9059E44EEBCA5BE1E /* ScriptWidgetRuntimeHome.swift */, + 122CF699B12040C89F141B81 /* ScriptWidgetRuntimeContacts.swift */, + 4615A24A08384031A6652F21 /* ScriptWidgetRuntimeDocuments.swift */, + 978C2231EB584BD39A45C9DE /* ScriptWidgetRuntimeAlarms.swift */, + D5AB6B70AB594C658947233F /* ScriptWidgetRuntimeWeather.swift */, + 9C957ED353A04BC4B282DCC8 /* ScriptWidgetRuntimeMaps.swift */, + E85C982B018243269DEDC303 /* ScriptWidgetRuntimeHealthHistory.swift */, + 9E0E44B4112D435998BB2C2E /* ScriptWidgetRuntimeCalendarWrites.swift */, + 82031D1FFF65497BAE2FD92D /* ScriptWidgetRuntimeNotifications.swift */, + DB010D58873044FCADF6EF73 /* ScriptWidgetRuntimeSystemServices.swift */, 1AE63BF6B17D4C800EFF80E9 /* ScriptWidgetRuntimeSystem.swift */, 654916CAF3464C1D5149BB77 /* ScriptWidgetRuntimeHealth.swift */, 28960B338B1C363177987F8C /* ScriptWidgetRuntimeCalendar.swift */, @@ -1971,6 +2020,7 @@ A120000600000000000000B0 /* WebStudioServerTests.swift in Sources */, B165542F120D2E511D4012B9 /* AIGenerationTests.swift in Sources */, 84C1353FBC065F971E23478C /* PackageCacheTests.swift in Sources */, + 0A3A531AF5AC4D499D95C0F1 /* SystemServiceTests.swift in Sources */, CE64AF58A011259D931CFF8F /* RuntimeExecutionTests.swift in Sources */, 264B37FB1BB1BFADE1A20B70 /* BrowserPreviewParityTests.swift in Sources */, 74884F234581499E712CA059 /* RuntimeUnitTests.swift in Sources */, @@ -2031,6 +2081,16 @@ F29119582793035E00B860B0 /* ScriptWidgetAttributeShadowModifier.swift in Sources */, F2F0A7AE27F6841700D7911B /* ScriptWidgetRuntimeFile.swift in Sources */, FBABB490DFDA409D8D266385 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */, + 493C018FD30D4FC1A2D33CAE /* ScriptWidgetRuntimeHome.swift in Sources */, + 6CE6807AB92D473B90430578 /* ScriptWidgetRuntimeContacts.swift in Sources */, + 14B364BBCA2C463B895ED69D /* ScriptWidgetRuntimeDocuments.swift in Sources */, + 6E3C7EE934474FD4AC1E6AE6 /* ScriptWidgetRuntimeAlarms.swift in Sources */, + 4C8326FBA7B64D51AAE7097E /* ScriptWidgetRuntimeWeather.swift in Sources */, + 82FBA0AE8CE34B4DAD0C4897 /* ScriptWidgetRuntimeMaps.swift in Sources */, + 89C39D3BB1E643AEA85EA2B5 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */, + 5CCE97E07B3D455185E8946E /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */, + 3B1F005818494B1596C2F2D6 /* ScriptWidgetRuntimeNotifications.swift in Sources */, + DC35F11FA99C4BB197FCAF63 /* ScriptWidgetRuntimeSystemServices.swift in Sources */, 7D960C5FE159D8D1CB823654 /* ScriptWidgetRuntimeSystem.swift in Sources */, 8B3078FA29098AA7314D1B74 /* ScriptWidgetRuntimeHealth.swift in Sources */, 08A34358AD98E4A7706B116B /* ScriptWidgetRuntimeCalendar.swift in Sources */, @@ -2053,6 +2113,7 @@ A815305D31B24EFE9AE72321 /* ScriptWidgetCloudJSON.swift in Sources */, 4635FD7C47944227987DB767 /* ScriptWidgetRecordsView.swift in Sources */, 6E5ACA07639849578EAF9019 /* ScriptWidgetCloudJSONView.swift in Sources */, + 8AFAEADE37DE4A0589FB69CB /* ScriptWidgetSystemAccessView.swift in Sources */, A666715063344E9EBBE6E4E9 /* ScriptWidgetStorageUpgradeView.swift in Sources */, D58FF19E4AF865ACBDAF306A /* ScriptWidgetElementTagExtras.swift in Sources */, F2BA1DA725D500B400363EEA /* EditAttributesView.swift in Sources */, @@ -2176,6 +2237,7 @@ F28D681F27CE8874000C2D03 /* ScriptWidgetElementTagGrid.swift in Sources */, D1CBAEDA28D5DA9700DE4E65 /* ScriptWidgetDataObject.swift in Sources */, D1CBAED628D5B1DE00DE4E65 /* ScriptLiveActivityWidget.swift in Sources */, + 909A08CF7F984EA5BBE67AE6 /* ScriptWidgetAlarmLiveActivity.swift in Sources */, F29119472793035E00B860B0 /* ScriptWidgetRuntime.swift in Sources */, 3DDAB85E7A78E9FAA8078100 /* ScriptWidgetRuntimeDelivery.swift in Sources */, A130000300000000000000B0 /* ScriptWidgetRuntimeDiagnostics.swift in Sources */, @@ -2206,6 +2268,16 @@ F28D681327CE764B000C2D03 /* ScriptWidgetAttributeClippedModifier.swift in Sources */, F2F0A7AF27F6841700D7911B /* ScriptWidgetRuntimeFile.swift in Sources */, 0F853DA1A57C46DCB7F10E8E /* ScriptWidgetRuntimeCloudJSON.swift in Sources */, + AAE5AEE8B6164B898A7A19D0 /* ScriptWidgetRuntimeHome.swift in Sources */, + 2287776114FE4116B6AA410F /* ScriptWidgetRuntimeContacts.swift in Sources */, + 7D78B97645E64E2EA0396697 /* ScriptWidgetRuntimeDocuments.swift in Sources */, + A9953FF2D7CA4FB0B9D3F665 /* ScriptWidgetRuntimeAlarms.swift in Sources */, + 4AE33603CDAC471783071C79 /* ScriptWidgetRuntimeWeather.swift in Sources */, + BAFA4CE9BB80400EA07E1C66 /* ScriptWidgetRuntimeMaps.swift in Sources */, + 51E80A0B83904F0CA3862B66 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */, + 4087BA20E7C54529BCA5E8CF /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */, + 20BFB3F656E44E0CAF48598F /* ScriptWidgetRuntimeNotifications.swift in Sources */, + 815D58697D5C47EEBE5A4E1F /* ScriptWidgetRuntimeSystemServices.swift in Sources */, 219AD8869A85F18C81A30804 /* ScriptWidgetRuntimeSystem.swift in Sources */, D84E5F5BA6A8C145C140773A /* ScriptWidgetRuntimeHealth.swift in Sources */, 379480111C85C446898E519E /* ScriptWidgetRuntimeCalendar.swift in Sources */, diff --git a/iOS/ScriptWidget/App/ScriptWidgetApp.swift b/iOS/ScriptWidget/App/ScriptWidgetApp.swift index 6ba3eb7b..17fc48a6 100644 --- a/iOS/ScriptWidget/App/ScriptWidgetApp.swift +++ b/iOS/ScriptWidget/App/ScriptWidgetApp.swift @@ -130,6 +130,7 @@ struct ScriptWidgetApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate; init() { + ScriptWidgetSystemServices.startLifecycle() if #available(iOS 16.2,*) { _ = sharedLiveActivityManager } ScriptWidgetPrecompiler.install() } diff --git a/iOS/ScriptWidget/App/Scripts/ScriptWidgetHomeView.swift b/iOS/ScriptWidget/App/Scripts/ScriptWidgetHomeView.swift index 5154564b..ca32b2e2 100644 --- a/iOS/ScriptWidget/App/Scripts/ScriptWidgetHomeView.swift +++ b/iOS/ScriptWidget/App/Scripts/ScriptWidgetHomeView.swift @@ -69,6 +69,7 @@ struct ScriptWidgetHomeView: View { @State private var selectedShareItem: ScriptModel? @State private var selectedRecordItem: ScriptModel? @State private var selectedCloudItem: ScriptModel? + @State private var selectedSystemItem: ScriptModel? @State private var selectedDeleteItem: ScriptModel? @State private var isShowingDeleteAlert = false @@ -96,7 +97,8 @@ struct ScriptWidgetHomeView: View { } message: { item in Text("“\(item.name)” and its project files will be removed. This can’t be undone.") } - .sheet(item: $selectedCloudItem) { item in ScriptWidgetCloudJSONView(package: item.package) } + .sheet(item: $selectedSystemItem) { item in ScriptWidgetSystemAccessView(package: item.package) } + .sheet(item: $selectedCloudItem) { item in ScriptWidgetCloudJSONView(package: item.package) } .sheet(item: $selectedRecordItem) { item in ScriptWidgetRecordsView(package: item.package) } @@ -228,6 +230,9 @@ struct ScriptWidgetHomeView: View { WidgetRowView(model: item) } .contextMenu { + if ScriptWidgetSystemAccessView.supports(item.package) { + Button("System Access", systemImage: "hand.raised") { selectedSystemItem = item } + } if item.package.readManifest()?.permissions.contains(.icloud) == true { Button("iCloud Data", systemImage: "icloud") { selectedCloudItem = item } } diff --git a/iOS/ScriptWidget/Info.plist b/iOS/ScriptWidget/Info.plist index fdd42801..11f8a40a 100644 --- a/iOS/ScriptWidget/Info.plist +++ b/iOS/ScriptWidget/Info.plist @@ -461,5 +461,11 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSContactsUsageDescription + Select contacts to share with your chosen widgets. + NSHomeKitUsageDescription + Read selected home accessories and run selected controls or scenes from widgets. + NSAlarmKitUsageDescription + Schedule alarms and timers you explicitly request from a widget. diff --git a/iOS/ScriptWidget/ScriptWidget.entitlements b/iOS/ScriptWidget/ScriptWidget.entitlements index 34562fdd..0038c4fd 100644 --- a/iOS/ScriptWidget/ScriptWidget.entitlements +++ b/iOS/ScriptWidget/ScriptWidget.entitlements @@ -29,5 +29,7 @@ group.everettjf.scriptwidget + com.apple.developer.homekit + diff --git a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-BaJfekQk.js b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-BaJfekQk.js deleted file mode 100644 index 0f976695..00000000 --- a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-BaJfekQk.js +++ /dev/null @@ -1,59 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();const Yd="modulepreload",Nd=function(n,e){return new URL(n,e).href},la={},Cs=function(e,t,i){let r=Promise.resolve();if(t&&t.length>0){let c=function(h){return Promise.all(h.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");r=c(t.map(h=>{if(h=Nd(h,i),h in la)return;la[h]=!0;const u=h.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(i)for(let p=o.length-1;p>=0;p--){const m=o[p];if(m.href===h&&(!u||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${h}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Yd,u||(d.as="script"),d.crossOrigin="",d.href=h,a&&d.setAttribute("nonce",a),document.head.appendChild(d),u)return new Promise((p,m)=>{d.addEventListener("load",p),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&s(l.reason);return e().catch(s)})};let po=[],mh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=mh[i])e=i+1;else return!0;if(e==t)return!1}}function aa(n){return n>=127462&&n<=127487}const ca=8205;function Hd(n,e,t=!0,i=!0){return(t?Oh:_d)(n,e,i)}function Oh(n,e,t){if(e==n.length)return e;e&&gh(n.charCodeAt(e))&&yh(n.charCodeAt(e-1))&&e--;let i=Ts(n,e);for(e+=ha(i);e=0&&aa(Ts(n,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function _d(n,e,t){for(;e>1;){let i=Oh(n,e-2,t);if(i=56320&&n<57344}function yh(n){return n>=55296&&n<56320}function ha(n){return n<65536?1:2}class re{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Bi(this,e,t);let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),kt.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Bi(this,e,t);let i=[];return this.decompose(e,t,i,0),kt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new pn(this),s=new pn(e);for(let o=t,l=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(l+=r.value.length,r.done||l>=i)return!0}}iter(e=1){return new pn(this,e)}iterRange(e,t=this.length){return new Ah(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?re.empty:e.length<=32?new ve(e):kt.from(ve.split(e,[]))}}class ve extends re{constructor(e,t=Jd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.text[s],l=r+o.length;if((t?i:l)>=e)return new ep(r,l,i,o);r=l+1,i++}}decompose(e,t,i,r){let s=e<=0&&t>=this.length?this:new ve(ua(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=i.pop(),l=Or(s.text,o.text.slice(),0,s.length);if(l.length<=32)i.push(new ve(l,o.length+s.length));else{let a=l.length>>1;i.push(new ve(l.slice(0,a)),new ve(l.slice(a)))}}else i.push(s)}replace(e,t,i){if(!(i instanceof ve))return super.replace(e,t,i);[e,t]=Bi(this,e,t);let r=Or(this.text,Or(i.text,ua(this.text,0,e)),t),s=this.length+i.length-(t-e);return r.length<=32?new ve(r,s):kt.from(ve.split(r,[]),s)}sliceString(e,t=this.length,i=` -`){[e,t]=Bi(this,e,t);let r="";for(let s=0,o=0;s<=t&&oe&&o&&(r+=i),es&&(r+=l.slice(Math.max(0,e-s),t-s)),s=a+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let s of e)i.push(s),r+=s.length+1,i.length==32&&(t.push(new ve(i,r)),i=[],r=-1);return r>-1&&t.push(new ve(i,r)),t}}class kt extends re{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.children[s],l=r+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,r);r=l+1,i=a+1}}decompose(e,t,i,r){for(let s=0,o=0;o<=t&&s=o){let c=r&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!c?i.push(l):l.decompose(e-o,t-o,i,c)}o=a+1}}replace(e,t,i){if([e,t]=Bi(this,e,t),i.lines=s&&t<=l){let a=o.replace(e-s,t-s,i),c=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>c>>6){let h=this.children.slice();return h[r]=a,new kt(h,this.length-(t-e)+i.length)}return super.replace(s,l,a)}s=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=Bi(this,e,t);let r="";for(let s=0,o=0;se&&s&&(r+=i),eo&&(r+=l.sliceString(e-o,t-o,i)),o=a+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof kt))return 0;let i=0,[r,s,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==l)return i;let a=this.children[r],c=e.children[s];if(a!=c)return i+a.scanIdentical(c,t);i+=a.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ve(d,t)}let r=Math.max(32,i>>5),s=r<<1,o=r>>1,l=[],a=0,c=-1,h=[];function u(d){let p;if(d.lines>s&&d instanceof kt)for(let m of d.children)u(m);else d.lines>o&&(a>o||!a)?(f(),l.push(d)):d instanceof ve&&a&&(p=h[h.length-1])instanceof ve&&d.lines+p.lines<=32?(a+=d.lines,c+=d.length+1,h[h.length-1]=new ve(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>r&&f(),a+=d.lines,c+=d.length+1,h.push(d))}function f(){a!=0&&(l.push(h.length==1?h[0]:kt.from(h,c)),c=-1,a=h.length=0)}for(let d of e)u(d);return f(),l.length==1?l[0]:new kt(l,t)}}re.empty=new ve([""],0);function Jd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Or(n,e,t=0,i=1e9){for(let r=0,s=0,o=!0;s=t&&(a>i&&(l=l.slice(0,i-r)),r0?1:(e instanceof ve?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],s=this.offsets[i],o=s>>1,l=r instanceof ve?r.text.length:r.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(r instanceof ve){let a=r.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=r.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ve?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Ah{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new pn(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class bh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(re.prototype[Symbol.iterator]=function(){return this.iter()},pn.prototype[Symbol.iterator]=Ah.prototype[Symbol.iterator]=bh.prototype[Symbol.iterator]=function(){return this});class ep{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}}function Bi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Ze(n,e,t=!0,i=!0){return Hd(n,e,t,i)}function tp(n){return n>=56320&&n<57344}function ip(n){return n>=55296&&n<56320}function Ne(n,e){let t=n.charCodeAt(e);if(!ip(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return tp(i)?(t-55296<<10)+(i-56320)+65536:t}function fl(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Qt(n){return n<65536?1:2}const mo=/\r\n?|\n/;var De=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(De||(De={}));class Zt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=l}else{if(i!=De.Simple&&c>=e&&(i==De.TrackDel&&re||i==De.TrackBefore&&re))return null;if(c>e||c==e&&t<0&&!l)return e==r||t<0?s:s+a;s+=a}r=c}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let i=0,r=0;i=0&&r<=t&&l>=e)return rt?"cover":!0;r=l}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new Zt(e)}static create(e){return new Zt(e)}}class $e extends Zt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Oo(this,(t,i,r,s,o)=>e=e.replace(r,r+(i-t),o),!1),e}mapDesc(e,t=!1){return go(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,s=0;r=0){t[r]=l,t[r+1]=o;let a=r>>1;for(;i.length0&&Gt(i,t,s.text),s.forward(h),l+=h}let c=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let r=[],s=[],o=0,l=null;function a(h=!1){if(!h&&!r.length)return;of||u<0||f>t)throw new RangeError(`Invalid change range ${u} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?re.of(d.split(i||mo)):d:re.empty,m=p.length;if(u==f&&m==0)return;uo&&Le(r,u-o,-1),Le(r,f-u,m),Gt(s,r,p),o=f}}return c(e),a(!l),l}static empty(e){return new $e(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let r=0;rl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;i.length=0&&t<=0&&t==n[r+1]?n[r]+=e:r>=0&&e==0&&n[r]==0?n[r+1]+=t:i?(n[r]+=e,n[r+1]+=t):n.push(e,t)}function Gt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(r,c,s,h,u),r=c,s=h}}}function go(n,e,t,i=!1){let r=[],s=i?[]:null,o=new Sn(n),l=new Sn(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let c=Math.min(o.len,l.len);Le(r,c,-1),o.forward(c),l.forward(c)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let c=0,h=o.len;for(;h;)if(l.ins==-1){let u=Math.min(h,l.len);c+=u,h-=u,l.forward(u)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>c),s.forward2(a),o.forward(a)}}}}class Sn{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?re.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?re.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Yt{constructor(e,t,i,r){this.from=e,this.to=t,this.flags=i,this.goalColumn=r}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new Yt(i,r,this.flags,this.goalColumn)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return A.range(e,t,void 0,void 0,i);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return A.range(this.anchor,r,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return A.range(e.anchor,e.head)}static create(e,t,i,r){return new Yt(e,t,i,r)}}class A{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:A.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new A(e.ranges.map(t=>Yt.fromJSON(t)),e.main)}static single(e,t=e){return new A([A.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,r=0;rr.from-s.from),t=e.indexOf(i);for(let r=1;rs.head?A.range(a,l):A.range(l,a))}}return new A(e,t)}}function xh(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let dl=0;class K{constructor(e,t,i,r,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=dl++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new K(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:pl),!!e.static,e.enables)}of(e){return new gr([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new gr(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new gr(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function pl(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class gr{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=dl++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,l=this.type==2,a=!1,c=!1,h=[];for(let u of this.dependencies)u=="doc"?a=!0:u=="selection"?c=!0:(((t=e[u.id])!==null&&t!==void 0?t:1)&1)==0&&h.push(e[u.id]);return{create(u){return u.values[o]=i(u),1},update(u,f){if(a&&f.docChanged||c&&(f.docChanged||f.selection)||yo(u,h)){let d=i(u);if(l?!fa(d,u.values[o],r):!r(d,u.values[o]))return u.values[o]=d,1}return 0},reconfigure:(u,f)=>{let d,p=f.config.address[s];if(p!=null){let m=Cr(f,p);if(this.dependencies.every(O=>O instanceof K?f.facet(O)===u.facet(O):O instanceof Te?f.field(O,!1)==u.field(O,!1):!0)||(l?fa(d=i(u),m,r):r(d=i(u),m)))return u.values[o]=m,0}else d=i(u);return u.values[o]=d,1}}}get extension(){return this}}function fa(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),r=t.map(a=>a.type),s=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let c=[];for(let h=0;hi===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(jn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let s=i.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(i.values[t]=o,1)},reconfigure:(i,r)=>{let s=i.facet(jn),o=r.facet(jn),l;return(l=s.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,jn.of({field:this,create:e})]}get extension(){return this}}const fi={lowest:4,low:3,default:2,high:1,highest:0};function rn(n){return e=>new wh(e,n)}const si={highest:rn(fi.highest),high:rn(fi.high),default:rn(fi.default),low:rn(fi.low),lowest:rn(fi.lowest)};class wh{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Hi{of(e){return new Ao(this,e)}reconfigure(e){return Hi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Ao{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class Pr{constructor(e,t,i,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let r=[],s=Object.create(null),o=new Map;for(let f of rp(e,t,o))f instanceof Te?r.push(f):(s[f.facet.id]||(s[f.facet.id]=[])).push(f);let l=Object.create(null),a=[],c=[];for(let f of r)l[f.id]=c.length<<1,c.push(d=>f.slot(d));let h=i?.config.facets;for(let f in s){let d=s[f],p=d[0].facet,m=h&&h[f]||[];if(d.every(O=>O.type==0))if(l[p.id]=a.length<<1|1,pl(m,d))a.push(i.facet(p));else{let O=p.combine(d.map(y=>y.value));a.push(i&&p.compare(O,i.facet(p))?i.facet(p):O)}else{for(let O of d)O.type==0?(l[O.id]=a.length<<1|1,a.push(O.value)):(l[O.id]=c.length<<1,c.push(y=>O.dynamicSlot(y)));l[p.id]=c.length<<1,c.push(O=>np(O,p,d))}}let u=c.map(f=>f(l));return new Pr(e,o,u,l,a,s)}}function rp(n,e,t){let i=[[],[],[],[],[]],r=new Map;function s(o,l){let a=r.get(o);if(a!=null){if(a<=l)return;let c=i[a].indexOf(o);c>-1&&i[a].splice(c,1),o instanceof Ao&&t.delete(o.compartment)}if(r.set(o,l),Array.isArray(o))for(let c of o)s(c,l);else if(o instanceof Ao){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let c=e.get(o.compartment)||o.inner;t.set(o.compartment,c),s(c,l)}else if(o instanceof wh)s(o.inner,o.prec);else if(o instanceof Te)i[l].push(o),o.provides&&s(o.provides,l);else if(o instanceof gr)i[l].push(o),o.facet.extensions&&s(o.facet.extensions,fi.default);else{let c=o.extension;if(!c)throw new Error(`Unrecognized extension value in extension set (${o}).`);if(c==o)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(c,l)}}return s(n,fi.default),i.reduce((o,l)=>o.concat(l))}function mn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let r=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|r}function Cr(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const vh=K.define(),bo=K.define({combine:n=>n.some(e=>e),static:!0}),kh=K.define({combine:n=>n.length?n[0]:void 0,static:!0}),Qh=K.define(),Ph=K.define(),Ch=K.define(),Th=K.define({combine:n=>n.length?n[0]:!1});class zt{constructor(e,t){this.type=e,this.value=t}static define(){return new sp}}class sp{of(e){return new zt(this,e)}}class op{constructor(e){this.map=e}of(e){return new W(this,e)}}class W{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new W(this.type,t)}is(e){return this.type==e}static define(e={}){return new op(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let s=r.map(t);s&&i.push(s)}return i}}W.reconfigure=W.define();W.appendConfig=W.define();class Pe{constructor(e,t,i,r,s,o){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,i&&xh(i,t.newLength),s.some(l=>l.type==Pe.time)||(this.annotations=s.concat(Pe.time.of(Date.now())))}static create(e,t,i,r,s,o){return new Pe(e,t,i,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Pe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Pe.time=zt.define();Pe.userEvent=zt.define();Pe.addToHistory=zt.define();Pe.remote=zt.define();function lp(n,e){let t=[];for(let i=0,r=0;;){let s,o;if(i=n[i]))s=n[i++],o=n[i++];else if(r=0;r--){let s=i[r](n);s instanceof Pe?n=s:Array.isArray(s)&&s.length==1&&s[0]instanceof Pe?n=s[0]:n=Rh(e,Zi(s),!1)}return n}function cp(n){let e=n.startState,t=e.facet(Ch),i=n;for(let r=t.length-1;r>=0;r--){let s=t[r](n);s&&Object.keys(s).length&&(i=$h(i,So(e,s,n.changes.newLength),!0))}return i==n?n:Pe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const hp=[];function Zi(n){return n==null?hp:Array.isArray(n)?n:[n]}var ye=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(ye||(ye={}));const up=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let xo;try{xo=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function fp(n){if(xo)return xo.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||up.test(t)))return!0}return!1}function dp(n){return e=>{if(!/\S/.test(e))return ye.Space;if(fp(e))return ye.Word;for(let t=0;t-1)return ye.Word;return ye.Other}}class _{constructor(e,t,i,r,s,o){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let l=0;lr.set(c,a)),t=null),r.set(l.value.compartment,l.value.extension)):l.is(W.reconfigure)?(t=null,i=l.value):l.is(W.appendConfig)&&(t=null,i=Zi(i).concat(l.value));let s;t?s=e.startState.values.slice():(t=Pr.resolve(i,r,this),s=new _(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,c)=>c.reconfigure(a,this),null).values);let o=e.startState.facet(bo)?e.newSelection:e.newSelection.asSingle();new _(t,e.newDoc,o,s,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:A.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),s=[i.range],o=Zi(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return _.create({doc:e.doc,selection:A.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Pr.resolve(e.extensions||[],new Map),i=e.doc instanceof re?e.doc:re.of((e.doc||"").split(t.staticFacet(_.lineSeparator)||mo)),r=e.selection?e.selection instanceof A?e.selection:A.single(e.selection.anchor,e.selection.head):A.single(0);return xh(r,i.length),t.staticFacet(bo)||(r=r.asSingle()),new _(t,i,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(_.tabSize)}get lineBreak(){return this.facet(_.lineSeparator)||` -`}get readOnly(){return this.facet(Th)}phrase(e,...t){for(let i of this.facet(_.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?i:t[s-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let s of this.facet(vh))for(let o of s(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return dp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Ze(t,o,!1);if(s(t.slice(a,o))!=ye.Word)break;o=a}for(;ln.length?n[0]:4});_.lineSeparator=kh;_.readOnly=Th;_.phrases=K.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(r=>n[r]==e[r])}});_.languageData=vh;_.changeFilter=Qh;_.transactionFilter=Ph;_.transactionExtender=Ch;Hi.reconfigure=W.define();function yt(n,e,t={}){let i={};for(let r of n)for(let s of Object.keys(r)){let o=r[s],l=i[s];if(l===void 0)i[s]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,s))i[s]=t[s](l,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}class Jt{eq(e){return this==e}range(e,t=e){return wo.create(e,t,this)}}Jt.prototype.startSide=Jt.prototype.endSide=0;Jt.prototype.point=!1;Jt.prototype.mapMode=De.TrackDel;function ml(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let wo=class Kh{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Kh(e,t,i)}};function vo(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Ol{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let s=i?this.to:this.from;for(let o=r,l=s.length;;){if(o==l)return o;let a=o+l>>1,c=s[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return c>=0?o:l;c>=0?l=a:o=a+1}}between(e,t,i,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,s);sd||f==d&&c.startSide>0&&c.endSide<=0)continue;(d-f||c.endSide-c.startSide)<0||(o<0&&(o=f),c.point&&(l=Math.max(l,d-f)),i.push(c),r.push(f-o),s.push(d-o))}return{mapped:i.length?new Ol(r,s,i,l):null,pos:o}}}class N{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new N(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(vo)),this.isEmpty)return t.length?N.of(t):this;let l=new Zh(this,null,-1).goto(0),a=0,c=[],h=new Bt;for(;l.value||a=0){let u=t[a++];h.addInner(u.from,u.to,u.value)||c.push(u)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||sl.to||s=s&&e<=s+o.length&&o.between(s,e-s,t-s,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return xn.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return xn.from(e).goto(t)}static compare(e,t,i,r,s=-1){let o=e.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=s),l=t.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=s),a=da(o,l,i),c=new sn(o,a,s),h=new sn(l,a,s);i.iterGaps((u,f,d)=>pa(c,u,h,f,d,r)),i.empty&&i.length==0&&pa(c,0,h,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=999999999);let s=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let l=da(s,o),a=new sn(s,l,0).goto(i),c=new sn(o,l,0).goto(i);for(;;){if(a.to!=c.to||!ko(a.active,c.active)||a.point&&(!c.point||!ml(a.point,c.point)))return!1;if(a.to>r)return!0;a.next(),c.next()}}static spans(e,t,i,r,s=-1){let o=new sn(e,null,s).goto(t),l=t,a=o.openStart;for(;;){let c=Math.min(o.to,i);if(o.point){let h=o.activeForPoint(o.to),u=o.pointFroml&&(r.span(l,c,o.active,a),a=o.openEnd(c));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Bt;for(let r of e instanceof wo?[e]:t?pp(e):e)i.add(r.from,r.to,r.value);return i.finish()}static join(e){if(!e.length)return N.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let r=e[i];r!=N.empty;r=r.nextLayer)t=new N(r.chunkPos,r.chunk,t,Math.max(r.maxPoint,t.maxPoint));return t}}N.empty=new N([],[],null,-1);function pp(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(vo);e=i}return n}N.empty.nextLayer=N.empty;class Bt{finishChunk(e){this.chunks.push(new Ol(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Bt)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(N.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=N.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function da(n,e,t){let i=new Map;for(let s of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&r.push(new Zh(o,t,i,s));return r.length==1?r[0]:new xn(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)$s(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)$s(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),$s(this.heap,0)}}}function $s(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let r=n[i];if(i+1=0&&(r=n[i+1],i++),t.compare(r)<0)break;n[i]=t,n[e]=r,e=i}}class sn{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=xn.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Vn(this.active,e),Vn(this.activeTo,e),Vn(this.activeRank,e),this.minActive=ma(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:s}=this.cursor;for(;t0;)t++;Yn(this.active,t,i),Yn(this.activeTo,t,r),Yn(this.activeRank,t,s),e&&Yn(e,t,this.cursor.from),this.minActive=ma(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&Vn(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[r]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function pa(n,e,t,i,r,s){n.goto(e),t.goto(i);let o=i+r,l=i,a=i-e,c=!!s.boundChange;for(let h=!1;;){let u=n.to+a-t.to,f=u||n.endSide-t.endSide,d=f<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&ml(n.point,t.point)&&ko(n.activeForPoint(n.to),t.activeForPoint(t.to))||s.comparePoint(l,p,n.point,t.point),h=!1):(h&&s.boundChange(l),p>l&&!ko(n.active,t.active)&&s.compareRange(l,p,n.active,t.active),c&&po)break;l=d,f<=0&&n.next(),f>=0&&t.next()}}function ko(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function ma(n,e){let t=-1,i=1e9;for(let r=0;r=e)return r;if(r==n.length)break;s+=n.charCodeAt(r)==9?t-s%t:1,r=Ze(n,r)}return i===!0?-1:n.length}const Po="ͼ",Oa=typeof Symbol>"u"?"__"+Po:Symbol.for(Po),Co=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),ga=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class ei{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,l,a,c){let h=[],u=/^@(\w+)\b/.exec(o[0]),f=u&&u[1]=="keyframes";if(u&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map(O=>m.replace(/&/,O))).reduce((m,O)=>m.concat(O)),p,a);else if(p&&typeof p=="object"){if(!u)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&a.push((i&&!u&&!c?o.map(i):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=ga[Oa]||1;return ga[Oa]=e+1,Po+e.toString(36)}static mount(e,t,i){let r=e[Co],s=i&&i.nonce;r?s&&r.setNonce(s):r=new mp(e,s),r.mount(Array.isArray(t)?t:[t],e)}}let ya=new Map;class mp{constructor(e,t){let i=e.ownerDocument||e,r=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let s=ya.get(i);if(s)return e[Co]=s;this.sheet=new r.CSSStyleSheet,ya.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Co]=this}mount(e,t){let i=this.sheet,r=0,s=0;for(let o=0;o-1&&(this.modules.splice(a,1),s--,a=-1),a==-1){if(this.modules.splice(s++,0,l),i)for(let c=0;c",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},Aa=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),Op=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),gp=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),ba=typeof navigator<"u"&&/Mac/.test(navigator.platform),yp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Ap=Aa&&(ba||+Aa[1]<57)||gp&&ba;for(var Fe=0;Fe<10;Fe++)ti[48+Fe]=ti[96+Fe]=String(Fe);for(var Fe=1;Fe<=24;Fe++)ti[Fe+111]="F"+Fe;for(var Fe=65;Fe<=90;Fe++)ti[Fe]=String.fromCharCode(Fe+32),wn[Fe]=String.fromCharCode(Fe);for(var Rs in ti)wn.hasOwnProperty(Rs)||(wn[Rs]=ti[Rs]);function bp(n){var e=Ap&&(n.ctrlKey||n.altKey||n.metaKey)||(Op||yp)&&n.shiftKey&&n.key&&n.key.length==1,t=!e&&n.key||(n.shiftKey?wn:ti)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function he(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var r=t[i];typeof r=="string"?n.setAttribute(i,r):r!=null&&(n[i]=r)}e++}for(;e2);var $={mac:wa||/Mac/.test(ze.platform),windows:/Win/.test(ze.platform),linux:/Linux|X11/.test(ze.platform),ie:hs,ie_version:Eh?To.documentMode||6:Ro?+Ro[1]:$o?+$o[1]:0,gecko:Sa,gecko_version:Sa?+(/Firefox\/(\d+)/.exec(ze.userAgent)||[0,0])[1]:0,chrome:!!Ks,chrome_version:Ks?+Ks[1]:0,ios:wa,android:/Android\b/.test(ze.userAgent),webkit:xa,webkit_version:xa?+(/\bAppleWebKit\/(\d+)/.exec(ze.userAgent)||[0,0])[1]:0,safari:Ko,safari_version:Ko?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ze.userAgent)||[0,0])[1]:0,tabSize:To.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function gl(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const Tr=Object.create(null);function yl(n,e,t){if(n==e)return!0;n||(n=Tr),e||(e=Tr);let i=Object.keys(n),r=Object.keys(e);if(i.length-0!=r.length-0)return!1;for(let s of i)if(s!=t&&(r.indexOf(s)==-1||n[s]!==e[s]))return!1;return!0}function Sp(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function va(n,e,t){let i=!1;if(e)for(let r in e)t&&r in t||(i=!0,r=="style"?n.style.cssText="":n.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(i=!0,r=="style"?n.style.cssText=t[r]:n.setAttribute(r,t[r]));return i}function xp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Ai(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:s,end:o}=Uh(e,t);i=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new Ai(e,i,r,t,e.widget||null,!0)}static line(e){return new Fn(e)}static set(e,t=!1){return N.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}B.none=N.empty;class Un extends B{constructor(e){let{start:t,end:i}=Uh(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?gl(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Tr}eq(e){return this==e||e instanceof Un&&this.tagName==e.tagName&&yl(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Un.prototype.point=!1;class Fn extends B{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Fn&&this.spec.class==e.spec.class&&yl(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Fn.prototype.mapMode=De.TrackBefore;Fn.prototype.point=!0;class Ai extends B{constructor(e,t,i,r,s,o){super(t,i,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?De.TrackBefore:De.TrackAfter:De.TrackDel}get type(){return this.startSide!=this.endSide?Xe.WidgetRange:this.startSide<=0?Xe.WidgetBefore:Xe.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Ai&&wp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Ai.prototype.point=!0;function Uh(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function wp(n,e){return n==e||!!(n&&e&&n.compare(e))}function Mi(n,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=n?t[r]=Math.max(t[r],e):t.push(n,e)}class vn extends Jt{constructor(e,t,i){super(),this.tagName=e,this.attributes=t,this.rank=i}eq(e){return e==this||e instanceof vn&&this.tagName==e.tagName&&yl(this.attributes,e.attributes)}static create(e){return new vn(e.tagName,e.attributes||Tr,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return N.of(e,t)}}vn.prototype.startSide=vn.prototype.endSide=-1;function kn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Zo(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function On(n,e){if(!e.anchorNode)return!1;try{return Zo(n,e.anchorNode)}catch{return!1}}function yr(n){return n.nodeType==3?Qn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function gn(n,e,t,i){return t?ka(n,e,t,i,-1)||ka(n,e,t,i,1):!1}function ii(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function $r(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function ka(n,e,t,i,r){for(;;){if(n==t&&e==i)return!0;if(e==(r<0?0:qt(n))){if(n.nodeName=="DIV")return!1;let s=n.parentNode;if(!s||s.nodeType!=1)return!1;e=ii(n)+(r<0?0:1),n=s}else if(n.nodeType==1){if(n=n.childNodes[e+(r<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=r<0?qt(n):0}else return!1}}function qt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Rr(n,e){let{left:t,right:i}=n;if(t==i)return n;let r=e?t:i;return{left:r,right:r,top:n.top,bottom:n.bottom}}function vp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function Fh(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function kp(n,e,t,i,r,s,o,l){let a=n.ownerDocument,c=a.defaultView||window;for(let h=n,u=!1;h&&!u;)if(h.nodeType==1){let f,d=h==a.body,p=1,m=1;if(d)f=vp(c);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(u=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let b=h.getBoundingClientRect();({scaleX:p,scaleY:m}=Fh(h,b)),f={left:b.left,right:b.left+h.clientWidth*p,top:b.top,bottom:b.top+h.clientHeight*m}}let O=0,y=0;if(r=="nearest")e.top0&&e.bottom>f.bottom+y&&(y=e.bottom-f.bottom+o)):e.bottom>f.bottom-o&&(y=e.bottom-f.bottom+o,t<0&&e.top-y0&&e.right>f.right+O&&(O=e.right-f.right+s)):e.right>f.right-s&&(O=e.right-f.right+s,t<0&&e.leftf.bottom||e.leftf.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),h=h.assignedSlot||h.parentNode}else if(h.nodeType==11)h=h.host;else break}function Dh(n,e=!0){let t=n.ownerDocument,i=null,r=null;for(let s=n.parentNode;s&&!(s==t.body||(!e||i)&&r);)if(s.nodeType==1)!r&&s.scrollHeight>s.clientHeight&&(r=s),e&&!i&&s.scrollWidth>s.clientWidth&&(i=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:i,y:r}}class Qp{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?qt(t):0),i,Math.min(e.focusOffset,i?qt(i):0))}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}}function Xh(n){let e=[];for(let t=n;t;t=t.nodeType==11?t.host:t.parentNode)t.nodeType==1&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function Lh(n,e=!0){for(let{node:t,left:i,top:r}of n)e&&t.scrollTop!=r&&(t.scrollTop=r),t.scrollLeft!=i&&(t.scrollLeft=i)}let ui=null;$.safari&&$.safari_version>=26&&(ui=!1);function Bh(n){if(n.setActive)return n.setActive();if(ui)return n.focus(ui);let e=Xh(n);n.focus(ui==null?{get preventScroll(){return ui={preventScroll:!0},!0}}:void 0),ui||(ui=!1,Lh(e))}let Qa;function Qn(n,e,t=e){let i=Qa||(Qa=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function Ei(n,e,t,i){let r={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:r.altKey,ctrlKey:r.ctrlKey,shiftKey:r.shiftKey,metaKey:r.metaKey}=i);let s=new KeyboardEvent("keydown",r);s.synthetic=!0,n.dispatchEvent(s);let o=new KeyboardEvent("keyup",r);return o.synthetic=!0,n.dispatchEvent(o),s.defaultPrevented||o.defaultPrevented}function Pp(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function Cp(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,qt(t));;)if(i){if(t.nodeType!=1)return!1;let r=t.childNodes[i-1];r.contentEditable=="false"?i--:(t=r,i=qt(t))}else{if(t==n)return!0;i=ii(t),t=t.parentNode}}function qh(n){return n instanceof Window?n.pageYOffset>Math.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function Ih(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=qt(t)}else if(t.parentNode&&!$r(t))i=ii(t),t=t.parentNode;else return null}}function zh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(s<0||(r!=0?r<0?l.fromt:e[s].level>l.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}}function Vh(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(St[m+1]==-d){let O=St[m+2],y=O&2?r:O&4?O&1?s:r:0;y&&(ue[u]=ue[St[m]]=y),l=m;break}}else{if(St.length==189)break;St[l++]=u,St[l++]=f,St[l++]=a}else if((p=ue[u])==2||p==1){let m=p==r;a=m?0:1;for(let O=l-3;O>=0;O-=3){let y=St[O+2];if(y&2)break;if(m)St[O+2]|=2;else{if(y&4)break;St[O+2]|=4}}}}}function Mp(n,e,t,i){for(let r=0,s=i;r<=t.length;r++){let o=r?t[r-1].to:n,l=ra;)p==O&&(p=t[--m].from,O=m?t[m-1].to:n),ue[--p]=d;a=h}else s=c,a++}}}function Eo(n,e,t,i,r,s,o){let l=i%2?2:1;if(i%2==r%2)for(let a=e,c=0;aa&&o.push(new Ct(a,m.from,d));let O=m.direction==bi!=!(d%2);Uo(n,O?i+1:i,r,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(h?ue[p]!=l:ue[p]==l))break;p++}f?Eo(n,a,p,i+1,r,f,o):ae;){let h=!0,u=!1;if(!c||a>s[c-1].to){let m=ue[a-1];m!=l&&(h=!1,u=m==16)}let f=!h&&l==1?[]:null,d=h?i:i+1,p=a;e:for(;;)if(c&&p==s[c-1].to){if(u)break e;let m=s[--c];if(!h)for(let O=m.from,y=c;;){if(O==e)break e;if(y&&s[y-1].to==O)O=s[--y].from;else{if(ue[O-1]==l)break e;break}}if(f)f.push(m);else{m.toue.length;)ue[ue.length]=256;let i=[],r=e==bi?0:1;return Uo(n,r,r,t,0,n.length,i),i}function Yh(n){return[new Ct(0,n,0)]}let Nh="";function Up(n,e,t,i,r){var s;let o=i.head-n.from,l=Ct.find(e,o,(s=i.bidiLevel)!==null&&s!==void 0?s:-1,i.assoc),a=e[l],c=a.side(r,t);if(o==c){let f=l+=r?1:-1;if(f<0||f>=e.length)return null;a=e[l=f],o=a.side(!r,t),c=a.side(r,t)}let h=Ze(n.text,o,a.forward(r,t));(ha.to)&&(h=c),Nh=n.text.slice(Math.min(o,h),Math.max(o,h));let u=l==(r?e.length-1:0)?null:e[l+(r?1:-1)];return u&&h==c&&u.level+(r?0:1)n.some(e=>e)}),nu=K.define({combine:n=>n.some(e=>e)}),ru=K.define();class Ui{constructor(e,t,i,r,s,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=s,this.isSnapshot=o}map(e){return e.empty?this:new Ui(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Ui(A.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Nn=W.define({map:(n,e)=>n.map(e)}),su=W.define();function We(n,e,t){let i=n.facet(Jh);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const Dt=K.define({combine:n=>n.length?n[0]:!0});let Dp=0;const Ti=K.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(us.of(c=>{let h=c.plugin(l);return h?o(h):B.none})),s&&a.push(s(l)),a})}static fromClass(e,t){return xe.define((i,r)=>new e(i,r),t)}}class Zs{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(We(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){We(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){We(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const ou=K.define(),xl=K.define(),us=K.define(),lu=K.define(),wl=K.define(),Dn=K.define(),au=K.define();function Pa(n,e){let t=n.state.facet(au);if(!t.length)return t;let i=t.map(s=>s instanceof Function?s(n):s),r=[];return N.spans(i,e.from,e.to,{point(){},span(s,o,l,a){let c=s-e.from,h=o-e.from,u=r;for(let f=l.length-1;f>=0;f--,a--){let d=l[f].spec.bidiIsolate,p;if(d==null&&(d=Fp(e.text,c,h)),a>0&&u.length&&(p=u[u.length-1]).to==c&&p.direction==d)p.to=h,u=p.inner;else{let m={from:c,to:h,direction:d,inner:[]};u.push(m),u=m.inner}}}}),r}const cu=K.define();function vl(n){let e=0,t=0,i=0,r=0;for(let s of n.state.facet(cu)){let o=s(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(r=Math.max(r,o.bottom)))}return{left:e,right:t,top:i,bottom:r}}const hn=K.define();class ct{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new ct(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toAr.push(new ct(s,o,l,a))),this.changedRanges=r}static create(e,t,i){return new Kr(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const Xp=[];class Se{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Xp}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Sp(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let r of this.children){if(r==e)return i;i+=r.length+r.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,i){return null}domPosFor(e,t){let i=ii(this.dom),r=this.length?e>0:t>0;return new pt(this.parent.dom,i+(r?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof ds)return e;return null}static get(e){return e.cmTile}}class fs extends Se{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,r,s=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,r=i?i.nextSibling:t.firstChild,s&&r!=l.dom&&(s.written=!0),l.dom.parentNode==t)for(;r&&r!=l.dom;)r=Ca(r);else t.insertBefore(l.dom,r);i=l.dom}for(r=i?i.nextSibling:t.firstChild,s&&r&&(s.written=!0);r;)r=Ca(r);this.length=o}}function Ca(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class ds extends fs{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Se.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,r=0,s=0;;)if(r==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&s++,r=t.pop()}else{let o=i.children[r++];if(o instanceof Xt)t.push(r),i=o,r=0;else{let l=s+o.length,a=e(o,s);if(a!==void 0)return a;s=l+o.breakAfter}}}resolveBlock(e,t){let i,r=-1,s,o=-1;if(this.blockTiles((l,a)=>{let c=a+l.length;if(e>=a&&e<=c){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!s||!l.isWidget()&&s.isWidget())&&(s=l,o=e-a)}}),!i&&!s)throw new Error("No tile at position "+e);return i&&t<0||!s?{tile:i,offset:r}:{tile:s,offset:o}}}class Xt extends fs{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new Xt(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class qi extends fs{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let r=new qi(t||document.createElement("div"),e);return(!t||!i)&&(r.flags|=4),r}get domAttrs(){return this.attrs}resolveInline(e,t,i){let r=null,s=-1,o=null,l=-1;function a(h,u){for(let f=0,d=0;f=u&&(p.isComposite()?a(p,u-d):(!o||o.isHidden&&(t>0&&!(o.flags&32)||i&&Bp(o,p)))&&(m>u||p.flags&32&&t<=1)?(o=p,l=u-d):(d=-1)&&(r=p,s=u-d)),d=m}}a(this,e);let c=(t<0?r:o)||r||o;return c?{tile:c,offset:c==r?s:l}:null}coordsIn(e,t,i){let r=this.resolveInline(e,t,!0);return r?r.tile.coordsIn(Math.max(0,r.offset),t,i):Lp(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:r,offset:s}=i;if(this.dom.contains(r.dom))return r.isText()?new pt(r.dom,Math.min(r.dom.nodeValue.length,s)):r.domPosFor(s,r.flags&16?1:r.flags&32?-1:t);let o=i.tile.parent,l=!1;for(let a of o.children){if(l)return new pt(a.dom,0);a==i.tile&&(l=!0)}}return new pt(this.dom,0)}}function Lp(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=yr(e);return t[t.length-1]||null}function Bp(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.topr&&(e=r);let s=e,o=e,l=0;e==0&&t<0||e==r&&t>=0?$.chrome||$.gecko||(e?(s--,l=1):o=0)?0:a.length-1];return $.safari&&!l&&c.width==0&&(c=Array.prototype.find.call(a,h=>h.width)||c),i==null?c:Rr(c,(l?l>0:t<0)==i)}static of(e,t){let i=new pi(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class Si extends Se{constructor(e,t,i,r){super(e,t,r),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;if(i)return Rr(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),o=null;if(!s.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?s.length-1:0;o=s[a],!(e>0?a==0:a==s.length-1||o.top0==i)}}class qp{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:r,index:s,beforeBreak:o,parents:l}=this;for(;e||t>0;)if(r.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(s==r.children.length){if(!e&&!l.length)break;i&&i.leave(r),o=!!r.breakAfter,{tile:r,index:s}=l.pop(),s++}else{let a=r.children[s],c=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],c=r.lastChild;if(c instanceof He&&c.mark.eq(a.mark))c.dom!=a.dom&&c.setDOM(Ms(a.dom)),r=c;else{if(this.cache.reused.get(a)){let u=Se.get(a.dom);u&&u.setDOM(Ms(a.dom))}let h=He.of(a.mark,a.dom);r.append(h),r=h}this.cache.reused.set(a,2)}let s=Se.get(e.text);s&&this.cache.reused.set(s,2);let o=new pi(e.text,e.text.nodeValue);o.flags|=8,this.pos=e.range.toB,r.append(o)}addInlineWidget(e,t,i){let r=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);r||this.flushBuffer();let s=this.ensureMarks(t,i);!r&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=hu);let r=qi.start(e,t||((i=this.cache.find(qi))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=r)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let r=this.curLine;for(let s=e.length-1;s>=0;s--){let o=e[s],l;if(t>0&&(l=r.lastChild)&&l instanceof He&&l.mark.eq(o))r=l,t--;else{let a=He.of(o,(i=this.cache.find(He,c=>c.mark.eq(o)))===null||i===void 0?void 0:i.dom);r.append(a),r=a,t=0}}return r}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Ta(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!($.ios&&Ta(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Es,0,32)||new Si(Es.toDOM(),0,Es,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,i=new Ip(e.from,e.to,e.value,t),r=this.wrappers.length;for(;r>0&&(this.wrappers[r-1].rank-i.rank||this.wrappers[r-1].to-i.to)<0;)r--;this.wrappers.splice(r,0,i)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let r=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Zr,void 0,1);return i&&(i.flags=t),i||new Zr(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class Wp{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:r,lineBreak:s,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=r;let l=this.textOff=Math.min(e,r.length);return s?null:r.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Mr=[Si,qi,pi,He,Zr,Xt,ds];for(let n=0;n[]),this.index=Mr.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let r=e.bucket,s=this.buckets[r],o=this.index[r];for(let l=0;l{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let r=0,s=0,o=0;;){let l=or){let c=a-r;this.preserve(c,!o,!l),r=a,s+=c}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let c=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof He&&r.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?r.length&&(r.length=s=0):o instanceof He&&(r.shift(),s=Math.min(s,r.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,r=this.builder,s=-1,o=N.spans(this.decorations,e,t,{point:(l,a,c,h,u,f)=>{if(c instanceof Ai){if(this.disallowBlockEffectsFor[f]){if(c.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=h.length,u>h.length)r.continueWidget(a-l);else{let d=c.widget||(c.block?Ii.block:Ii.inline),p=Yp(c),m=this.cache.findWidget(d,a-l,p)||Si.of(d,this.view,a-l,p);c.block?(c.startSide>0&&r.addLineStartIfNotCovered(i),r.addBlockWidget(m)):(r.ensureLine(i),r.addInlineWidget(m,h,u))}i=null}else i=Np(i,c);a>l&&this.text.skip(a-l)},span:(l,a,c,h)=>{for(let u=l;u-1&&(this.openWidget=o>s),this.openWidget||r.addLineStartIfNotCovered(i),this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let r=e.parentNode;;r=r.parentNode){let s=Se.get(r);if(r==this.view.contentDOM)break;s instanceof He?t.push(s):s?.isLine()?i=s:s instanceof Xt||(r.nodeName=="DIV"&&!i&&r!=this.view.contentDOM?i=new qi(r,hu):i||t.push(He.of(new Un({tagName:r.nodeName.toLowerCase(),attributes:xp(r)}),r)))}return{line:i,marks:t}}}function Ta(n,e){let t=i=>{for(let r of i.children)if((e?r.isText():r.length)||t(r))return!0;return!1};return t(n)}function Yp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const hu={class:"cm-line"};function Np(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&gl(t,n),i&&(n.class+=" "+i)),n}function Gp(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof He&&e.push(i.mark)}return e}function Ms(n){let e=Se.get(n);return e&&e.setDOM(n.cloneNode()),n}class Ii extends Ut{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Ii.inline=new Ii("span");Ii.block=new Ii("div");const Es=new class extends Ut{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class $a{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=B.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new ds(e,e.contentDOM),this.updateInner([new ct(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:u})=>uthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let r=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!sm(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let s=r>-1?_p(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){let{from:h,to:u}=this.hasComposition;i=new ct(h,u,e.changes.mapPos(h,-1),e.changes.mapPos(u,1)).addToSet(i.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,($.ie||$.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=tm(o,this.decorations,e.changes);a.length&&(i=ct.extendWithRanges(i,a));let c=nm(l,this.blockWrappers,e.changes);return c.length&&(i=ct.extendWithRanges(i,c)),s&&!i.some(h=>h.fromA<=s.range.fromA&&h.toA>=s.range.toA)&&(i=s.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Vp(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Se.get(t.text)&&l.cache.reused.set(Se.get(t.text),2),this.tile=l.run(e,t),Do(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=$.chrome||$.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||i.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let r=[];if(this.view.viewport.from||this.view.viewport.to-1)&&On(i,this.view.observer.selectionRange)&&!(r&&i.contains(r));if(!(s||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,c,h;if(a.empty?h=c=this.inlineDOMNearPos(a.anchor,a.assoc||1):(h=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),c=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),$.gecko&&a.empty&&!this.hasComposition&&Hp(c)){let f=document.createTextNode("");this.view.observer.ignore(()=>c.node.insertBefore(f,c.node.childNodes[c.offset]||null)),c=h=new pt(f,0),l=!0}let u=this.view.observer.selectionRange;(l||!u.focusNode||(!gn(c.node,c.offset,u.anchorNode,u.anchorOffset)||!gn(h.node,h.offset,u.focusNode,u.focusOffset))&&!this.suppressWidgetCursorChange(u,a))&&(this.view.observer.ignore(()=>{$.android&&$.chrome&&i.contains(u.focusNode)&&rm(u.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=kn(this.view.root);if(f)if(a.empty){if($.gecko){let d=Jp(c.node,c.offset);if(d&&d!=3){let p=(d==1?Ih:zh)(c.node,c.offset);p&&(c=new pt(p.node,p.offset))}}f.collapse(c.node,c.offset),a.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=a.bidiLevel)}else if(f.extend){f.collapse(c.node,c.offset);try{f.extend(h.node,h.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([c,h]=[h,c]),d.setEnd(h.node,h.offset),d.setStart(c.node,c.offset),f.removeAllRanges(),f.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(c,h)),this.impreciseAnchor=c.precise?null:new pt(u.anchorNode,u.anchorOffset),this.impreciseHead=h.precise?null:new pt(u.focusNode,u.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&gn(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=kn(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),c=this.coordsAt(t.head,1);if(!a||!c||a.bottom>c.top)return;let h=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let u=e.observer.selectionRange;e.docView.posFromDOM(u.anchorNode,u.anchorOffset)!=t.from&&i.collapse(r,s)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let r=i.posAtStart;if(i.isComposite()){let s;if(e==i.dom)s=i.dom.childNodes[t];else{let o=qt(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?s=e:s=e.nextSibling}if(s==i.dom.firstChild)return r;for(;s&&!Se.get(s);)s=s.nextSibling;if(!s)return r+i.length;for(let o=0,l=r;;o++){let a=i.children[o];if(a.dom==s)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?r+t:r+(t?i.length:0):r}domAtPos(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(r,t):i.domIn(r,t)}inlineDOMNearPos(e,t){let i,r=-1,s=!1,o,l=-1,a=!1;return this.tile.blockTiles((c,h)=>{if(c.isWidget()){if(c.flags&32&&h>=e)return!0;c.flags&16&&(s=!0)}else{let u=h+c.length;if(h<=e&&(i=c,r=e-h,s=u=e&&!o&&(o=c,l=e-h,a=h>e),h>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(s&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(r,t):o.domIn(l,t))}coordsAt(e,t,i){let{tile:r,offset:s}=this.tile.resolveBlock(e,t);return r.isWidget()?r.widget instanceof Us?null:r.coordsInWidget(s,t,!0):r.coordsIn(s,t,i)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function r(s,o){if(s.isComposite())for(let l of s.children){if(l.length>=o){let a=r(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(s.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==fe.LTR,c=0,h=(u,f,d)=>{for(let p=0;pr);p++){let m=u.children[p],O=f+m.length,y=m.dom.getBoundingClientRect(),{height:b}=y;if(d&&!p&&(c+=y.top-d.top),m instanceof Xt)O>i&&h(m,f,y);else if(f>=i&&(c>0&&t.push(-c),t.push(b+c),c=0,o)){let x=m.dom.lastChild,C=x?yr(x):[];if(C.length){let k=C[C.length-1],S=a?k.right-y.left:y.right-k.left;S>l&&(l=S,this.minWidth=s,this.minWidthFrom=f,this.minWidthTo=O)}}d&&p==u.children.length-1&&(c+=d.bottom-y.bottom),f=O+m.breakAfter}};return h(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?fe.RTL:fe.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let c of o.children){if(!c.isText()||/[^ -~]/.test(c.text))return;let h=yr(c.dom);if(h.length!=1)return;l+=h[0].width,a=h[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,r,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=yr(t.firstChild)[0];i=t.getBoundingClientRect().height,r=o&&o.width?o.width/27:7,s=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:r,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(B.replace({widget:new Us(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!s)break;i=s.to+1}return B.set(e)}updateDeco(){let e=1,t=this.view.state.facet(us).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),i=!1,r=this.view.state.facet(wl).map((s,o)=>{let l=typeof s=="function";return l&&(i=!0),l?s(this.view):s});for(r.length&&(this.dynamicDecorationMap[e++]=i,t.push(N.join(r))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(ru))try{if(c(this.view,e.range,e))return!0}catch(h){We(this.view.state,h,"scroll handler")}let{range:t}=e,i=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),r;if(!i)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,r.left),top:Math.min(i.top,r.top),right:Math.max(i.right,r.right),bottom:Math.max(i.bottom,r.bottom)});let s=vl(this.view),o={left:i.left-s.left,top:i.top-s.top,right:i.right+s.right,bottom:i.bottom+s.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;if(kp(this.view.scrollDOM,o,t.head1&&(i.top>window.visualViewport.offsetTop+window.visualViewport.height||i.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Do(this.tile)}}function Do(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Do(i,e)}}function Hp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function uu(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=Ih(t.focusNode,t.focusOffset),r=zh(t.focusNode,t.focusOffset),s=i||r;if(r&&i&&r.node!=i.node){let l=Se.get(r.node);if(!l||l.isText()&&l.text!=r.node.nodeValue)s=r;else if(n.docView.lastCompositionAfterCursor){let a=Se.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(s=r)}}if(n.docView.lastCompositionAfterCursor=s!=i,!s)return null;let o=e-s.offset;return{from:o,to:o+s.node.nodeValue.length,node:s.node}}function _p(n,e,t){let i=uu(n,t);if(!i)return null;let{node:r,from:s,to:o}=i,l=r.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new ct(a.mapPos(s),a.mapPos(o),s,o),text:r}}function Jp(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class Us extends Ut{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function om(n,e,t=1){let i=n.charCategorizer(e),r=n.doc.lineAt(e),s=e-r.from;if(r.length==0)return A.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,l=s;t<0?o=Ze(r.text,s,!1):l=Ze(r.text,s);let a=i(r.text.slice(o,l));for(;o>0;){let c=Ze(r.text,o,!1);if(i(r.text.slice(c,o))!=a)break;o=c}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((r-t.top-(n.defaultLineHeight-l)*.5)/l);s+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Qo(o,s,n.state.tabSize)}function Xo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let r;for(let s of i.type){if(s.from>e)break;if(!(s.toe)return s;(!r||s.type==Xe.Text&&(r.type!=s.type||(t<0?s.frome)))&&(r=s)}}return r||i}return i}function am(n,e,t,i){let r=Xo(n,e.head,e.assoc||-1),s=!i||r.type!=Xe.Text||!(n.lineWrapping||r.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(r.from),a=n.posAtCoords({x:t==(l==fe.LTR)?o.right-1:o.left+1,y:(s.top+s.bottom)/2});if(a!=null)return A.cursor(a,t?-1:1)}return A.cursor(t?r.to:r.from,t?-1:1)}function Ra(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=n.bidiSpans(r),o=n.textDirectionAt(r.from);for(let l=e,a=null;;){let c=Up(r,s,o,l,t),h=Nh;if(!c){if(r.number==(t?n.state.doc.lines:1))return l;h=` -`,r=n.state.doc.line(r.number+(t?1:-1)),s=n.bidiSpans(r),c=n.visualLineSide(r,!t)}if(a){if(!a(h))return l}else{if(!i)return c;a=i(h)}l=c}}function cm(n,e,t){let i=n.state.charCategorizer(e),r=i(t);return s=>{let o=i(s);return r==ye.Space&&(r=o),r==o}}function hm(n,e,t,i){let r=e.head,s=t?1:-1;if(r==(t?n.state.doc.length:0))return A.cursor(r,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),c=n.coordsAtPos(r,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),h=n.documentTop;if(c)o==null&&(o=c.left-a.left),l=s<0?c.top:c.bottom;else{let p=n.viewState.lineBlockAt(r);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(r-p.from))),l=(s<0?p.top:p.bottom)+h}let u=a.left+o,f=n.viewState.heightOracle.textHeight>>1,d=i??f;for(let p=0;;p+=f){let m=l+(d+p)*s,O=Lo(n,{x:u,y:m},!1,s);if(t?m>a.bottom:ml:b{if(e>s&&er(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:A.cursor(i,in.viewState.docHeight)return new Pt(n.state.doc.length,-1);if(c=n.elementAtHeight(a),i==null)break;if(c.type==Xe.Text){if(i<0?c.ton.viewport.to)break;let f=n.docView.coordsAt(i<0?c.from:c.to,i>0?-1:1);if(f&&(i<0?f.top<=a+s:f.bottom>=a+s))break}let u=n.viewState.heightOracle.textHeight/2;a=i>0?c.bottom+u:c.top-u}if(n.viewport.from>=c.to||n.viewport.to<=c.from){if(t)return null;if(c.type==Xe.Text){let u=lm(n,r,c,o,l);return new Pt(u,u==c.from?1:-1)}}if(c.type!=Xe.Text)return a<(c.top+c.bottom)/2?new Pt(c.from,1):new Pt(c.to,-1);let h=n.docView.lineAt(c.from,2);return(!h||h.length!=c.length)&&(h=n.docView.lineAt(c.from,-2)),new um(n,o,l,n.textDirectionAt(c.from)).scanTile(h,c.from)}class um{constructor(e,t,i,r){this.view=e,this.x=t,this.y=i,this.baseDir=r,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+r.from>1;t:if(o.has(m)){for(let b=1;b=s&&(x-=p),!o.has(x)){m=x;break t}}break e}o.add(m);let O=t(m),y=0;if(O)for(let b=0;b1))if(x.bottomthis.y)(!c||c.top>x.top)&&(c=x),y=-1;else{let C=x.left>this.x?this.x-x.left:x.right(p+p+m)/3)return this.y=a.bottom-1,this.scan(e,t,!0);if(c&&c.top<(p+m+m)/3)return this.y=c.top+1,this.scan(e,t,!0)}let d=(l?this.dirAt(e[h],1):this.baseDir)==fe.LTR;return{i:h,after:this.x>(f.left+f.right)/2==d}}scanText(e,t){let i=[];for(let s=0;s{let o=i[s]-t,l=i[s+1]-t;return Qn(e.dom,o,l).getClientRects()});return r.after?new Pt(i[r.i+1],-1):new Pt(i[r.i],1)}scanTile(e,t){if(!e.length)return new Pt(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:Qn(a.dom,0,a.length)).getClientRects()}),s=e.children[r.i],o=i[r.i];return s.isText()?this.scanText(s,o):s.isComposite()?this.scanTile(s,o):r.after?new Pt(i[r.i+1],-1):new Pt(o,1)}}const ki="￿";class fm{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(_.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ki}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r);let s=this.text.length;this.readNode(r);let o=Se.get(r),l=r.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=Se.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:$r(r))||$r(l)&&(r.nodeName!="BR"||o?.isWidget())&&this.text.length>s)&&!pm(l,t)&&this.lineBreak(),r=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,l;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=r.exec(t))&&(s=l.index,o=l[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=s+o}}readNode(e){let t=Se.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(dm(e,i.node,i.offset)?t:0))}}function dm(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=du(e.docView.tile,t,i,0))){let a=s||o?[]:gm(e),c=new fm(a,e);c.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=c.text,this.newSel=ym(a,this.bounds.from)}else{let a=e.observer.selectionRange,c=s&&s.node==a.focusNode&&s.offset==a.focusOffset||!Zo(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),h=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!Zo(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),u=e.viewport;if(($.ios||$.chrome)&&c!=h&&Math.min(c,h)<=l.main.from&&Math.max(c,h)>=l.main.to&&(u.from>0||u.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(A.range(h,c));else if(e.lineWrapping&&h==c&&!(l.main.empty&&l.main.head==c)&&e.inputState.lastTouchTime>Date.now()-100){let f=e.coordsAtPos(c,-1),d=0;f&&(d=e.inputState.lastTouchY<=f.bottom?-1:1),this.newSel=A.create([A.cursor(c,d)])}else this.newSel=A.single(h,c)}}}function du(n,e,t,i){if(n.isComposite()){let r=-1,s=-1,o=-1,l=-1;for(let a=0,c=i,h=i;at)return du(u,e,t,c);if(f>=e&&r==-1&&(r=a,s=c),c>t&&u.dom.parentNode==n.dom){o=a,l=h;break}h=f,c=f+u.breakAfter}return{from:s,to:l<0?i+n.length:l,startDOM:(r?n.children[r-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function pu(n,e){let t,{newSel:i}=e,{state:r}=n,s=r.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,c=s.from,h=null;(o===8||$.android&&e.text.length=l&&s.to<=a&&(e.typeOver||u!=e.text)&&u.slice(0,s.from-l)==e.text.slice(0,s.from-l)&&u.slice(s.to-l)==e.text.slice(f=e.text.length-(u.length-(s.to-l)))?t={from:s.from,to:s.to,insert:re.of(e.text.slice(s.from-l,f).split(ki))}:(d=mu(u,e.text,c-l,h))&&($.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==ki+ki&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:re.of(e.text.slice(d.from,d.toB).split(ki))})}else i&&(!n.hasFocus&&r.facet(Dt)||Er(i,s))&&(i=null);if(!t&&!i)return!1;if(($.mac||$.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:re.of([t.insert.toString().replace("."," ")])}):r.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:r.toText(n.inputState.insertingText)}:$.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:re.of([" "])}),t)return kl(n,t,i,o);if(i&&!Er(i,s)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=fu(r.facet(Dn).map(c=>c(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function kl(n,e,t,i=-1){if($.ios&&n.inputState.flushIOSKey(e))return!0;let r=n.state.selection.main;if($.android&&(e.to==r.to&&(e.from==r.from||e.from==r.from-1&&n.state.sliceDoc(e.from,r.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Ei(n.contentDOM,"Enter",13)||(e.from==r.from-1&&e.to==r.to&&e.insert.length==0||i==8&&e.insert.lengthr.head)&&Ei(n.contentDOM,"Backspace",8)||e.from==r.from&&e.to==r.to+1&&e.insert.length==0&&Ei(n.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Om(n,e,t));return n.state.facet(eu).some(a=>a(n,e.from,e.to,s,l))||n.dispatch(l()),!0}function Om(n,e,t){let i,r=n.state,s=r.selection.main,o=-1;if(e.from==e.to&&e.froms.to){let a=e.fromu(n)),c,a);e.from==h&&(o=h)}if(o>-1)i={changes:e,selection:A.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=s.frome.to?r.sliceDoc(e.to,s.to):"";i=r.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+c))}else{let a=r.changes(e),c=t&&t.main.to<=a.newLength?t.main:void 0;if(r.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let h=n.state.sliceDoc(e.from,e.to),u,f=t&&uu(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);u={from:f.from,to:f.to-p}}else u=n.state.doc.lineAt(s.head);let d=s.to-e.to;i=r.changeByRange(p=>{if(p.from==s.from&&p.to==s.to)return{changes:a,range:c||p.map(a)};let m=p.to-d,O=m-h.length;if(n.state.sliceDoc(O,m)!=h||m>=u.from&&O<=u.to)return{range:p};let y=r.changes({from:O,to:m,insert:e.insert}),b=p.to-s.to;return{changes:y,range:c?A.range(Math.max(0,c.anchor+b),Math.max(0,c.head+b)):p.map(y)}})}else i={changes:a,selection:c&&r.selection.replaceRange(c)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),r.update(i,{userEvent:l,scrollIntoView:!0})}function mu(n,e,t,i){let r=Math.min(n.length,e.length),s=0;for(;s0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,s-Math.min(o,l));t-=o+a-s}if(o=o?s-t:0;s-=a,l=s+(l-o),o=s}else if(l=l?s-t:0;s-=a,o=s+(o-l),l=s}return{from:s,toA:o,toB:l}}function gm(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}=n.observer.selectionRange;return t&&(e.push(new Ka(t,i)),(r!=t||s!=i)&&e.push(new Ka(r,s))),e}function ym(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?A.single(t+e,i+e):null}function Er(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class Am{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,$.safari&&e.contentDOM.addEventListener("input",()=>null),$.gecko&&Em(e.contentDOM.ownerDocument)}handleEvent(e){!Cm(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let r of i.observers)r(this.view,t);for(let r of i.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Sm(e),i=this.handlers,r=this.view.contentDOM;for(let s in t)if(s!="scroll"){let o=!t[s].handlers.length,l=i[s];l&&o!=!l.handlers.length&&(r.removeEventListener(s,this.handleEvent),l=null),l||r.addEventListener(s,this.handleEvent,{passive:o})}for(let s in i)s!="scroll"&&!t[s]&&r.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&gu.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),$.android&&$.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if($.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Ou.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||xm.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};return t.shiftKey&&$.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&bm(this.view.win)&&(t.shiftKey=!1),this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t},setTimeout(()=>this.flushIOSKey(),250),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:$.safari&&!$.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function bm(n){return n.visualViewport?n.visualViewport.height*n.visualViewport.scale/n.document.documentElement.clientHeight<.85:!1}function Za(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(r){We(t.state,r)}}}function Sm(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let r=i.spec,s=r&&r.plugin.domEventHandlers,o=r&&r.plugin.domEventObservers;if(s)for(let l in s){let a=s[l];a&&t(l).handlers.push(Za(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(Za(i.value,a))}}for(let i in gt)t(i).handlers.push(gt[i]);for(let i in Ve)t(i).observers.push(Ve[i]);return e}const Ou=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],xm="dthko",gu=[16,17,18,20,91,92,224,225],Gn=6;function Hn(n){return Math.max(0,n)*.7+8}function wm(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class vm{constructor(e,t,i,r){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Dh(e.contentDOM),this.atoms=e.state.facet(Dn).map(o=>o(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(_.allowMultipleSelections)&&km(e,t),this.dragging=Pm(e,t)&&bu(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&wm(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,r=0,s=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:r,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=vl(this.view);e.clientX-a.left<=r+Gn?t=-Hn(r-e.clientX):e.clientX+a.right>=o-Gn&&(t=Hn(e.clientX-o)),e.clientY-a.top<=s+Gn?i=-Hn(s-e.clientY):e.clientY+a.bottom>=l-Gn&&(i=Hn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=fu(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function km(n,e){let t=n.state.facet(Gh);return t.length?t[0](e):$.mac?e.metaKey:e.ctrlKey}function Qm(n,e){let t=n.state.facet(Hh);return t.length?t[0](e):$.mac?!e.altKey:!e.ctrlKey}function Pm(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=kn(n.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Cm(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=Se.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const gt=Object.create(null),Ve=Object.create(null),yu=$.ie&&$.ie_version<15||$.ios&&$.webkit_version<604;function Tm(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Au(n,t.value)},50)}function ps(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Au(n,e){e=ps(n.state,bl,e);let{state:t}=n,i,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(Bo!=null&&t.selection.ranges.every(a=>a.empty)&&Bo==s.toString()){let a=-1;i=t.changeByRange(c=>{let h=t.doc.lineAt(c.from);if(h.from==a)return{range:c};a=h.from;let u=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:u},range:A.cursor(c.from+u.length)}})}else o?i=t.changeByRange(a=>{let c=s.line(r++);return{changes:{from:a.from,to:a.to,insert:c.text},range:A.cursor(a.from+c.length)}}):i=t.replaceSelection(s);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Ve.scroll=n=>{let e=n.inputState;e.lastScrollTop=n.scrollDOM.scrollTop,e.lastScrollLeft=n.scrollDOM.scrollLeft,$.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};Ve.wheel=Ve.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};gt.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);Ve.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};Ve.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ve.touchend=(n,e)=>{n.inputState.touchActive=!1};gt.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(_h))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Rm(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new vm(n,e,t,i)),i&&n.observer.ignore(()=>{Bh(n.contentDOM);let s=n.root.activeElement;s&&!s.contains(n.contentDOM)&&s.blur()});let r=n.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ma(n,e,t,i){if(i==1)return A.cursor(e,t);if(i==2)return om(n.state,e,t);{let r=n.docView.lineAt(e,t),s=n.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,l=r?r.posAtEnd:s.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Ua+1)%3:1}function Rm(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=bu(e),r=n.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,l){let a=n.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),c,h=Ma(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let u=Ma(n,t.pos,t.assoc,i),f=Math.min(u.from,h.from),d=Math.max(u.to,h.to);h=f1&&(c=Km(r,a.pos))?c:l?r.addRange(h):A.create([h])}}}function Km(n,e){for(let t=0;t=e)return A.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}gt.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let r=n.docView.tile.nearest(e.target);if(r&&r.isWidget()){let s=r.posAtStart,o=s+r.length;(s>=t.to||o<=t.from)&&(t=A.undirectionalRange(s,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",ps(n.state,Sl,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};gt.dragend=n=>(n.inputState.draggedContent=null,!1);function Da(n,e,t,i){if(t=ps(n.state,bl,t),!t)return;let r=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=n.inputState,o=i&&s&&Qm(n,e)?{from:s.from,to:s.to}:null,l={from:r,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(r,-1),head:a.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}gt.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),r=0,s=()=>{++r==t.length&&Da(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),s()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Da(n,e,i,!0),!0}return!1};gt.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=yu?null:e.clipboardData;return t?(Au(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(Tm(n),!1)};function Zm(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Mm(n){let e=[],t=[],i=!1;for(let r of n.selection.ranges)r.empty||(e.push(n.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of n.selection.ranges){let o=n.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),r=o.number}i=!0}return{text:ps(n,Sl,e.join(n.lineBreak)),ranges:t,linewise:i}}let Bo=null;gt.copy=gt.cut=(n,e)=>{if(!On(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:r}=Mm(n.state);if(!t&&!r)return!1;Bo=r?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let s=yu?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(Zm(n,t),!1)};const Su=zt.define();function xu(n,e){let t=[];for(let i of n.facet(tu)){let r=i(n,e);r&&t.push(r)}return t.length?n.update({effects:t,annotations:Su.of(!0)}):null}function wu(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=xu(n.state,e);t?n.dispatch(t):n.update([])}},10)}Ve.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),wu(n)};Ve.blur=n=>{n.observer.clearSelectionRange(),wu(n)};Ve.compositionstart=Ve.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};Ve.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,$.chrome&&$.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};Ve.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};gt.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(s&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),c=n.posAtDOM(l.endContainer,l.endOffset);return kl(n,{from:a,to:c,insert:n.state.toText(s)},null),!0}}let r;if($.chrome&&$.android&&(r=Ou.find(s=>s.inputType==e.inputType))&&(n.observer.delayAndroidKey(r.key,r.keyCode),r.key=="Backspace"||r.key=="Delete")){let s=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>s+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return $.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),$.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>Ve.compositionend(n,e),20),!1};const Xa=new Set;function Em(n){Xa.has(n)||(Xa.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const La=["pre-wrap","normal","pre-line","break-spaces"];let zi=!1;function Ba(){zi=!1}class Um{constructor(e){this.lineWrapping=e,this.doc=re.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return La.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=s,a){this.heightSamples={};for(let c=0;c0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Ar&&(zi=!0),this.height=e)}replace(e,t,i){return je.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let s=this,o=i.doc;for(let l=r.length-1;l>=0;l--){let{fromA:a,toA:c,fromB:h,toB:u}=r[l],f=s.lineAt(a,pe.ByPosNoHeight,i.setDoc(t),0,0),d=f.to>=c?f:s.lineAt(c,pe.ByPosNoHeight,i,0,0);for(u+=d.to-c,c=d.to;l>0&&f.from<=r[l-1].toA;)a=r[l-1].fromA,h=r[l-1].fromB,l--,as*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,r-=l.size}else if(s>r*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,s-=l.size}else break;else if(r=s&&o(this.lineAt(0,pe.ByPos,i,r,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setMeasuredHeight(r),this.outdated=!1,this}toString(){return`block(${this.length})`}}class ot extends vu{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof ot||r instanceof Ee&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof Ee?r=new ot(r.length,this.height,this.spaceAbove):r.height=this.height,this.outdated||(r.outdated=!1),r):je.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setMeasuredHeight(r):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Ee extends je{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*s);o=a/s,this.length>s+1&&(l=(this.height-a)/(this.length-s-1))}else o=this.height/s;return{firstLine:i,lastLine:r,perLine:o,perChar:l}}blockAt(e,t,i,r){let{firstLine:s,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,r);if(t.lineWrapping){let c=r+(e0){let s=i[i.length-1];s instanceof Ee?i[i.length-1]=new Ee(s.length+r):i.push(null,new Ee(r-1))}if(e>0){let s=i[0];s instanceof Ee?i[0]=new Ee(e+s.length):i.unshift(new Ee(e-1),null)}return je.of(i)}decomposeLeft(e,t){t.push(new Ee(e-1),null)}decomposeRight(e,t){t.push(null,new Ee(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],l=Math.max(t,r.from),a=-1;for(r.from>t&&o.push(new Ee(r.from-t-1).updateHeight(e,t));l<=s&&r.more;){let h=e.doc.lineAt(l).length;o.length&&o.push(null);let u=r.heights[r.index++],f=0;u<0&&(f=-u,u=r.heights[r.index++]),a==-1?a=u:Math.abs(u-a)>=Ar&&(a=-2);let d=new ot(h,u,f);d.outdated=!1,o.push(d),l+=h+1}l<=s&&o.push(null,new Ee(s-l).updateHeight(e,l));let c=je.of(o);return(a<0||Math.abs(c.height-this.height)>=Ar||Math.abs(a-this.heightMetrics(e,t).perLine)>=Ar)&&(zi=!0),Ur(this,c)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class Xm extends je{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let s=i+this.left.height;return el))return c;let h=t==pe.ByPosNoHeight?pe.ByPosNoHeight:pe.ByPos;return a?c.join(this.right.lineAt(l,h,i,o,l)):this.left.lineAt(l,h,i,r,s).join(c)}forEachLine(e,t,i,r,s,o){let l=r+this.left.height,a=s+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let c=this.lineAt(a,pe.ByPos,i,r,s);e=e&&c.from<=t&&o(c),t>c.to&&this.right.forEachLine(c.to+1,t,i,l,a,o)}}replace(e,t,i){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let l of i)s.push(l);if(e>0&&qa(s,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?je.of(this.break?[e,null,t]:[e,t]):(this.left=Ur(this.left,e),this.right=Ur(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:s,right:o}=this,l=t+s.length+this.break,a=null;return r&&r.from<=t+s.length&&r.more?a=s=s.updateHeight(e,t,i,r):s.updateHeight(e,t,i),r&&r.from<=l+o.length&&r.more?a=o=o.updateHeight(e,l,i,r):o.updateHeight(e,l,i),a?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function qa(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof Ee&&(i=n[e+1])instanceof Ee&&n.splice(e-1,3,new Ee(t.length+1+i.length))}const Lm=5;class Ql{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof ot?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new ot(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=Lm)&&this.addLineDeco(r,s,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new ot(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new Ee(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof ot)return e;let t=new ot(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let r=this.ensureLine();r.length+=i,r.collapsed+=i,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof ot)&&!this.isCovered?this.nodes.push(new ot(0,-1,0)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&u.overflow!="visible"){let f=h.getBoundingClientRect();s=Math.max(s,f.left),o=Math.min(o,f.right),l=Math.max(l,f.top),a=Math.min(c==n.parentNode?r.innerHeight:a,f.bottom)}c=u.position=="absolute"||u.position=="fixed"?h.offsetParent:h.parentNode}else if(c.nodeType==11)c=c.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function zm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function Wm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Ds{constructor(e,t,i,r){this.from=e,this.to=t,this.size=i,this.displaySize=r}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof r!="function"&&r.class=="cm-lineWrapping");this.heightOracle=new Um(i),this.stateDeco=Wa(t),this.heightMap=je.empty().applyChanges(this.stateDeco,re.empty,this.heightOracle.setDoc(t.doc),[new ct(0,0,0,t.doc.length)]);for(let r=0;r<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());r++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=B.set(this.lineGaps.map(r=>r.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new _n(s,o))}}return this.viewports=e.sort((i,r)=>i.from-r.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?za:new Pl(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(un(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Wa(this.state);let r=e.changedRanges,s=ct.extendWithRanges(r,Bm(i,this.stateDeco,e?e.changes:$e.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Ba(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=o||zi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let c=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(c||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(nu)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,s=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?fe.RTL:fe.LTR;let o=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let c=0,h=0;if(l.width&&l.height){let{scaleX:k,scaleY:S}=Fh(t,l);(k>.005&&Math.abs(this.scaleX-k)>.005||S>.005&&Math.abs(this.scaleY-S)>.005)&&(this.scaleX=k,this.scaleY=S,c|=16,o=a=!0)}let u=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=u||this.paddingBottom!=f)&&(this.paddingTop=u,this.paddingBottom=f,c|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,c|=16);let d=Dh(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=qh(this.scrollParent||e.win);let m=(this.printing?Wm:Im)(t,this.paddingTop),O=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let b=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(b!=this.inView&&(this.inView=b,b&&(a=!0)),!this.inView&&!this.scrollTarget&&!zm(e.dom))return 0;let x=l.width;if((this.contentDOMWidth!=x||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,c|=16),a){let k=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(k)&&(o=!0),o||r.lineWrapping&&Math.abs(x-this.contentDOMWidth)>r.charWidth){let{lineHeight:S,charWidth:v,textHeight:U}=e.docView.measureTextSize();o=S>0&&r.refresh(s,S,v,U,Math.max(5,x/v),k),o&&(e.docView.minWidth=0,c|=16)}O>0&&y>0?h=Math.max(O,y):O<0&&y<0&&(h=Math.min(O,y)),Ba();for(let S of this.viewports){let v=S.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(S);this.heightMap=(o?je.empty().applyChanges(this.stateDeco,re.empty,this.heightOracle,[new ct(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new Fm(S.from,v))}zi&&(c|=2)}let C=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(c&2&&(c|=this.updateScaler()),this.viewport=this.getViewport(h,this.scrollTarget),c|=this.updateForViewport()),(c&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),c|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),c}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new _n(r.lineAt(o-i*1e3,pe.ByHeight,s,0,0).from,r.lineAt(l+(1-i)*1e3,pe.ByHeight,s,0,0).to);if(t){let{head:c}=t.range;if(ca.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),u=r.lineAt(c,pe.ByPos,s,0,0),f;t.y=="center"?f=(u.top+u.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&c=l+Math.max(10,Math.min(i,250)))&&r>o-2*1e3&&s>1,o=r<<1;if(this.defaultTextDirection!=fe.LTR&&!i)return[];let l=[],a=(h,u,f,d)=>{if(u-hh&&yy.from>=f.from&&y.to<=f.to&&Math.abs(y.from-h)y.fromb));if(!O){if(ux.from<=u&&x.to>=u)){let x=t.moveToLineBoundary(A.cursor(u),!1,!0).head;x>h&&(u=x)}let y=this.gapSize(f,h,u,d),b=i||y<2e6?y:2e6;O=new Ds(h,u,y,b)}l.push(O)},c=h=>{if(h.length2e6)for(let S of e)S.from>=h.from&&S.fromh.from&&a(h.from,d,h,u),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];N.spans(t,this.viewport.from,this.viewport.to,{span(s,o){i.push({from:s,to:o})},point(){}},20);let r=0;if(i.length!=this.visibleRanges.length)r=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||un(this.heightMap.lineAt(e,pe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||un(this.heightMap.lineAt(this.scaler.fromDOM(e),pe.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return un(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class _n{constructor(e,t){this.from=e,this.to=t}}function Vm(n,e,t){let i=[],r=n,s=0;return N.spans(t,n,e,{span(){},point(o,l){o>r&&(i.push({from:r,to:o}),s+=o-r),r=l}},20),r=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let r=0;;r++){let{from:s,to:o}=e[r],l=o-s;if(i<=l)return s+i;i-=l}}function er(n,e){let t=0;for(let{from:i,to:r}of n.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/n.total}function Ym(n,e){for(let t of n)if(e(t))return t}const za={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Wa(n){let e=n.facet(us).filter(i=>typeof i!="function"),t=n.facet(wl).filter(i=>typeof i!="function");return t.length&&e.push(N.join(t)),e}class Pl{constructor(e,t,i){let r=0,s=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let c=t.lineAt(l,pe.ByPos,e,0,0).top,h=t.lineAt(a,pe.ByPos,e,0,0).bottom;return r+=h-c,{from:l,to:a,top:c,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let l of this.viewports)l.domTop=o+(l.top-s)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),s=l.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let s=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function un(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new dt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(r=>un(r,e)):n._content)}const tr=K.define({combine:n=>n.join(" ")}),qo=K.define({combine:n=>n.indexOf(!0)>-1}),Io=ei.newName(),ku=ei.newName(),Qu=ei.newName(),Pu={"&light":"."+ku,"&dark":"."+Qu};function zo(n,e,t){return new ei(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,r=>{if(r=="&")return n;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):n+" "+i}})}const Nm=zo("."+Io,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Pu),Gm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Xs=$.ie&&$.ie_version<=11;class Hm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Qp,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);($.ie&&$.ie_version<=11||$.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&$.android&&e.constructor.EDIT_CONTEXT!==!1&&!($.chrome&&$.chrome_version<126)&&(this.editContext=new Jm(e),e.state.facet(Dt)&&(e.contentDOM.editContext=this.editContext.editContext)),Xs&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(Dt)?i.root.activeElement!=this.dom:!On(this.dom,r))return;let s=r.anchorNode&&i.docView.tile.nearest(r.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}($.ie&&$.ie_version<=11||$.android&&$.chrome)&&!i.state.selection.main.empty&&r.focusNode&&gn(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=kn(e.root);if(!t)return!1;let i=$.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&_m(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let r=On(this.dom,i);return r&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&Ei(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&On(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new mm(this.view,e,t,i);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,r=pu(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Er(this.view.state.selection,t.newSel.main))&&this.view.update([]),r}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=ja(t,e.previousSibling||e.target.previousSibling,-1),r=ja(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Dt)!=e.state.facet(Dt)&&(e.view.contentDOM.editContext=e.state.facet(Dt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let r of this.scrollTargets)r.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function ja(n,e,t){for(;e;){let i=Se.get(e);if(i&&i.parent==n)return i;let r=e.parentNode;e=r!=n.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function Va(n,e){let t=e.startContainer,i=e.startOffset,r=e.endContainer,s=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return gn(o.node,o.offset,r,s)&&([t,i,r,s]=[r,s,t,i]),{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}}function _m(n,e){if(e.getComposedRanges){let r=e.getComposedRanges(n.root)[0];if(r)return Va(n,r)}let t=null;function i(r){r.preventDefault(),r.stopImmediatePropagation(),t=r.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?Va(n,t):null}class Jm{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let r=e.state.selection.main,{anchor:s,head:o}=r,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let c=a-l>i.text.length;l==this.from&&sthis.to&&(a=s);let h=mu(e.state.sliceDoc(l,a),i.text,(c?r.from:r.to)-l,c?"end":null);if(!h){let f=A.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Er(f,r)||e.dispatch({selection:f,userEvent:"select"});return}let u={from:h.from+l,to:h.toA+l,insert:re.of(i.text.slice(h.from,h.toB).split(` -`))};if(($.mac||$.android)&&u.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(u={from:l,to:a,insert:re.of([i.text.replace("."," ")])}),this.pendingContextChange=u,!e.state.readOnly){let f=this.to-this.from+(u.to-u.from+u.insert.length);kl(e,u,A.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),u.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let r=[],s=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let r=[];for(let s of i.getTextFormats()){let o=s.underlineStyle,l=s.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(s.rangeStart),c=this.toEditorPos(s.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{let r=kn(i.root);r&&r.rangeCount&&this.editContext.updateSelectionBounds(r.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,r=this.pendingContextChange;return e.changes.iterChanges((s,o,l,a,c)=>{if(i)return;let h=c.length-(o-s);if(r&&o>=r.to)if(r.from==s&&r.to==o&&r.insert.eq(c)){r=this.pendingContextChange=null,t+=h,this.to+=h;return}else r=null,this.revertPending(e.state);if(s+=t,o+=t,o<=this.from)this.from+=h,this.to+=h;else if(sthis.to||this.to-this.from+c.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(o),c.toString()),this.to+=h}t+=h}),r&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(r=>!r.isUserEvent("input.type")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(i,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class R{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(r=>r.forEach(s=>i(s,this)))||(r=>this.update(r)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Pp(e.parent)||document,this.viewState=new Ia(this,e.state||_.create(e)),e.scrollTo&&e.scrollTo.is(Nn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ti).map(r=>new Zs(r));for(let r of this.plugins)r.update(this);this.observer=new Hm(this),this.inputState=new Am(this),this.inputState.ensureHandlers(this.plugins),this.docView=new $a(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Pe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,r,s=this.state;for(let f of e){if(f.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=f.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,l=0,a=null;e.some(f=>f.annotation(Su))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=xu(s,o),a||(l=1));let c=this.observer.delayedAndroidKey,h=null;if(c?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(_.phrases)!=this.state.facet(_.phrases))return this.setState(s);r=Kr.create(this,s,e),r.flags|=l;let u=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(u&&(u=u.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection,{x:p,y:m}=this.state.facet(R.cursorScrollMargin);u=new Ui(d.empty?d:A.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of f.effects)d.is(Nn)&&(u=d.value.clip(this.state))}this.viewState.update(r,u),this.bidiCache=Fr.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(hn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(tr)!=r.state.facet(tr)&&(this.viewState.mustMeasureContent=!0),(t||i||u||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!r.empty)for(let f of this.state.facet(Fo))try{f(r)}catch(d){We(this.state,d,"update listener")}(a||h)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),h&&!pu(this,h)&&c.force&&Ei(this.contentDOM,c.key,c.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Ia(this,e),this.plugins=e.facet(Ti).map(i=>new Zs(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new $a(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ti),i=e.state.facet(Ti);if(t!=i){let r=[];for(let s of i){let o=t.indexOf(s);if(o<0)r.push(new Zs(s));else{let l=this.plugins[o];l.mustUpdate=e,r.push(l)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,r=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:o}=this.viewState;Math.abs(r-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(qh(i||this.win))s=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];a&4||([this.measureRequests,c]=[c,this.measureRequests]);let h=c.map(d=>{try{return d.read(this)}catch(p){return We(this.state,p),Ya}}),u=Kr.create(this,this.state,[]),f=!1;u.flags|=a,t?t.flags|=a:t=u,this.updateState=2,u.empty||(this.updatePlugins(u),this.inputState.update(u),this.updateAttrs(),f=this.docView.update(u),f&&this.docViewUpdate());for(let d=0;d1||p<-1)&&!($.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){r=r+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(Fo))l(t)}get themeClasses(){return Io+" "+(this.state.facet(qo)?Qu:ku)+" "+this.state.facet(tr)}updateAttrs(){let e=Na(this,ou,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Dt)?"true":"false",class:"cm-content",style:`${$.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Na(this,xl,t);let i=this.observer.ignore(()=>{let r=va(this.contentDOM,this.contentAttrs,t),s=va(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(R.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(hn);let e=this.state.facet(R.cspNonce);ei.mount(this.root,this.styleModules.concat(Nm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Fs(this,e,Ra(this,e,t,i))}moveByGroup(e,t){return Fs(this,e,Ra(this,e,t,i=>cm(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),r=this.textDirectionAt(e.from),s=i[t?i.length-1:0];return A.cursor(s.side(t,r)+e.from,s.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,i=!0){return am(this,e,t,i)}moveVertically(e,t,i){return Fs(this,e,hm(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Lo(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Lo(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.state.doc.lineAt(e),r=this.bidiSpans(i),s=r[Ct.find(r,e-i.from,-1,t)];return this.docView.coordsAt(e,t,s.dir==fe.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(iu)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>eO)return Yh(e.length);let t=this.textDirectionAt(e.from),i;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||Vh(s.isolates,i=Pa(this,e))))return s.order;i||(i=Pa(this,e));let r=Ep(e.text,t,i);return this.bidiCache.push(new Fr(e.from,e.to,t,i,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||$.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Bh(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,r,s,o;return Nn.of(new Ui(typeof e=="number"?A.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(r=t.x)!==null&&r!==void 0?r:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Nn.of(new Ui(A.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return xe.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return xe.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ei.newName(),r=[tr.of(i),hn.of(zo(`.${i}`,e))];return t&&t.dark&&r.push(qo.of(!0)),r}static baseTheme(e){return si.lowest(hn.of(zo("."+Io,e,Pu)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),r=i&&Se.get(i)||Se.get(e);return((t=r?.root)===null||t===void 0?void 0:t.view)||null}}R.styleModule=hn;R.inputHandler=eu;R.clipboardInputFilter=bl;R.clipboardOutputFilter=Sl;R.scrollHandler=ru;R.focusChangeEffect=tu;R.perLineTextDirection=iu;R.exceptionSink=Jh;R.updateListener=Fo;R.editable=Dt;R.mouseSelectionStyle=_h;R.dragMovesSelection=Hh;R.clickAddsSelectionRange=Gh;R.decorations=us;R.blockWrappers=lu;R.outerDecorations=wl;R.atomicRanges=Dn;R.bidiIsolatedRanges=au;R.cursorScrollMargin=K.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});R.scrollMargins=cu;R.darkTheme=qo;R.cspNonce=K.define({combine:n=>n.length?n[0]:""});R.contentAttributes=xl;R.editorAttributes=ou;R.lineWrapping=R.contentAttributes.of({class:"cm-lineWrapping"});R.announce=W.define();const eO=4096,Ya={};class Fr{constructor(e,t,i,r,s,o){this.from=e,this.to=t,this.dir=i,this.isolates=r,this.fresh=s,this.order=o}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let i=[],r=e.length?e[e.length-1].dir:fe.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=i[r],o=typeof s=="function"?s(n):s;o&&gl(o,t)}return t}const tO=$.mac?"mac":$.windows?"win":$.linux?"linux":"key";function iO(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let r,s,o,l;for(let a=0;ai.concat(r),[]))),t}function rO(n,e,t){return Tu(Cu(n.state),e,n,t)}let Nt=null;const sO=4e3;function oO(n,e=tO){let t=Object.create(null),i=Object.create(null),r=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,l,a,c,h)=>{var u,f;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>iO(y,e));for(let y=1;y{let C=Nt={view:x,prefix:b,scope:o};return setTimeout(()=>{Nt==C&&(Nt=null)},sO),!0}]})}let m=p.join(" ");r(m,!1);let O=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(u=d._any)===null||u===void 0?void 0:u.run)===null||f===void 0?void 0:f.slice())||[]});a&&O.run.push(a),c&&(O.preventDefault=!0),h&&(O.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let c of l){let h=t[c]||(t[c]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:u}=o;for(let f in h)h[f].run.push(d=>u(d,Wo))}let a=o[e]||o.key;if(a)for(let c of l)s(c,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&s(c,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let Wo=null;function Tu(n,e,t,i){Wo=e;let r=bp(e),s=Ne(r,0),o=Qt(s)==r.length&&r!=" ",l="",a=!1,c=!1,h=!1;Nt&&Nt.view==t&&Nt.scope==i&&(l=Nt.prefix+" ",gu.indexOf(e.keyCode)<0&&(c=!0,Nt=null));let u=new Set,f=O=>{if(O){for(let y of O.run)if(!u.has(y)&&(u.add(y),y(t)))return O.stopPropagation&&(h=!0),!0;O.preventDefault&&(O.stopPropagation&&(h=!0),c=!0)}return!1},d=n[i],p,m;return d&&(f(d[l+ir(r,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!($.windows&&e.ctrlKey&&e.altKey)&&!($.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ti[e.keyCode])&&p!=r?(f(d[l+ir(p,e,!0)])||e.shiftKey&&(m=wn[e.keyCode])!=r&&m!=p&&f(d[l+ir(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&f(d[l+ir(r,e,!0)])&&(a=!0),!a&&f(d._any)&&(a=!0)),c&&(a=!0),a&&h&&e.stopPropagation(),Wo=null,a}class Oi{constructor(e,t,i,r,s){this.className=e,this.left=t,this.top=i,this.width=r,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let r=e.coordsAtPos(i.head,i.assoc||1);if(!r)return[];let s=$u(e);return[new Oi(t,r.left-s.left,r.top-s.top,null,r.bottom-r.top)]}else return lO(e,t,i)}}function $u(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==fe.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Ha(n,e,t,i){let r=n.coordsAtPos(e,t*2);if(!r)return i;let s=n.dom.getBoundingClientRect(),o=(r.top+r.bottom)/2,l=n.posAtCoords({x:s.left+1,y:o}),a=n.posAtCoords({x:s.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function lO(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),r=Math.min(t.to,n.viewport.to),s=n.textDirection==fe.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=$u(n),c=o.querySelector(".cm-line"),h=c&&window.getComputedStyle(c),u=l.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=l.right-(h?parseInt(h.paddingRight):0),d=Xo(n,i,1),p=Xo(n,r,-1),m=d.type==Xe.Text?d:null,O=p.type==Xe.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=Ha(n,i,1,m)),O&&(n.lineWrapping||p.widgetLineBreaks)&&(O=Ha(n,r,-1,O)),m&&O&&m.from==O.from&&m.to==O.to)return b(x(t.from,t.to,m));{let k=m?x(t.from,null,m):C(d,!1),S=O?x(null,t.to,O):C(p,!0),v=[];return(m||d).to<(O||p).from-(m&&O?1:0)||d.widgetLineBreaks>1&&k.bottom+n.defaultLineHeight/2M&&Q.from=P)break;ee>D&&E(Math.max(J,D),k==null&&J<=M,Math.min(ee,P),S==null&&ee>=Y,le.dir)}if(D=V.to+1,D>=P)break}return j.length==0&&E(M,k==null,Y,S==null,n.textDirection),{top:U,bottom:F,horizontal:j}}function C(k,S){let v=l.top+(S?k.top:k.bottom);return{top:v,bottom:v,horizontal:[]}}}function aO(n,e){return n.constructor==e.constructor&&n.eq(e)}class cO{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(br)!=e.state.facet(br)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(br);for(;t!aO(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[i].constructor&&r.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e,$.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const br=K.define();function Ru(n){return[xe.define(e=>new cO(e,n)),br.of(n)]}const Wi=K.define({combine(n){return yt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function hO(n={}){return[Wi.of(n),uO,fO,pO,nu.of(!0)]}function Ku(n){return n.startState.facet(Wi)!=n.state.facet(Wi)}const uO=Ru({above:!0,markers(n){let{state:e}=n,t=e.facet(Wi),i=[];for(let r of e.selection.ranges){let s=r==e.selection.main;if(r.empty||t.drawRangeCursor&&!(s&&$.ios&&t.iosSelectionHandles)){let o=s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=r.empty?r:A.cursor(r.head,r.assoc);for(let a of Oi.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Ku(n);return t&&_a(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){_a(e.state,n)},class:"cm-cursorLayer"});function _a(n,e){e.style.animationDuration=n.facet(Wi).cursorBlinkRate+"ms"}const fO=Ru({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let r of i)if(!r.empty)for(let s of Oi.forRange(n,"cm-selectionBackground",r))e.push(s);if($.ios&&!t.empty&&n.state.facet(Wi).iosSelectionHandles){for(let r of Oi.forRange(n,"cm-selectionHandle cm-selectionHandle-start",A.cursor(t.from,1)))e.push(r);for(let r of Oi.forRange(n,"cm-selectionHandle cm-selectionHandle-end",A.cursor(t.to,1)))e.push(r)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Ku(n)},class:"cm-selectionLayer"}),dO=$.gecko&&$.gecko_version==153?"#ffffff01":"transparent",pO=si.highest(R.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:`${dO} !important`},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Zu=W.define({map(n,e){return n==null?null:e.mapPos(n)}}),fn=Te.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Zu)?i.value:t,n)}}),mO=xe.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(fn);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(fn)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(fn),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(fn)!=n&&this.view.dispatch({effects:Zu.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function OO(){return[fn,mO]}function Ja(n,e,t,i,r){e.lastIndex=0;for(let s=n.iterRange(t,i),o=t,l;!s.next().done;o+=s.value.length)if(!s.lineBreak)for(;l=e.exec(s.value);)r(o+l.index,l)}function gO(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:r,to:s}of t)r=Math.max(n.state.doc.lineAt(r).from,r-e),s=Math.min(n.state.doc.lineAt(s).to,s+e),i.length&&i[i.length-1].to>=r?i[i.length-1].to=s:i.push({from:r,to:s});return i}class yO{constructor(e){const{regexp:t,decoration:i,decorate:r,boundary:s,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,r)this.addMatch=(l,a,c,h)=>r(h,c,c+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,c,h)=>{let u=i(l,a,c);u&&h(c,c+l[0].length,u)};else if(i)this.addMatch=(l,a,c,h)=>h(c,c+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=s,this.maxLength=o}createDeco(e){let t=new Bt,i=t.add.bind(t);for(let{from:r,to:s}of gO(e,this.maxLength))Ja(e.state.doc,this.regexp,r,s,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,r=-1;return e.docChanged&&e.changes.iterChanges((s,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),r=Math.max(a,r))}),e.viewportMoved||r-i>1e3?this.createDeco(e.view):r>-1?this.updateRange(e.view,t.map(e.changes),i,r):t}updateRange(e,t,i,r){for(let s of e.visibleRanges){let o=Math.max(s.from,i),l=Math.min(s.to,r);if(l>=o){let a=e.state.doc.lineAt(o),c=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){h=o;break}for(;lf.push(y.range(m,O));if(a==c)for(this.regexp.lastIndex=h-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(O,e,m,p));t=t.update({filterFrom:h,filterTo:u,filter:(m,O)=>mu,add:f})}}return t}}const jo=/x/.unicode!=null?"gu":"g",AO=new RegExp(`[\0-\b ---Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,jo),bO={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Ls=null;function SO(){var n;if(Ls==null&&typeof document<"u"&&document.body){let e=document.body.style;Ls=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Ls||!1}const Sr=K.define({combine(n){let e=yt(n,{render:null,specialChars:AO,addSpecialChars:null});return(e.replaceTabs=!SO())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,jo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,jo)),e}});function xO(n={}){return[Sr.of(n),wO()]}let ec=null;function wO(){return ec||(ec=xe.fromClass(class{constructor(n){this.view=n,this.decorations=B.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Sr)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new yO({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:r}=t.state,s=Ne(e[0],0);if(s==9){let o=r.lineAt(i),l=t.state.tabSize,a=_i(o.text,l,i-o.from);return B.replace({widget:new PO((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[s]||(this.decorationCache[s]=B.replace({widget:new QO(n,s)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Sr);n.startState.facet(Sr)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const vO="•";function kO(n){return n>=32?vO:n==10?"␤":String.fromCharCode(9216+n)}class QO extends Ut{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=kO(this.code),i=e.state.phrase("Control character")+" "+(bO[this.code]||"0x"+this.code.toString(16)),r=this.options.render&&this.options.render(this.code,i,t);if(r)return r;let s=document.createElement("span");return s.textContent=t,s.title=i,s.setAttribute("aria-label",i),s.className="cm-specialChar",s}ignoreEvent(){return!1}}class PO extends Ut{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function CO(){return $O}const TO=B.line({class:"cm-activeLine"}),$O=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let r=n.lineBlockAt(i.head);r.from>e&&(t.push(TO.range(r.from)),e=r.from)}return B.set(t)}},{decorations:n=>n.decorations}),Vo=2e3;function RO(n,e,t){let i=Math.min(e.line,t.line),r=Math.max(e.line,t.line),s=[];if(e.off>Vo||t.off>Vo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=r;a++){let c=n.doc.line(a);c.length<=l&&s.push(A.range(c.from+o,c.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=r;a++){let c=n.doc.line(a),h=Qo(c.text,o,n.tabSize,!0);if(h<0)s.push(A.cursor(c.to));else{let u=Qo(c.text,l,n.tabSize);s.push(A.range(c.from+h,c.from+u))}}}return s}function KO(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function tc(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),r=t-i.from,s=r>Vo?-1:r==i.length?KO(n,e.clientX):_i(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:s,off:r}}function ZO(n,e){let t=tc(n,e),i=n.state.selection;return t?{update(r){if(r.docChanged){let s=r.changes.mapPos(r.startState.doc.line(t.line).from),o=r.state.doc.lineAt(s);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(r.changes)}},get(r,s,o){let l=tc(n,r);if(!l)return i;let a=RO(n.state,t,l);return a.length?o?A.create(a.concat(i.ranges)):A.create(a):i}}:null}function MO(n){let e=(t=>t.altKey&&t.button==0);return R.mouseSelectionStyle.of((t,i)=>e(i)?ZO(t,i):null)}const EO={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},UO={style:"cursor: crosshair"};function FO(n={}){let[e,t]=EO[n.key||"Alt"],i=xe.fromClass(class{constructor(r){this.view=r,this.isDown=!1}set(r){this.isDown!=r&&(this.isDown=r,this.view.update([]))}},{eventObservers:{keydown(r){this.set(r.keyCode==e||t(r))},keyup(r){(r.keyCode==e||!t(r))&&this.set(!1)},mousemove(r){this.set(t(r))}}});return[i,R.contentAttributes.of(r=>{var s;return!((s=r.plugin(i))===null||s===void 0)&&s.isDown?UO:null})]}const nr="-10000px";class Mu{constructor(e,t,i,r){this.facet=t,this.createTooltipView=i,this.removeTooltipView=r,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let s=null;this.tooltipViews=this.tooltips.map(o=>s=i(o,s))}update(e,t){var i;let r=e.state.facet(this.facet),s=r.filter(a=>a);if(r===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[c]=a),t.length=l.length),this.input=r,this.tooltips=s,this.tooltipViews=o,!0}}function DO(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const Bs=K.define({combine:n=>{var e,t,i;return{position:$.ios?"absolute":((e=n.find(r=>r.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(r=>r.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(r=>r.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||DO}}}),ic=new WeakMap,Cl=xe.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Bs);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new Mu(n,Os,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Bs);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let r of this.manager.tooltipViews)r.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let r of this.manager.tooltipViews)this.container.appendChild(r.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let r=document.createElement("div");r.className="cm-tooltip-arrow",t.dom.appendChild(r)}return t.dom.style.position=this.position,t.dom.style.top=nr,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:s}=this.manager.tooltipViews[0];if($.safari){let o=s.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!s.offsetParent&&s.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let s=this.parent.getBoundingClientRect();s.width&&s.height&&(n=s.width/this.parent.offsetWidth,e=s.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),r=vl(this.view);return{visible:{left:i.left+r.left,top:i.top+r.top,right:i.right-r.right,bottom:i.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((s,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(s.pos):this.view.coordsAtPos(s.pos)}),size:this.manager.tooltipViews.map(({dom:s})=>s.getBoundingClientRect()),space:this.view.state.facet(Bs).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:r,scaleY:s}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||u.rightMath.min(t.right,i.right)+.1)){h.style.top=nr;continue}let d=a.arrow?c.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=f.right-f.left,O=(e=ic.get(c))!==null&&e!==void 0?e:f.bottom-f.top,y=c.offset||LO,b=this.view.textDirection==fe.LTR,x=f.width>i.right-i.left?b?i.left:i.right-f.width:b?Math.max(i.left,Math.min(u.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,u.left-m+(d?14:0)-y.x),i.right-m),C=this.above[l];!a.strictSide&&(C?u.top-O-p-y.yi.bottom)&&C==i.bottom-u.bottom>u.top-i.top&&(C=this.above[l]=!C);let k=(C?u.top-i.top:i.bottom-u.bottom)-p;if(kx&&U.topS&&(S=C?U.top-O-2-p:U.bottom+p+2);if(this.position=="absolute"?(h.style.top=(S-n.parent.top)/s+"px",nc(h,(x-n.parent.left)/r)):(h.style.top=S/s+"px",nc(h,x/r)),d){let U=u.left+(b?y.x:-y.x)-(x+14-7);d.style.left=U/r+"px"}c.overlap!==!0&&o.push({left:x,top:S,right:v,bottom:S+O}),h.classList.toggle("cm-tooltip-above",C),h.classList.toggle("cm-tooltip-below",!C),c.positioned&&c.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=nr}},{eventObservers:{scroll(){this.maybeMeasure()}}});function nc(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const XO=R.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),LO={x:0,y:0},Os=K.define({enables:[Cl,XO]}),Dr=K.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class gs{static create(e){return new gs(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Mu(e,Dr,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let r=i[e];if(r!==void 0){if(t===void 0)t=r;else if(t!==r)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const BO=Os.compute([Dr],n=>{let e=n.facet(Dr);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:gs.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),qO=K.define();class IO{constructor(e,t,i,r,s,o){this.view=e,this.source=t,this.field=i,this.locked=r,this.setHover=s,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(e){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;eo.bottom||t.xo.right+e.defaultCharacterWidth)return;let l=e.bidiSpans(e.state.doc.lineAt(r)).find(c=>c.from<=r&&c.to>=r),a=l&&l.dir==fe.RTL?-1:1;s=t.x{if(l&&!(Array.isArray(l)&&!l.length)){let a=Array.isArray(l)?l:[l];r&&this.locked.set(a,r),e.dispatch({effects:this.setHover.of(a)})}};if(s&&"then"in s){let l=this.pending={pos:t};s.then(a=>{this.pending==l&&(this.pending=null,o(a))},a=>We(e.state,a,"hover tooltip"))}else o(s)}get tooltip(){let e=this.view.plugin(Cl),t=e?e.manager.tooltips.findIndex(i=>i.create==gs.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:r,tooltip:s}=this;if(r.length&&!this.locked.has(r)&&s&&!zO(s.dom,e)||this.pending){let{pos:o}=r[0]||this.pending,l=(i=(t=r[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!WO(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length&&!this.locked.has(t)){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t);let{active:r}=this;r.length&&!this.locked.has(r)&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const rr=4;function zO(n,e){let{left:t,right:i,top:r,bottom:s}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();r=Math.min(l.top,r),s=Math.max(l.bottom,s)}return e.clientX>=t-rr&&e.clientX<=i+rr&&e.clientY>=r-rr&&e.clientY<=s+rr}function WO(n,e,t,i,r,s){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rightr||Math.min(o.bottom,l)=e&&a<=t}function Eu(n,e={}){let t=W.define(),i=new WeakMap,r=Te.define({create(){return[]},update(o,l){let a=i.get(o);if(o.length&&(e.hideOnChange&&(l.docChanged||l.selection)?o=[]:a&&a(l)?o=[]:e.hideOn&&(o=o.filter(c=>!e.hideOn(l,c)))),l.docChanged&&o.length){let c=[];for(let h of o){let u=l.changes.mapPos(h.pos,-1,De.TrackDel);if(u!=null){let f=Object.assign(Object.create(null),h);f.pos=u,f.end!=null&&(f.end=l.changes.mapPos(f.end)),c.push(f)}}o=c}for(let c of l.effects)c.is(t)&&(o=c.value,a=void 0),(c.is(jO)&&!c.value||c.value==r)&&(o=[]);return o.length&&a&&i.set(o,a),o},provide:o=>Dr.from(o)});const s=xe.define(o=>new IO(o,n,r,i,t,e.hoverTime||300));return{active:r,extension:[r,s,qO.of(s),BO]}}function Uu(n,e){let t=n.plugin(Cl);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const jO=W.define(),rc=K.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Fu(n,e){let t=n.plugin(Du),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const Du=xe.fromClass(class{constructor(n){this.input=n.state.facet(ji),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(rc);this.top=new sr(n,!0,e.topContainer),this.bottom=new sr(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(rc);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new sr(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new sr(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(ji);if(t!=this.input){let i=t.filter(a=>a),r=[],s=[],o=[],l=[];for(let a of i){let c=this.specs.indexOf(a),h;c<0?(h=a(n.view),l.push(h)):(h=this.panels[c],h.update&&h.update(n)),r.push(h),(h.top?s:o).push(h)}this.specs=i,this.panels=r,this.top.sync(s),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>R.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class sr{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=sc(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=sc(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function sc(n){let e=n.nextSibling;return n.remove(),e}const ji=K.define({enables:Du});function VO(n,e){let t,i=new Promise(o=>t=o),r=o=>YO(o,e,t);n.state.field(qs,!1)?n.dispatch({effects:Xu.of(r)}):n.dispatch({effects:W.appendConfig.of(qs.init(()=>[r]))});let s=Lu.of(r);return{close:s,result:i.then(o=>((n.win.queueMicrotask||(a=>n.win.setTimeout(a,10)))(()=>{n.state.field(qs).indexOf(r)>-1&&n.dispatch({effects:s})}),o))}}const qs=Te.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(Xu)?n=[t.value].concat(n):t.is(Lu)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>ji.computeN([n],e=>e.field(n))}),Xu=W.define(),Lu=W.define();function YO(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=he("form"),e.input){let l=he("input",e.input);/^(text|password|number|email|tel|url)$/.test(l.type)&&l.classList.add("cm-textfield"),l.name||(l.name="input"),i.appendChild(he("label",(e.label||"")+": ",l))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(he("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let r=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let l=0;l{c.keyCode==27?(c.preventDefault(),o(null)):c.keyCode==13&&(c.preventDefault(),o(a))}),a.addEventListener("submit",c=>{c.preventDefault(),o(a)})}let s=he("div",i,he("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["×"]));e.class&&(s.className=e.class),s.classList.add("cm-dialog");function o(l){s.contains(s.ownerDocument.activeElement)&&n.focus(),t(l)}return{dom:s,top:e.top,mount:()=>{if(e.focus){let l;typeof e.focus=="string"?l=i.querySelector(e.focus):l=i.querySelector("input")||i.querySelector("button"),l&&"select"in l?l.select():l&&"focus"in l&&l.focus()}}}}class Mt extends Jt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Mt.prototype.elementClass="";Mt.prototype.toDOM=void 0;Mt.prototype.mapMode=De.TrackBefore;Mt.prototype.startSide=Mt.prototype.endSide=-1;Mt.prototype.point=!0;const xr=K.define(),NO=K.define(),GO={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>N.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},An=K.define();function Bu(n){return[qu(),An.of({...GO,...n})]}const oc=K.define({combine:n=>n.some(e=>e)});function qu(n){return[HO]}const HO=xe.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(An).map(e=>new ac(n,e)),this.fixed=!n.state.facet(oc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(oc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=N.iter(this.view.state.facet(xr),this.view.viewport.from),i=[],r=this.gutters.map(s=>new _O(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(s.type)){let o=!0;for(let l of s.type)if(l.type==Xe.Text&&o){Yo(t,i,l.from);for(let a of r)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of r)a.widget(this.view,l)}else if(s.type==Xe.Text){Yo(t,i,s.from);for(let o of r)o.line(this.view,s,i)}else if(s.widget)for(let o of r)o.widget(this.view,s);for(let s of r)s.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(An),t=n.state.facet(An),i=n.docChanged||n.heightChanged||n.viewportChanged||!N.eq(n.startState.facet(xr),n.state.facet(xr),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(n)&&(i=!0);else{i=!0;let r=[];for(let s of t){let o=e.indexOf(s);o<0?r.push(new ac(this.view,s)):(this.gutters[o].update(n),r.push(this.gutters[o]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=r}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>R.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,r=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==fe.LTR?{left:i,right:r}:{right:i,left:r}})});function lc(n){return Array.isArray(n)?n:[n]}function Yo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class _O{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=N.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:r}=this,s=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==r.elements.length){let l=new Iu(e,o,s,i);r.elements.push(l),r.dom.appendChild(l.dom)}else r.elements[this.i].update(e,o,s,i);this.height=t.bottom,this.i++}line(e,t,i){let r=[];Yo(this.cursor,r,t.from),i.length&&(r=r.concat(i));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let o=this.gutter;r.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),r=i?[i]:null;for(let s of e.state.facet(NO)){let o=s(e,t.widget,t);o&&(r||(r=[])).push(o)}r&&this.addElement(e,t,r)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class ac{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,r=>{let s=r.target,o;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let a=s.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=r.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,r)&&r.preventDefault()});this.markers=lc(t.markers(e)),t.initialSpacer&&(this.spacer=new Iu(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=lc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let i=e.view.viewport;return!N.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class Iu{constructor(e,t,i,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,r)}update(e,t,i,r){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),JO(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let i="cm-gutterElement",r=this.dom.firstChild;for(let s=0,o=0;;){let l=o,a=ss(l,a,c)||o(l,a,c):o}return i}})}});class Is extends Mt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function zs(n,e){return n.state.facet($i).formatNumber(e,n.state)}const ig=An.compute([$i],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(eg)},lineMarker(e,t,i){return i.some(r=>r.toDOM)?null:new Is(zs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let r of e.state.facet(tg)){let s=r(e,t,i);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet($i)!=e.state.facet($i),initialSpacer(e){return new Is(zs(e,cc(e.state.doc.lines)))},updateSpacer(e,t){let i=zs(t.view,cc(t.view.state.doc.lines));return i==e.number?e:new Is(i)},domEventHandlers:n.facet($i).domEventHandlers,side:"before"}));function ng(n={}){return[$i.of(n),qu(),ig]}function cc(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.head).from;r>t&&(t=r,e.push(rg.range(r)))}return N.of(e)});function og(){return sg}const zu=1024;let lg=0;class Ws{constructor(e,t){this.from=e,this.to=t}}class H{constructor(e={}){this.id=lg++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=et.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}H.closedBy=new H({deserialize:n=>n.split(" ")});H.openedBy=new H({deserialize:n=>n.split(" ")});H.group=new H({deserialize:n=>n.split(" ")});H.isolate=new H({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});H.contextHash=new H({perNode:!0});H.lookAhead=new H({perNode:!0});H.mounted=new H({perNode:!0});class bn{constructor(e,t,i,r=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=r}static get(e){return e&&e.props&&e.props[H.mounted.id]}}const ag=Object.create(null);class et{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):ag,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new et(e.name||"",t,e.id,i);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(H.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(" "))t[r]=e[i];return i=>{for(let r=i.prop(H.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?i.name:r[s]];if(o)return o}}}}et.none=new et("",Object.create(null),0,8);class Tl{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|be.IncludeAnonymous);;){let c=!1;if(a.from<=s&&a.to>=r&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;c=!0}for(;c&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;c=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Kl(et.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new ke(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new ke(et.none,t,i,r)))}static build(e){return fg(e)}}ke.empty=new ke(et.none,[],[],0);class $l{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new $l(this.buffer,this.index)}}class ni{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return et.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Pn(n,e,t,i){for(var r;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=c;e+=t){let h=l[e],u=a[e]+o.from,f;if(!(!(s&be.EnterBracketed&&h instanceof ke&&(f=bn.get(h))&&!f.overlay&&f.bracketed&&i>=u&&i<=u+h.length)&&!Wu(r,i,u,u+h.length))){if(h instanceof ni){if(s&be.ExcludeBuffers)continue;let d=h.findChild(0,h.buffer.length,t,i-u,r);if(d>-1)return new Tt(new cg(o,h,e,u),null,d)}else if(s&be.IncludeAnonymous||!h.type.isAnonymous||Rl(h)){let d;if(!(s&be.IgnoreMounts)&&(d=bn.get(h))&&!d.overlay)return new Je(d.tree,u,e,o);let p=new Je(h,u,e,o);return s&be.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?h.children.length-1:0,t,i,r,s)}}}if(s&be.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let r;if(!(i&be.IgnoreOverlays)&&(r=bn.get(this._tree))&&r.overlay){let s=e-this.from,o=i&be.EnterBracketed&&r.bracketed;for(let{from:l,to:a}of r.overlay)if((t>0||o?l<=s:l=s:a>s))return new Je(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function uc(n,e,t,i){let r=n.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(let o=!1;!o;)if(o=r.type.is(t),!r.nextSibling())return s}for(;;){if(i!=null&&r.type.is(i))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return i==null?s:[]}}function No(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class cg{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}}class Tt extends ju{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new Tt(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&be.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new Tt(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,s=i.buffer[this.index+3];if(s>r){let o=i.buffer[this.index+1];e.push(i.slice(r,s,o)),t.push(0)}return new ke(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function Vu(n){if(!n.length)return null;let e=0,t=n[0];for(let s=1;st.from||o.to=e){let l=new Je(o.tree,o.overlay[0].from+s.from,-1,s);(r||(r=[i])).push(Pn(l,e,t,!1))}}return r?Vu(r):i}class Go{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~be.EnterBracketed,e instanceof Je)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof Je?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&be.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&be.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&be.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,o=e<0?-1:i._tree.children.length;s!=o;s+=e){let l=i._tree.children[s];if(this.mode&be.IncludeAnonymous||l instanceof ni||!l.type.isAnonymous||Rl(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,i=s+1;break e}r=this.stack[--s]}for(let r=i;r=0;s--){if(s<0)return No(this._tree,e,r);let o=i[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}}function Rl(n){return n.children.some(e=>e instanceof ni||!e.type.isAnonymous||Rl(e))}function fg(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=zu,reused:s=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new $l(t,t.length):t,a=i.types,c=0,h=0;function u(k,S,v,U,F,j){let{id:E,start:M,end:Y,size:Q}=l,D=h,P=c;if(Q<0)if(l.next(),Q==-1){let q=s[E];v.push(q),U.push(M-k);return}else if(Q==-3){c=E;return}else if(Q==-4){h=E;return}else throw new RangeError(`Unrecognized record size: ${Q}`);let V=a[E],le,J,ee=M-k;if(Y-M<=r&&(J=O(l.pos-S,F))){let q=new Uint16Array(J.size-J.skip),G=l.pos-J.size,ce=q.length;for(;l.pos>G;)ce=y(J.start,q,ce);le=new ni(q,Y-J.start,i),ee=J.start-k}else{let q=l.pos-Q;l.next();let G=[],ce=[],I=E>=o?E:-1,te=0,se=Y;for(;l.pos>q;)I>=0&&l.id==I&&l.size>=0?(l.end<=se-r&&(p(G,ce,M,te,l.end,se,I,D,P),te=G.length,se=l.end),l.next()):j>2500?f(M,q,G,ce):u(M,q,G,ce,I,j+1);if(I>=0&&te>0&&te-1&&te>0){let Me=d(V,P);le=Kl(V,G,ce,0,G.length,0,Y-M,Me,Me)}else le=m(V,G,ce,Y-M,D-Y,P)}v.push(le),U.push(ee)}function f(k,S,v,U){let F=[],j=0,E=-1;for(;l.pos>S;){let{id:M,start:Y,end:Q,size:D}=l;if(D>4)l.next();else{if(E>-1&&Y=0;Q-=3)M[D++]=F[Q],M[D++]=F[Q+1]-Y,M[D++]=F[Q+2]-Y,M[D++]=D;v.push(new ni(M,F[2]-Y,i)),U.push(Y-k)}}function d(k,S){return(v,U,F)=>{let j=0,E=v.length-1,M,Y;if(E>=0&&(M=v[E])instanceof ke){if(!E&&M.type==k&&M.length==F)return M;(Y=M.prop(H.lookAhead))&&(j=U[E]+M.length+Y)}return m(k,v,U,F,j,S)}}function p(k,S,v,U,F,j,E,M,Y){let Q=[],D=[];for(;k.length>U;)Q.push(k.pop()),D.push(S.pop()+v-F);k.push(m(i.types[E],Q,D,j-F,M-j,Y)),S.push(F-v)}function m(k,S,v,U,F,j,E){if(j){let M=[H.contextHash,j];E=E?[M].concat(E):[M]}if(F>25){let M=[H.lookAhead,F];E=E?[M].concat(E):[M]}return new ke(k,S,v,U,E)}function O(k,S){let v=l.fork(),U=0,F=0,j=0,E=v.end-r,M={size:0,start:0,skip:0};e:for(let Y=v.pos-k;v.pos>Y;){let Q=v.size;if(v.id==S&&Q>=0){M.size=U,M.start=F,M.skip=j,j+=4,U+=4,v.next();continue}let D=v.pos-Q;if(Q<0||D=o?4:0,V=v.start;for(v.next();v.pos>D;){if(v.size<0)if(v.size==-3||v.size==-4)P+=4;else break e;else v.id>=o&&(P+=4);v.next()}F=V,U+=Q,j+=P}return(S<0||U==k)&&(M.size=U,M.start=F,M.skip=j),M.size>4?M:void 0}function y(k,S,v){let{id:U,start:F,end:j,size:E}=l;if(l.next(),E>=0&&U4){let Y=l.pos-(E-4);for(;l.pos>Y;)v=y(k,S,v)}S[--v]=M,S[--v]=j-k,S[--v]=F-k,S[--v]=U}else E==-3?c=U:E==-4&&(h=U);return v}let b=[],x=[];for(;l.pos>0;)u(n.start||0,n.bufferStart||0,b,x,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:b.length?x[0]+b[0].length:0;return new ke(a[n.topID],b.reverse(),x.reverse(),C)}const fc=new WeakMap;function wr(n,e){if(!n.isAnonymous||e instanceof ni||e.type!=n)return 1;let t=fc.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ke)){t=1;break}t+=wr(n,i)}fc.set(e,t)}return t}function Kl(n,e,t,i,r,s,o,l,a){let c=0;for(let p=i;p=h)break;S+=v}if(x==C+1){if(S>h){let v=p[C];d(v.children,v.positions,0,v.children.length,m[C]+b);continue}u.push(p[C])}else{let v=m[x-1]+p[x-1].length-k;u.push(Kl(n,p,m,C,x,k,v,null,a))}f.push(k+b-s)}}return d(e,t,i,r,0),(l||a)(u,f,o)}class dg{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let r=this.map.get(e);r||this.map.set(e,r=new Map),r.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Je&&this.map.set(e.tree,t)}get(e){return e instanceof Tt?this.getBuffer(e.context.buffer,e.index):e instanceof Je?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class gi{constructor(e,t,i,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new gi(0,e.length,e,0,!1,i)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let l=0,a=0,c=0;;l++){let h=l=i)for(;o&&o.from=f.from||u<=f.to||c){let d=Math.max(f.from,a)-c,p=Math.min(f.to,u)-c;f=d>=p?null:new gi(d,p,f.tree,f.offset+c,l>0,!!h)}if(f&&r.push(f),o.to>u)break;o=snew Ws(r.from,r.to)):[new Ws(0,0)]:[new Ws(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let s=r.advance();if(s)return s}}}class pg{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new H({perNode:!0});let mg=0;class at{constructor(e,t,i,r){this.name=e,this.set=t,this.base=i,this.modified=r,this.id=mg++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof at&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let r=new at(i,[],null,[]);if(r.set.push(r),t)for(let s of t.set)r.set.push(s);return r}static defineModifier(e){let t=new Xr(e);return i=>i.modified.indexOf(t)>-1?i:Xr.get(i.base||i,i.modified.concat(t).sort((r,s)=>r.id-s.id))}}let Og=0;class Xr{constructor(e){this.name=e,this.instances=[],this.id=Og++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&gg(t,l.modified));if(i)return i;let r=[],s=new at(e.name,r,e,t);for(let l of t)l.instances.push(s);let o=yg(t);for(let l of e.set)if(!l.modified.length)for(let a of o)r.push(Xr.get(l,a));return s}}function gg(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function yg(n){let e=[[]];for(let t=0;ti.length-t.length)}function Nu(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let r of t.split(" "))if(r){let s=[],o=2,l=r;for(let u=0;;){if(l=="..."&&u>0&&u+3==r.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!f)throw new RangeError("Invalid path: "+r);if(s.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),u+=f[0].length,u==r.length)break;let d=r[u++];if(u==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);l=r.slice(u)}let a=s.length-1,c=s[a];if(!c)throw new RangeError("Invalid path: "+r);let h=new Cn(i,o,a>0?s.slice(0,a):null);e[c]=h.sort(e[c])}}return Gu.add(e)}const Gu=new H({combine(n,e){let t,i,r;for(;n||e;){if(!n||e&&n.depth>=e.depth?(r=e,e=e.next):(r=n,n=n.next),t&&t.mode==r.mode&&!r.context&&!t.context)continue;let s=new Cn(r.tags,r.mode,r.context);t?t.next=s:i=s,t=s}return i}});class Cn{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=r;for(let l of s)for(let a of l.set){let c=t[a.id];if(c){o=o?o+" "+c:c;break}}return o},scope:i}}function Ag(n,e){let t=null;for(let i of n){let r=i.style(e);r&&(t=t?t+" "+r:r)}return t}function bg(n,e,t,i=0,r=n.length){let s=new Sg(i,Array.isArray(e)?e:[e],t);s.highlightRange(n.cursor(),i,r,"",s.highlighters),s.flush(r)}class Sg{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,s){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let c=r,h=xg(e)||Cn.empty,u=Ag(s,h.tags);if(u&&(c&&(c+=" "),c+=u,h.mode==1&&(r+=(r?" ":"")+u)),this.startSpan(Math.max(t,l),c),h.opaque)return;let f=e.tree&&e.tree.prop(H.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+l,1),p=this.highlighters.filter(O=>!O.scope||O.scope(f.tree.type)),m=e.firstChild();for(let O=0,y=l;;O++){let b=O=x||!e.nextSibling())););if(!b||x>i)break;y=b.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,b.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),c))}m&&e.parent()}else if(e.firstChild()){f&&(r="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,s),this.startSpan(Math.min(i,e.to),c)}while(e.nextSibling());e.parent()}}}function xg(n){let e=n.type.prop(Gu);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const T=at.define,lr=T(),jt=T(),dc=T(jt),pc=T(jt),Vt=T(),ar=T(Vt),js=T(Vt),vt=T(),ai=T(vt),xt=T(),wt=T(),Ho=T(),on=T(Ho),cr=T(),g={comment:lr,lineComment:T(lr),blockComment:T(lr),docComment:T(lr),name:jt,variableName:T(jt),typeName:dc,tagName:T(dc),propertyName:pc,attributeName:T(pc),className:T(jt),labelName:T(jt),namespace:T(jt),macroName:T(jt),literal:Vt,string:ar,docString:T(ar),character:T(ar),attributeValue:T(ar),number:js,integer:T(js),float:T(js),bool:T(Vt),regexp:T(Vt),escape:T(Vt),color:T(Vt),url:T(Vt),keyword:xt,self:T(xt),null:T(xt),atom:T(xt),unit:T(xt),modifier:T(xt),operatorKeyword:T(xt),controlKeyword:T(xt),definitionKeyword:T(xt),moduleKeyword:T(xt),operator:wt,derefOperator:T(wt),arithmeticOperator:T(wt),logicOperator:T(wt),bitwiseOperator:T(wt),compareOperator:T(wt),updateOperator:T(wt),definitionOperator:T(wt),typeOperator:T(wt),controlOperator:T(wt),punctuation:Ho,separator:T(Ho),bracket:on,angleBracket:T(on),squareBracket:T(on),paren:T(on),brace:T(on),content:vt,heading:ai,heading1:T(ai),heading2:T(ai),heading3:T(ai),heading4:T(ai),heading5:T(ai),heading6:T(ai),contentSeparator:T(vt),list:T(vt),quote:T(vt),emphasis:T(vt),strong:T(vt),link:T(vt),monospace:T(vt),strikethrough:T(vt),inserted:T(),deleted:T(),changed:T(),invalid:T(),meta:cr,documentMeta:T(cr),annotation:T(cr),processingInstruction:T(cr),definition:at.defineModifier("definition"),constant:at.defineModifier("constant"),function:at.defineModifier("function"),standard:at.defineModifier("standard"),local:at.defineModifier("local"),special:at.defineModifier("special")};for(let n in g){let e=g[n];e instanceof at&&(e.name=n)}Hu([{tag:g.link,class:"tok-link"},{tag:g.heading,class:"tok-heading"},{tag:g.emphasis,class:"tok-emphasis"},{tag:g.strong,class:"tok-strong"},{tag:g.keyword,class:"tok-keyword"},{tag:g.atom,class:"tok-atom"},{tag:g.bool,class:"tok-bool"},{tag:g.url,class:"tok-url"},{tag:g.labelName,class:"tok-labelName"},{tag:g.inserted,class:"tok-inserted"},{tag:g.deleted,class:"tok-deleted"},{tag:g.literal,class:"tok-literal"},{tag:g.string,class:"tok-string"},{tag:g.number,class:"tok-number"},{tag:[g.regexp,g.escape,g.special(g.string)],class:"tok-string2"},{tag:g.variableName,class:"tok-variableName"},{tag:g.local(g.variableName),class:"tok-variableName tok-local"},{tag:g.definition(g.variableName),class:"tok-variableName tok-definition"},{tag:g.special(g.variableName),class:"tok-variableName2"},{tag:g.definition(g.propertyName),class:"tok-propertyName tok-definition"},{tag:g.typeName,class:"tok-typeName"},{tag:g.namespace,class:"tok-namespace"},{tag:g.className,class:"tok-className"},{tag:g.macroName,class:"tok-macroName"},{tag:g.propertyName,class:"tok-propertyName"},{tag:g.operator,class:"tok-operator"},{tag:g.comment,class:"tok-comment"},{tag:g.meta,class:"tok-meta"},{tag:g.invalid,class:"tok-invalid"},{tag:g.punctuation,class:"tok-punctuation"}]);var Vs;const Ri=new H;function _u(n){return K.define({combine:n?e=>e.concat(n):void 0})}const Zl=new H;class mt{constructor(e,t,i=[],r=""){this.data=e,this.name=r,_.prototype.hasOwnProperty("tree")||Object.defineProperty(_.prototype,"tree",{get(){return Ce(this)}}),this.parser=t,this.extension=[ri.of(this),_.languageData.of((s,o,l)=>{let a=mc(s,o,l),c=a.type.prop(Ri);if(!c)return[];let h=s.facet(c),u=a.type.prop(Zl);if(u){let f=a.resolve(o-a.from,l);for(let d of u)if(d.test(f,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(i)}isActiveAt(e,t,i=-1){return mc(e,t,i).type.prop(Ri)==this.data}findRegions(e){let t=e.facet(ri);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(s,o)=>{if(s.prop(Ri)==this.data){i.push({from:o,to:o+s.length});return}let l=s.prop(H.mounted);if(l){if(l.tree.prop(Ri)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+s.length});return}else if(l.overlay){let a=i.length;if(r(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new Lr(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Ce(n){let e=n.field(mt.state,!1);return e?e.tree:ke.empty}class wg{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let ln=null;class Br{constructor(e,t,i=[],r,s,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new Br(e,t,[],ke.empty,0,i,[],null)}startParse(){return this.parser.startParse(new wg(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ke.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(gi.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ln;ln=this;try{return e()}finally{ln=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Oc(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:s,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((c,h,u,f)=>a.push({fromA:c,toA:h,fromB:u,toB:f})),i=gi.applyChanges(i,a),r=ke.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let c of this.skipped){let h=e.mapPos(c.from,1),u=e.mapPos(c.to,-1);he.from&&(this.fragments=Oc(this.fragments,r,s),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Yu{createParse(t,i,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let a=ln;if(a){for(let c of r)a.tempSkipped.push(c);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new ke(et.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ln}}function Oc(n,e,t){return gi.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class Vi{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Vi(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Br.create(e.facet(ri).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Vi(i)}}mt.state=Te.define({create:Vi.init,update(n,e){for(let t of e.effects)if(t.is(mt.setState))return t.value;return e.startState.facet(ri)!=e.state.facet(ri)?Vi.init(e.state):n.apply(e)}});let Ju=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Ju=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Ys=typeof navigator<"u"&&(!((Vs=navigator.scheduling)===null||Vs===void 0)&&Vs.isInputPending)?()=>navigator.scheduling.isInputPending():null,vg=xe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(mt.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(mt.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Ju(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,a=s.context.work(()=>Ys&&Ys()||Date.now()>o,r+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:mt.setState.of(new Vi(s.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>We(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),ri=K.define({combine(n){return n.length?n[0]:null},enables:n=>[mt.state,vg,R.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class kg{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const Qg=K.define(),ys=K.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function qr(n){let e=n.facet(ys);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Tn(n,e){let t="",i=n.tabSize,r=n.facet(ys)[0];if(r==" "){for(;e>=i;)t+=" ",e-=i;r=" "}for(let s=0;s=e?Pg(n,t,e):null}class As{constructor(e,t={}){this.state=e,this.options=t,this.unit=qr(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=i.from&&r<=i.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=o-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return _i(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const ef=new H;function Pg(n,e,t){let i=e.resolveStack(t),r=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(r!=i.node){let s=[];for(let o=r;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)s.push(o);for(let o=s.length-1;o>=0;o--)i={node:s[o],next:i}}return tf(i,n,t)}function tf(n,e,t){for(let i=n;i;i=i.next){let r=Tg(i.node);if(r)return r(El.create(e,t,i))}return 0}function Cg(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Tg(n){let e=n.type.prop(ef);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(H.closedBy))){let r=n.lastChild,s=r&&i.indexOf(r.name)>-1;return o=>nf(o,!0,1,void 0,s&&!Cg(o)?r.from:void 0)}return n.parent==null?$g:null}function $g(){return 0}class El extends As{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new El(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(Rg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return tf(this.context.next,this.base,this.pos)}}function Rg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function Kg(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=n.options.simulateBreak,s=n.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let c=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+c}}l=a.to}}function Zg({closing:n,align:e=!0,units:t=1}){return i=>nf(i,e,t,n)}function nf(n,e,t,i,r){let s=n.textAfter,o=s.match(/^\s*/)[0].length,l=i&&s.slice(o,o+i.length)==i||r==n.pos+o,a=e?Kg(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const Mg=n=>n.baseIndent;function Ns({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}const Eg=200;function Ug(){return _.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,r=t.lineAt(i);if(i>r.from+Eg)return n;let s=t.sliceString(r.from,i);if(!e.some(c=>c.test(s)))return n;let{state:o}=n,l=-1,a=[];for(let{head:c}of o.selection.ranges){let h=o.doc.lineAt(c);if(h.from==l)continue;l=h.from;let u=Ml(o,h.from);if(u==null)continue;let f=/^\s*/.exec(h.text)[0],d=Tn(o,u);f!=d&&a.push({from:h.from,to:h.from+f.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}const Fg=K.define(),rf=new H;function Dg(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(s&&l.from=e&&c.to>t&&(s=c)}}return s}function Lg(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function Ir(n,e,t){for(let i of n.facet(Fg)){let r=i(n,e,t);if(r)return r}return Xg(n,e,t)}function sf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const bs=W.define({map:sf}),Xn=W.define({map:sf});function of(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const xi=Te.define({create(){return B.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((i,r)=>n=gc(n,i,r)),n=n.map(e.changes);let t=[];for(let i of e.effects)i.is(bs)&&!Bg(n,i.value.from,i.value.to)?t.push(i.value):i.is(Xn)&&(n=n.update({filter:(r,s)=>i.value.from!=r||i.value.to!=s,filterFrom:i.value.from,filterTo:i.value.to}));if(t.length){let{preparePlaceholder:i}=e.state.facet(cf),r=t.map(s=>(i?B.replace({widget:new Yg(i(e.state,s))}):yc).range(s.from,s.to));n=n.update({add:r})}return e.selection&&(n=gc(n,e.selection.main.head)),n},provide:n=>R.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,r)=>{t.push(i,r)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{re&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(r,s)=>r>=t||s<=e}):n}function zr(n,e,t){var i;let r=null;return(i=n.field(xi,!1))===null||i===void 0||i.between(e,t,(s,o)=>{(!r||r.from>s)&&(r={from:s,to:o})}),r}function Bg(n,e,t){let i=!1;return n.between(e,e,(r,s)=>{r==e&&s==t&&(i=!0)}),i}function lf(n,e){return n.field(xi,!1)?e:e.concat(W.appendConfig.of(hf()))}const qg=n=>{for(let e of of(n)){let t=Ir(n.state,e.from,e.to);if(t)return n.dispatch({effects:lf(n.state,[bs.of(t),af(n,t)])}),!0}return!1},Ig=n=>{if(!n.state.field(xi,!1))return!1;let e=[];for(let t of of(n)){let i=zr(n.state,t.from,t.to);i&&e.push(Xn.of(i),af(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function af(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,r=n.state.doc.lineAt(e.to).number;return R.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${r}.`)}const zg=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(xi,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,r)=>{t.push(Xn.of({from:i,to:r}))}),n.dispatch({effects:t}),!0},jg=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:qg},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:Ig},{key:"Ctrl-Alt-[",run:zg},{key:"Ctrl-Alt-]",run:Wg}],Vg={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},cf=K.define({combine(n){return yt(n,Vg)}});function hf(n){return[xi,Hg]}function uf(n,e){let{state:t}=n,i=t.facet(cf),r=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=zr(n.state,l.from,l.to);a&&n.dispatch({effects:Xn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,r,e);let s=document.createElement("span");return s.textContent=i.placeholderText,s.setAttribute("aria-label",t.phrase("folded code")),s.title=t.phrase("unfold"),s.className="cm-foldPlaceholder",s.onclick=r,s}const yc=B.replace({widget:new class extends Ut{toDOM(n){return uf(n,null)}}});class Yg extends Ut{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return uf(e,this.value)}}const Ng={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Gs extends Mt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function Gg(n={}){let e={...Ng,...n},t=new Gs(e,!0),i=new Gs(e,!1),r=xe.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(ri)!=o.state.facet(ri)||o.startState.field(xi,!1)!=o.state.field(xi,!1)||Ce(o.startState)!=Ce(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new Bt;for(let a of o.viewportLineBlocks){let c=zr(o.state,a.from,a.to)?i:Ir(o.state,a.from,a.to)?t:null;c&&l.add(a.from,a.from,c)}return l.finish()}}),{domEventHandlers:s}=e;return[r,Bu({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(r))===null||l===void 0?void 0:l.markers)||N.empty},initialSpacer(){return new Gs(e,!1)},domEventHandlers:{...s,click:(o,l,a)=>{if(s.click&&s.click(o,l,a))return!0;let c=zr(o.state,l.from,l.to);if(c)return o.dispatch({effects:Xn.of(c)}),!0;let h=Ir(o.state,l.from,l.to);return h?(o.dispatch({effects:bs.of(h)}),!0):!1}}}),hf()]}const Hg=R.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class Ln{constructor(e,t){this.specs=e;let i;function r(l){let a=ei.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const s=typeof t.all=="string"?t.all:t.all?r(t.all):void 0,o=t.scope;this.scope=o instanceof mt?l=>l.prop(Ri)==o.data:o?l=>l==o:void 0,this.style=Hu(e.map(l=>({tag:l.tag,class:l.class||r(Object.assign({},l,{tag:null}))})),{all:s}).style,this.module=i?new ei(i):null,this.themeType=t.themeType}static define(e,t){return new Ln(e,t||{})}}const _o=K.define(),_g=K.define({combine(n){return n.length?[n[0]]:null}});function Hs(n){let e=n.facet(_o);return e.length?e:n.facet(_g)}function Jg(n,e){let t=[t0],i;return n instanceof Ln&&(n.module&&t.push(R.styleModule.of(n.module)),i=n.themeType),i?t.push(_o.computeN([R.darkTheme],r=>r.facet(R.darkTheme)==(i=="dark")?[n]:[])):t.push(_o.of(n)),t}class e0{constructor(e){this.markCache=Object.create(null),this.tree=Ce(e.state),this.decorations=this.buildDeco(e,Hs(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Ce(e.state),i=Hs(e.state),r=i!=Hs(e.startState),{viewport:s}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return B.none;let i=new Bt;for(let{from:r,to:s}of e.visibleRanges)bg(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=B.mark({class:a})))},r,s);return i.finish()}}const t0=si.high(xe.fromClass(e0,{decorations:n=>n.decorations})),i0=Ln.define([{tag:g.meta,color:"#404740"},{tag:g.link,textDecoration:"underline"},{tag:g.heading,textDecoration:"underline",fontWeight:"bold"},{tag:g.emphasis,fontStyle:"italic"},{tag:g.strong,fontWeight:"bold"},{tag:g.strikethrough,textDecoration:"line-through"},{tag:g.keyword,color:"#708"},{tag:[g.atom,g.bool,g.url,g.contentSeparator,g.labelName],color:"#219"},{tag:[g.literal,g.inserted],color:"#164"},{tag:[g.string,g.deleted],color:"#a11"},{tag:[g.regexp,g.escape,g.special(g.string)],color:"#e40"},{tag:g.definition(g.variableName),color:"#00f"},{tag:g.local(g.variableName),color:"#30a"},{tag:[g.typeName,g.namespace],color:"#085"},{tag:g.className,color:"#167"},{tag:[g.special(g.variableName),g.macroName],color:"#256"},{tag:g.definition(g.propertyName),color:"#00c"},{tag:g.comment,color:"#940"},{tag:g.invalid,color:"#f00"}]),n0=R.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ff=1e4,df="()[]{}",pf=K.define({combine(n){return yt(n,{afterCursor:!0,brackets:df,maxScanDistance:ff,renderMatch:o0})}}),r0=B.mark({class:"cm-matchingBracket"}),s0=B.mark({class:"cm-nonmatchingBracket"});function o0(n){let e=[],t=n.matched?r0:s0;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Ac(n){let e=[],t=n.facet(pf);for(let i of n.selection.ranges){if(!i.empty)continue;let r=$t(n,i.head,-1,t)||i.head>0&&$t(n,i.head-1,1,t)||t.afterCursor&&($t(n,i.head,1,t)||i.headn.decorations}),a0=[l0,n0];function c0(n={}){return[pf.of(n),a0]}const h0=new H;function Jo(n,e,t){let i=n.prop(e<0?H.openedBy:H.closedBy);if(i)return i;if(n.name.length==1){let r=t.indexOf(n.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function el(n){let e=n.type.prop(h0);return e?e(n.node):n}function $t(n,e,t,i={}){let r=i.maxScanDistance||ff,s=i.brackets||df,o=Ce(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let c=Jo(a.type,t,s);if(c&&a.from0?e>=h.from&&eh.from&&e<=h.to))return u0(n,e,t,a,h,c,s)}}return f0(n,e,t,o,l.type,r,s)}function u0(n,e,t,i,r,s,o){let l=i.parent,a={from:r.from,to:r.to},c=0,h=l?.cursor();if(h&&(t<0?h.childBefore(i.from):h.childAfter(i.to)))do if(t<0?h.to<=i.from:h.from>=i.to){if(c==0&&s.indexOf(h.type.name)>-1&&h.from0)return null;let c={from:t<0?e-1:e,to:t>0?e+1:e},h=n.doc.iterRange(e,t>0?n.doc.length:0),u=0;for(let f=0;!h.next().done&&f<=s;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,O=t>0?d.length:-1;m!=O;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=r))if(y%2==0==t>0)u++;else{if(u==1)return{start:c,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};u--}}t>0&&(f+=d.length)}return h.done?{start:c,matched:!1}:null}const d0=Object.create(null),bc=[et.none],Sc=[],xc=Object.create(null),p0=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])p0[n]=m0(d0,e);function _s(n,e){Sc.indexOf(n)>-1||(Sc.push(n),console.warn(e))}function m0(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let c of l.split(".")){let h=n[c]||g[c];h?typeof h=="function"?a.length?a=a.map(h):_s(c,`Modifier ${c} used at start of tag`):a.length?_s(c,`Tag ${c} used as modifier`):a=Array.isArray(h)?h:[h]:_s(c,`Unknown highlighting tag ${c}`)}for(let c of a)t.push(c)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),r=i+" "+t.map(l=>l.id),s=xc[r];if(s)return s.id;let o=xc[r]=et.define({id:bc.length,name:i,props:[Nu({[i]:t})]});return bc.push(o),o.id}fe.RTL,fe.LTR;const O0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Fl(n.state,t.from);return i.line?g0(n):i.block?A0(n):!1};function Ul(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=n(e,t);return r?(i(t.update(r)),!0):!1}}const g0=Ul(x0,0),y0=Ul(mf,0),A0=Ul((n,e)=>mf(n,e,S0(e)),0);function Fl(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const an=50;function b0(n,{open:e,close:t},i,r){let s=n.sliceDoc(i-an,i),o=n.sliceDoc(r,r+an),l=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(o)[0].length,c=s.length-l;if(s.slice(c-e.length,c)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:r+a,margin:a&&1}};let h,u;r-i<=2*an?h=u=n.sliceDoc(i,r):(h=n.sliceDoc(i,i+an),u=n.sliceDoc(r-an,r));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(u)[0].length,p=u.length-d-t.length;return h.slice(f,f+e.length)==e&&u.slice(p,p+t.length)==t?{open:{pos:i+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(u.charAt(p-1))?1:0}}:null}function S0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),r=t.to<=i.to?i:n.doc.lineAt(t.to);r.from>i.from&&r.from==t.to&&(r=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>i.from?e[s].to=r.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:r.to})}return e}function mf(n,e,t=e.selection.ranges){let i=t.map(s=>Fl(e,s.from).block);if(!i.every(s=>s))return null;let r=t.map((s,o)=>b0(e,i[o],s.from,s.to));if(n!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:i[o].open+" "},{from:s.to,insert:" "+i[o].close}]))};if(n!=1&&r.some(s=>s)){let s=[];for(let o=0,l;or&&(s==o||o>u.from)){r=u.from;let f=/^\s*/.exec(u.text)[0].length,d=f==u.length,p=u.text.slice(f,f+c.length)==c?f:-1;fs.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:l,token:a,indent:c,empty:h,single:u}of i)(u||!h)&&s.push({from:l.from+c,insert:a+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let c=o.from+l,h=c+a.length;o.text[h-o.from]==" "&&h++,s.push({from:c,to:h})}return{changes:s}}return null}const tl=zt.define(),vr=zt.define(),w0=K.define(),Of=K.define({combine(n){return yt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}}),Dl=Te.define({create(){return Rt.empty},update(n,e){let t=e.state.facet(Of),i=e.annotation(tl);if(i){let a=_e.fromTransaction(e,i.selection),c=i.side,h=c==0?n.undone:n.done;return a?h=jr(h,h.length,t.minDepth,a):h=Af(h,e.startState.selection),new Rt(c==0?i.rest:h,c==0?h:i.rest)}let r=e.annotation(vr);if((r=="full"||r=="before")&&(n=n.isolate()),e.annotation(Pe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let s=_e.fromTransaction(e),o=e.annotation(Pe.time),l=e.annotation(Pe.userEvent);return s?n=n.addChanges(s,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(r=="full"||r=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new Rt(n.done.map(_e.fromJSON),n.undone.map(_e.fromJSON))}});function v0(n={}){return[Dl,Of.of(n),R.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Xl:e.inputType=="historyRedo"?Wr:null;return i?(e.preventDefault(),i(t)):!1}})]}function Ss(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(Dl,!1);if(!r)return!1;let s=r.pop(n,t,e);return s?(i(s),!0):!1}}const Xl=Ss(0,!1),Wr=Ss(1,!1),k0=Ss(0,!0),Q0=Ss(1,!0);function gf(n){return function(e){let t=e.field(Dl,!1);if(!t)return 0;let i=n==0?t.done:t.undone;return i.length-(i.length&&!i[0].changes?1:0)}}const wc=gf(0),vc=gf(1);class _e{constructor(e,t,i,r,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new _e(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new _e(e.changes&&$e.fromJSON(e.changes),[],e.mapped&&Zt.fromJSON(e.mapped),e.startSelection&&A.fromJSON(e.startSelection),e.selectionsAfter.map(A.fromJSON))}static fromTransaction(e,t){let i=ht;for(let r of e.startState.facet(w0)){let s=r(e);s.length&&(i=i.concat(s))}return!i.length&&e.changes.empty?null:new _e(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ht)}static selection(e){return new _e(void 0,ht,void 0,void 0,e)}}function jr(n,e,t,i){let r=e+1>t+20?e-t-1:0,s=n.slice(r,e);return s.push(i),s}function P0(n,e){let t=[],i=!1;return n.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,l)=>{for(let a=0;a=c&&o<=h&&(i=!0)}}),i}function C0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function yf(n,e){return n.length?e.length?n.concat(e):n:e}const ht=[],T0=200;function Af(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-T0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),jr(n,n.length-1,1e9,t.setSelAfter(i)))}else return[_e.selection([e])]}function $0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Js(n,e){if(!n.length)return n;let t=n.length,i=ht;for(;t;){let r=R0(n[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let s=n.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[_e.selection(i)]:ht}function R0(n,e,t){let i=yf(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ht,t);if(!n.changes)return _e.selection(i);let r=n.changes.map(e),s=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(s):s;return new _e(r,W.mapEffects(n.effects,e),o,n.startSelection.map(s),i)}const K0=/^(input\.type|delete)($|\.)/;class Rt{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new Rt(this.done,this.undone):this}addChanges(e,t,i,r,s){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||K0.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):xs(t,e))}function Be(n){return n.textDirectionAt(n.state.selection.main.head)==fe.LTR}const Sf=n=>bf(n,!Be(n)),xf=n=>bf(n,Be(n));function wf(n,e){return bt(n,t=>t.empty?n.moveByGroup(t,e):xs(t,e))}const M0=n=>wf(n,!Be(n)),E0=n=>wf(n,Be(n));function U0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function ws(n,e,t){let i=Ce(n).resolveInner(e.head),r=t?H.closedBy:H.openedBy;for(let a=e.head;;){let c=t?i.childAfter(a):i.childBefore(a);if(!c)break;U0(n,c,r)?i=c:a=t?c.to:c.from}let s=i.type.prop(r),o,l;return s&&(o=t?$t(n,i.from,1):$t(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,A.cursor(l,t?-1:1)}const F0=n=>bt(n,e=>ws(n.state,e,!Be(n))),D0=n=>bt(n,e=>ws(n.state,e,Be(n)));function vf(n,e){return bt(n,t=>{if(!t.empty)return xs(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const kf=n=>vf(n,!1),Qf=n=>vf(n,!0);function Pf(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):xs(o,e));if(r.eq(i.selection))return!1;let s;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,c=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomCf(n,!1),il=n=>Cf(n,!0);function oi(n,e,t){let i=n.lineBlockAt(e.head),r=n.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=n.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let s=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;s&&e.head!=i.from+s&&(r=A.cursor(i.from+s))}return r}const X0=n=>bt(n,e=>oi(n,e,!0)),L0=n=>bt(n,e=>oi(n,e,!1)),B0=n=>bt(n,e=>oi(n,e,!Be(n))),q0=n=>bt(n,e=>oi(n,e,Be(n))),I0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).from,1)),z0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).to,-1));function W0(n,e,t){let i=!1,r=Ji(n.selection,s=>{let o=$t(n,s.head,-1)||$t(n,s.head,1)||s.head>0&&$t(n,s.head-1,1)||s.headW0(n,e);function ft(n,e,t){let i=Ji(n.state.selection,r=>{r.undirectional&&r.head>=r.anchor!=e&&(r=A.range(r.head,r.anchor));let s=t(r);return A.range(r.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return i.eq(n.state.selection)?!1:(n.dispatch(At(n.state,i)),!0)}function Tf(n,e){return ft(n,e,t=>n.moveByChar(t,e))}const $f=n=>Tf(n,!Be(n)),Rf=n=>Tf(n,Be(n));function Kf(n,e){return ft(n,e,t=>n.moveByGroup(t,e))}const V0=n=>Kf(n,!Be(n)),Y0=n=>Kf(n,Be(n)),N0=n=>{let e=!Be(n);return ft(n,e,t=>ws(n.state,t,e))},G0=n=>{let e=Be(n);return ft(n,e,t=>ws(n.state,t,e))};function Zf(n,e){return ft(n,e,t=>n.moveVertically(t,e))}const Mf=n=>Zf(n,!1),Ef=n=>Zf(n,!0);function Uf(n,e){return ft(n,e,t=>n.moveVertically(t,e,Pf(n).height))}const Qc=n=>Uf(n,!1),Pc=n=>Uf(n,!0),H0=n=>ft(n,!0,e=>oi(n,e,!0)),_0=n=>ft(n,!1,e=>oi(n,e,!1)),J0=n=>{let e=!Be(n);return ft(n,e,t=>oi(n,t,e))},ey=n=>{let e=Be(n);return ft(n,e,t=>oi(n,t,e))},ty=n=>ft(n,!1,e=>A.cursor(n.lineBlockAt(e.head).from)),iy=n=>ft(n,!0,e=>A.cursor(n.lineBlockAt(e.head).to)),Cc=({state:n,dispatch:e})=>(e(At(n,{anchor:0})),!0),Tc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.doc.length})),!0),$c=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:0})),!0),Rc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),ny=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),ry=({state:n,dispatch:e})=>{let t=vs(n).map(({from:i,to:r})=>A.range(i,Math.min(r+1,n.doc.length)));return e(n.update({selection:A.create(t),userEvent:"select"})),!0},sy=({state:n,dispatch:e})=>{let t=Ji(n.selection,i=>{let r=Ce(n),s=r.resolveStack(i.from,1);if(i.empty){let o=r.resolveStack(i.from,-1);o.node.from>=s.node.from&&o.node.to<=s.node.to&&(s=o)}for(let o=s;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return A.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(At(n,t)),!0)};function Ff(n,e){let{state:t}=n,i=t.selection,r=t.selection.ranges.slice();for(let s of t.selection.ranges){let o=t.doc.lineAt(s.head);if(e?o.to0)for(let l=s;;){let a=n.moveVertically(l,e);if(a.heado.to){r.some(c=>c.head==a.head)||r.push(a);break}else{if(a.head==l.head)break;l=a}}}return r.length==i.ranges.length?!1:(n.dispatch(At(t,A.create(r,r.length-1))),!0)}const oy=n=>Ff(n,!1),ly=n=>Ff(n,!0),ay=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=A.create([t.main]):t.main.empty||(i=A.create([A.cursor(t.main.head)])),i?(e(At(n,i)),!0):!1};function Bn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,r=i.changeByRange(s=>{let{from:o,to:l}=s;if(o==l){let a=e(s);ao&&(t="delete.forward",a=hr(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=hr(n,o,!1),l=hr(n,l,!0);return o==l?{range:s}:{changes:{from:o,to:l},range:A.cursor(o,or(n)))i.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}const Df=(n,e,t)=>Bn(n,i=>{let r=i.from,{state:s}=n,o=s.doc.lineAt(r),l,a;if(t&&!e&&r>o.from&&rDf(n,!1,!0),Xf=n=>Df(n,!0,!1),Lf=(n,e)=>Bn(n,t=>{let i=t.head,{state:r}=n,s=r.doc.lineAt(i),o=r.charCategorizer(i);for(let l=null;;){if(i==(e?s.to:s.from)){i==t.head&&s.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let a=Ze(s.text,i-s.from,e)+s.from,c=s.text.slice(Math.min(i,a)-s.from,Math.max(i,a)-s.from),h=o(c);if(l!=null&&h!=l)break;(c!=" "||i!=t.head)&&(l=h),i=a}return i}),Bf=n=>Lf(n,!1),cy=n=>Lf(n,!0),hy=n=>Bn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headBn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),fy=n=>Bn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:re.of(["",""])},range:A.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},py=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let r=i.from,s=n.doc.lineAt(r),o=r==s.from?r-1:Ze(s.text,r-s.from,!1)+s.from,l=r==s.to?r+1:Ze(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:l,insert:n.doc.slice(r,l).append(n.doc.slice(o,r))},range:A.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function vs(n){let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.from),s=n.doc.lineAt(i.to);if(!i.empty&&i.to==s.from&&(s=n.doc.lineAt(i.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(i)}else e.push({from:r.from,to:s.to,ranges:[i]});t=s.number+1}return e}function qf(n,e,t){if(n.readOnly)return!1;let i=[],r=[];for(let s of vs(n)){if(t?s.to==n.doc.length:s.from==0)continue;let o=n.doc.lineAt(t?s.to+1:s.from-1),l=o.length+1;if(t){i.push({from:s.to,to:o.to},{from:s.from,insert:o.text+n.lineBreak});for(let a of s.ranges)r.push(A.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:s.from},{from:s.to,insert:n.lineBreak+o.text});for(let a of s.ranges)r.push(A.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:A.create(r,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const my=({state:n,dispatch:e})=>qf(n,e,!1),Oy=({state:n,dispatch:e})=>qf(n,e,!0);function If(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of vs(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});let r=n.changes(i);return e(n.update({changes:r,selection:n.selection.map(r,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const gy=({state:n,dispatch:e})=>If(n,e,!1),yy=({state:n,dispatch:e})=>If(n,e,!0),Ay=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(vs(e).map(({from:r,to:s})=>(r>0?r--:s{let s;if(n.lineWrapping){let o=n.lineBlockAt(r.head),l=n.coordsAtPos(r.head,r.assoc||1);l&&(s=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(r,!0,s)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function by(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Ce(n).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),s;return i&&r&&i.to<=e&&r.from>=e&&(s=i.type.prop(H.closedBy))&&s.indexOf(r.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(r.from).from&&!/\S/.test(n.sliceDoc(i.to,r.from))?{from:i.to,to:r.from}:null}const Kc=zf(!1),Sy=zf(!0);function zf(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:s,to:o}=r,l=e.doc.lineAt(s),a=!n&&s==o&&by(e,s);n&&(s=o=(o<=l.to?l:e.doc.lineAt(o)).to);let c=new As(e,{simulateBreak:s,simulateDoubleBreak:!!a}),h=Ml(c,s);for(h==null&&(h=_i(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ol.from&&s{let r=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,r,i),t=l.number),o=l.to+1}let s=n.changes(r);return{changes:r,range:A.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}})}const xy=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new As(n,{overrideIndentation:s=>{let o=t[s];return o??-1}}),r=Ll(n,(s,o,l)=>{let a=Ml(i,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let c=/^\s*/.exec(s.text)[0],h=Tn(n,a);(c!=h||l.fromn.readOnly?!1:(e(n.update(Ll(n,(t,i)=>{i.push({from:t.from,insert:n.facet(ys)})}),{userEvent:"input.indent"})),!0),jf=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Ll(n,(t,i)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=_i(r,n.tabSize),o=0,l=Tn(n,Math.max(0,s-qr(n)));for(;o(n.setTabFocusMode(),!0),vy=[{key:"Ctrl-b",run:Sf,shift:$f,preventDefault:!0},{key:"Ctrl-f",run:xf,shift:Rf},{key:"Ctrl-p",run:kf,shift:Mf},{key:"Ctrl-n",run:Qf,shift:Ef},{key:"Ctrl-a",run:I0,shift:ty},{key:"Ctrl-e",run:z0,shift:iy},{key:"Ctrl-d",run:Xf},{key:"Ctrl-h",run:nl},{key:"Ctrl-k",run:hy},{key:"Ctrl-Alt-h",run:Bf},{key:"Ctrl-o",run:dy},{key:"Ctrl-t",run:py},{key:"Ctrl-v",run:il}],ky=[{key:"ArrowLeft",run:Sf,shift:$f,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:M0,shift:V0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:B0,shift:J0,preventDefault:!0},{key:"ArrowRight",run:xf,shift:Rf,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:E0,shift:Y0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:q0,shift:ey,preventDefault:!0},{key:"ArrowUp",run:kf,shift:Mf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Cc,shift:$c},{mac:"Ctrl-ArrowUp",run:kc,shift:Qc},{key:"ArrowDown",run:Qf,shift:Ef,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Tc,shift:Rc},{mac:"Ctrl-ArrowDown",run:il,shift:Pc},{key:"PageUp",run:kc,shift:Qc},{key:"PageDown",run:il,shift:Pc},{key:"Home",run:L0,shift:_0,preventDefault:!0},{key:"Mod-Home",run:Cc,shift:$c},{key:"End",run:X0,shift:H0,preventDefault:!0},{key:"Mod-End",run:Tc,shift:Rc},{key:"Enter",run:Kc,shift:Kc},{key:"Mod-a",run:ny},{key:"Backspace",run:nl,shift:nl,preventDefault:!0},{key:"Delete",run:Xf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Bf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:cy,preventDefault:!0},{mac:"Mod-Backspace",run:uy,preventDefault:!0},{mac:"Mod-Delete",run:fy,preventDefault:!0}].concat(vy.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Qy=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:F0,shift:N0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:D0,shift:G0},{key:"Alt-ArrowUp",run:my},{key:"Shift-Alt-ArrowUp",run:gy},{key:"Alt-ArrowDown",run:Oy},{key:"Shift-Alt-ArrowDown",run:yy},{key:"Mod-Alt-ArrowUp",run:oy},{key:"Mod-Alt-ArrowDown",run:ly},{key:"Escape",run:ay},{key:"Mod-Enter",run:Sy},{key:"Alt-l",mac:"Ctrl-l",run:ry},{key:"Mod-i",run:sy,preventDefault:!0},{key:"Mod-[",run:jf},{key:"Mod-]",run:Wf},{key:"Mod-Alt-\\",run:xy},{key:"Shift-Mod-k",run:Ay},{key:"Shift-Mod-\\",run:j0},{key:"Mod-/",run:O0},{key:"Alt-A",run:y0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:wy}].concat(ky),Py={key:"Tab",run:Wf,shift:jf};class Vf{constructor(e,t,i,r){this.state=e,this.pos=t,this.explicit=i,this.view=r,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Ce(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),r=t.text.slice(i-t.from,this.pos-t.from),s=r.search(Nf(e,!1));return s<0?null:{from:i+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function Zc(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Cy(n){let e=Object.create(null),t=Object.create(null);for(let{label:r}of n){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,i]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:Cy(e);return r=>{let s=r.matchBefore(i);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}function Ty(n,e){return t=>{for(let i=Ce(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}let Mc=class{constructor(e,t,i,r){this.completion=e,this.source=t,this.match=i,this.score=r}};function yi(n){return n.selection.main.from}function Nf(n,e){var t;let{source:i}=n,r=e&&i[0]!="^",s=i[i.length-1]!="$";return!r&&!s?n:new RegExp(`${r?"^":""}(?:${i})${s?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const Bl=zt.define();function $y(n,e,t,i){let{main:r}=n.selection,s=t-r.from,o=i-r.from;return{...n.changeByRange(l=>{if(l!=r&&t!=i&&n.sliceDoc(l.from+s,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+s,to:i==r.from?l.to:l.from+o,insert:a},range:A.cursor(l.from+s+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ec=new WeakMap;function Ry(n){if(!Array.isArray(n))return n;let e=Ec.get(n);return e||Ec.set(n,e=Yf(n)),e}const Vr=W.define(),$n=W.define();class Ky{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&k<=57||k>=97&&k<=122?2:k>=65&&k<=90?1:0:(S=fl(k))!=S.toLowerCase()?1:S!=S.toUpperCase()?2:0;(!b||v==1&&O||C==0&&v!=0)&&(t[u]==k||i[u]==k&&(f=!0)?o[u++]=b:o.length&&(y=!1)),C=v,b+=Qt(k)}return u==a&&o[0]==0&&y?this.result(-100+(f?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):u==a?this.result(-100+(f?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((r[0]?-700:0)+-200+-1100,r,e)}result(e,t,i){let r=[],s=0;for(let o of t){let l=o+(this.astral?Qt(Ne(i,o)):1);s&&r[s-1]==o?r[s-1]=l:(r[s++]=o,r[s++]=l)}return this.ret(e-i.length,r)}}class Zy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:My,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Uc(e(i),t(i)),optionClass:(e,t)=>i=>Uc(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Uc(n,e){return n?e?n+" "+e:n:e}function My(n,e,t,i,r,s){let o=n.textDirection==fe.RTL,l=o,a=!1,c="top",h,u,f=e.left-r.left,d=r.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&f=m||b>e.top?h=t.bottom-e.top:(c="bottom",h=e.bottom-t.top)}let O=(e.bottom-e.top)/s.offsetHeight,y=(e.right-e.left)/s.offsetWidth;return{style:`${c}: ${h/O}px; max-width: ${u/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}const ql=W.define();function Ey(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(r=>"cm-completionIcon-"+r)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,r,s){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let c=0;ca&&o.appendChild(document.createTextNode(l.slice(a,h)));let f=o.appendChild(document.createElement("span"));f.appendChild(document.createTextNode(l.slice(h,u))),f.className="cm-completionMatchedText",a=u}return at.position-i.position).map(t=>t.render)}function eo(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let r=Math.floor(e/t);return{from:r*t,to:(r+1)*t}}let i=Math.ceil((n-e)/t);return{from:n-i*t,to:n-(i-1)*t}}class Uy{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let r=e.state.field(t),{options:s,selected:o}=r.open,l=e.state.facet(Ke);this.optionContent=Ey(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=eo(s.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:c}=e.state.field(t).open;for(let h=a.target,u;h&&h!=this.dom;h=h.parentNode)if(h.nodeName=="LI"&&(u=/-(\d+)$/.exec(h.id))&&+u[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;h!=null&&(e.dispatch({effects:ql.of(h)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let c=e.state.field(this.stateField,!1);c&&c.tooltip&&e.state.facet(Ke).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:$n.of(null)})}),this.showOptions(s,r.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),r=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=r){let{options:s,selected:o,disabled:l}=i.open;(!r.open||r.open.options!=s)&&(this.range=eo(s.length,o,e.state.facet(Ke).maxRenderedOptions),this.showOptions(s,i.id)),this.updateSel(),l!=((t=r.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ke).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:s}=r;if(!s)return;let o=typeof s=="string"?document.createTextNode(s):s(r);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,r)}).catch(l=>We(this.view.state,l,"completion info")):(this.addInfoPane(o,r),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:r,destroy:s}=e;i.appendChild(r),this.infoDestroy=s||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,r=this.range.from;i;i=i.nextSibling,r++)i.nodeName!="LI"||!i.id?r--:r==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&Dy(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),r=e.getBoundingClientRect(),s=this.space;if(!s){let o=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return r.top>Math.min(s.bottom,t.bottom)-10||r.bottom{o.target==r&&o.preventDefault()});let s=null;for(let o=i.from;oi.from||i.from==0))if(s=f,typeof c!="string"&&c.header)r.appendChild(c.header(c));else{let d=r.appendChild(document.createElement("completion-section"));d.textContent=f}}const h=r.appendChild(document.createElement("li"));h.id=t+"-"+o,h.setAttribute("role","option");let u=this.optionClass(l);u&&(h.className=u);for(let f of this.optionContent){let d=f(l,this.view.state,this.view,a);d&&h.appendChild(d)}}return i.from&&r.classList.add("cm-completionListIncompleteTop"),i.tonew Uy(t,n,e)}function Dy(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),r=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/r)}function Fc(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Xy(n,e){let t=[],i=null,r=null,s=h=>{t.push(h);let{section:u}=h.completion;if(u){i||(i=[]);let f=typeof u=="string"?u:u.name;i.some(d=>d.name==f)||i.push(typeof u=="string"?{name:f}:u)}},o=e.facet(Ke);for(let h of n)if(h.hasResult()){let u=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)s(new Mc(f,h.source,u?u(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),d,p=o.filterStrict?new Zy(f):new Ky(f);for(let m of h.result.options)if(d=p.match(m.label)){let O=m.displayLabel?u?u(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(s(new Mc(m,h.source,O,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:b}=m.section;r||(r=Object.create(null)),r[b]=Math.max(y,r[b]||-1e9)}}}}if(i){let h=Object.create(null),u=0,f=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?r[p.name]-r[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.namef.score-u.score||c(u.completion,f.completion))){let u=h.completion;!a||a.label!=u.label||a.detail!=u.detail||a.type!=null&&u.type!=null&&a.type!=u.type||a.apply!=u.apply||a.boost!=u.boost?l.push(h):Fc(h.completion)>Fc(a)&&(l[l.length-1]=h),a=h.completion}return l}class Ki{constructor(e,t,i,r,s,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=r,this.selected=s,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Ki(this.options,Dc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,r,s,o){if(r&&!o&&e.some(c=>c.isPending))return r.setDisabled();let l=Xy(e,t);if(!l.length)return r&&e.some(c=>c.isPending)?r.setDisabled():null;let a=t.facet(Ke).selectOnOpen?0:-1;if(r&&r.selected!=a&&r.selected!=-1){let c=r.options[r.selected].completion;for(let h=0;hh.hasResult()?Math.min(c,h.from):c,1e8),create:Wy,above:s.aboveCursor},r?r.timestamp:Date.now(),a,!1)}map(e){return new Ki(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Ki(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Yr{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Yr(Iy,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Ke),s=(i.override||t.languageDataAt("autocomplete",yi(t)).map(Ry)).map(a=>(this.active.find(h=>h.source==a)||new ut(a,this.active.some(h=>h.state!=0)?1:0)).update(e,i));s.length==this.active.length&&s.every((a,c)=>a==this.active[c])&&(s=this.active);let o=this.open,l=e.effects.some(a=>a.is(Il));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||s.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!Ly(s,this.active)||l?o=Ki.build(s,t,this.id,o,i,l):o&&o.disabled&&!s.some(a=>a.isPending)&&(o=null),!o&&s.every(a=>!a.isPending)&&s.some(a=>a.hasResult())&&(s=s.map(a=>a.hasResult()?new ut(a.source,0):a));for(let a of e.effects)a.is(ql)&&(o=o&&o.setSelected(a.value,this.id));return s==this.active&&o==this.open?this:new Yr(s,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?By:qy}}function Ly(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const Iy=[];function Gf(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(Bl);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class ut{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Gf(e,t),r=this;(i&8||i&16&&this.touches(e))&&(r=new ut(r.source,0)),i&4&&r.state==0&&(r=new ut(this.source,1)),r=r.updateFor(e,i);for(let s of e.effects)if(s.is(Vr))r=new ut(r.source,1,s.value);else if(s.is($n))r=new ut(r.source,0);else if(s.is(Il))for(let o of s.value)o.source==r.source&&(r=o);return r}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(yi(e.state))}}class Fi extends ut{constructor(e,t,i,r,s,o){super(e,3,t),this.limit=i,this.result=r,this.from=s,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let r=this.result;r.map&&!e.changes.empty&&(r=r.map(r,e.changes));let s=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=yi(e.state);if(l>o||!r||t&2&&(yi(e.startState)==this.from||lt.map(e))}}),Ge=Te.define({create(){return Yr.start()},update(n,e){return n.update(e)},provide:n=>[Os.from(n,e=>e.tooltip),R.contentAttributes.from(n,e=>e.attrs)]});function zl(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(Ge).active.find(r=>r.source==e.source);return i instanceof Fi?(typeof t=="string"?n.dispatch({...$y(n.state,t,i.from,i.to),annotations:Bl.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const Wy=Fy(Ge,zl);function ur(n,e="option"){return t=>{let i=t.state.field(Ge,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+r*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ql.of(l)}),!0}}const jy=n=>{let e=n.state.field(Ge,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(Ge,!1)?(n.dispatch({effects:Vr.of(!0)}),!0):!1,Vy=n=>{let e=n.state.field(Ge,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:$n.of(null)}),!0)};class Yy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Gy=1e3,Hy=xe.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Ge).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Ge),t=n.state.facet(Ke);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Ge)==e)return;let i=n.transactions.some(s=>{let o=Gf(s,t);return o&8||(s.selection||s.docChanged)&&!(o&3)});for(let s=0;sNy&&Date.now()-o.time>Gy){for(let l of o.context.abortListeners)try{l()}catch(a){We(this.view.state,a)}o.context.abortListeners=null,this.running.splice(s--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(s=>s.effects.some(o=>o.is(Vr)))&&(this.pendingStart=!0);let r=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(o=>o.active.source==s.source))?setTimeout(()=>this.startUpdate(),r):-1,this.composing!=0)for(let s of n.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Ge);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=yi(e),i=new Vf(e,t,n.explicit,this.view),r=new Yy(n,i);this.running.push(r),Promise.resolve(n.source(i)).then(s=>{r.context.aborted||(r.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:$n.of(null)}),We(this.view.state,s)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ke),i=this.view.state.field(Ge);for(let r=0;rl.source==s.active.source);if(o&&o.isPending)if(s.done==null){let l=new ut(s.active.source,0);for(let a of s.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:Il.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Ge,!1);if(e&&e.tooltip&&this.view.state.facet(Ke).closeOnBlur){let t=e.open&&Uu(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:$n.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Vr.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Jy=si.highest(R.domEventHandlers({keydown(n,e){let t=e.state.field(Ge,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],r=t.active.find(o=>o.source==i.source),s=i.completion.commitCharacters||r.result.commitCharacters;return s&&s.indexOf(n.key)>-1&&zl(e,i),!1}})),Hf=R.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class eA{constructor(e,t,i,r){this.field=e,this.line=t,this.from=i,this.to=r}}class Wl{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,De.TrackDel),i=e.mapPos(this.to,1,De.TrackDel);return t==null||i==null?null:new Wl(this.field,t,i)}}class jl{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],r=[t],s=e.doc.lineAt(t),o=/^\s*/.exec(s.text)[0];for(let a of this.lines){if(i.length){let c=o,h=/^\t*/.exec(a)[0].length;for(let u=0;unew Wl(a.field,r[a.line]+a.from,r[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],r=[],s;for(let o of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=s[1]?+s[1]:null,a=s[2]||s[3]||"",c=-1;l===0&&(l=1e9);let h=a.replace(/\\[{}]/g,u=>u[1]);for(let u=0;u=c&&f.field++}for(let u of r)if(u.line==i.length&&u.from>s.index){let f=s[2]?3+(s[1]||"").length:2;u.from-=f,u.to-=f}r.push(new eA(c,i.length,s.index,s.index+h.length)),o=o.slice(0,s.index)+a+o.slice(s.index+s[0].length)}o=o.replace(/\\([{}])/g,(l,a,c)=>{for(let h of r)h.line==i.length&&h.from>c&&(h.from--,h.to--);return a}),i.push(o)}return new jl(i,r)}}let tA=B.widget({widget:new class extends Ut{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),iA=B.mark({class:"cm-snippetField"});class en{constructor(e,t){this.ranges=e,this.active=t,this.deco=B.set(e.map(i=>(i.from==i.to?tA:iA).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let r=i.map(e);if(!r)return null;t.push(r)}return new en(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const qn=W.define({map(n,e){return n&&n.map(e)}}),nA=W.define(),Rn=Te.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(qn))return t.value;if(t.is(nA)&&n)return new en(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>R.decorations.from(n,e=>e?e.deco:B.none)});function Vl(n,e){return A.create(n.filter(t=>t.field==e).map(t=>A.range(t.from,t.to)))}function rA(n){let e=jl.parse(n);return(t,i,r,s)=>{let{text:o,ranges:l}=e.instantiate(t.state,r),{main:a}=t.state.selection,c={changes:{from:r,to:s==a.from?a.to:s,insert:re.of(o)},scrollIntoView:!0,annotations:i?[Bl.of(i),Pe.userEvent.of("input.complete")]:void 0};if(l.length&&(c.selection=Vl(l,0)),l.some(h=>h.field>0)){let h=new en(l,0),u=c.effects=[qn.of(h)];t.state.field(Rn,!1)===void 0&&u.push(W.appendConfig.of([Rn,cA,hA,Hf]))}t.dispatch(t.state.update(c))}}function _f(n){return({state:e,dispatch:t})=>{let i=e.field(Rn,!1);if(!i||n<0&&i.active==0)return!1;let r=i.active+n,s=n>0&&!i.ranges.some(o=>o.field==r+n);return t(e.update({selection:Vl(i.ranges,r),effects:qn.of(s?null:new en(i.ranges,r)),scrollIntoView:!0})),!0}}const sA=({state:n,dispatch:e})=>n.field(Rn,!1)?(e(n.update({effects:qn.of(null)})),!0):!1,oA=_f(1),lA=_f(-1),aA=[{key:"Tab",run:oA,shift:lA},{key:"Escape",run:sA}],Xc=K.define({combine(n){return n.length?n[0]:aA}}),cA=si.highest(ms.compute([Xc],n=>n.facet(Xc)));function Ye(n,e){return{...e,apply:rA(n)}}const hA=R.domEventHandlers({mousedown(n,e){let t=e.state.field(Rn,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let r=t.ranges.find(s=>s.from<=i&&s.to>=i);return!r||r.field==t.active?!1:(e.dispatch({selection:Vl(t.ranges,r.field),effects:qn.of(t.ranges.some(s=>s.field>r.field)?new en(t.ranges,r.field):null),scrollIntoView:!0}),!0)}}),Kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},mi=W.define({map(n,e){let t=e.mapPos(n,-1,De.TrackAfter);return t??void 0}}),Yl=new class extends Jt{};Yl.startSide=1;Yl.endSide=-1;const Jf=Te.define({create(){return N.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(mi)&&(n=n.update({add:[Yl.range(t.value,t.value+1)]}));return n}});function uA(){return[dA,Jf]}const io="()[]{}<>«»»«[]{}";function ed(n){for(let e=0;e{if((fA?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let r=n.state.selection.main;if(i.length>2||i.length==2&&Qt(Ne(i,0))==1||e!=r.from||t!=r.to)return!1;let s=OA(n.state,i);return s?(n.dispatch(s),!0):!1}),pA=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=td(n,n.selection.main.head).brackets||Kn.brackets,r=null,s=n.changeByRange(o=>{if(o.empty){let l=gA(n.doc,o.head);for(let a of i)if(a==l&&ks(n.doc,o.head)==ed(Ne(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:A.cursor(o.head-a.length)}}return{range:r=o}});return r||e(n.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!r},mA=[{key:"Backspace",run:pA}];function OA(n,e){let t=td(n,n.selection.main.head),i=t.brackets||Kn.brackets;for(let r of i){let s=ed(Ne(r,0));if(e==r)return s==r?bA(n,r,i.indexOf(r+r+r)>-1,t):yA(n,r,s,t.before||Kn.before);if(e==s&&id(n,n.selection.main.from))return AA(n,r,s)}return null}function id(n,e){let t=!1;return n.field(Jf).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function ks(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Qt(Ne(t,0)))}function gA(n,e){let t=n.sliceString(e-2,e);return Qt(Ne(t,0))==t.length?t:t.slice(1)}function yA(n,e,t,i){let r=null,s=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:mi.of(o.to+e.length),range:A.range(o.anchor+e.length,o.head+e.length)};let l=ks(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:mi.of(o.head+e.length),range:A.cursor(o.head+e.length)}:{range:r=o}});return r?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function AA(n,e,t){let i=null,r=n.changeByRange(s=>s.empty&&ks(n.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:A.cursor(s.head+t.length)}:i={range:s});return i?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function bA(n,e,t,i){let r=i.stringPrefixes||Kn.stringPrefixes,s=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:mi.of(l.to+e.length),range:A.range(l.anchor+e.length,l.head+e.length)};let a=l.head,c=ks(n.doc,a),h;if(c==e){if(Lc(n,a))return{changes:{insert:e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)};if(id(n,a)){let f=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+f.length,insert:f},range:A.cursor(a+f.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(h=Bc(n,a-2*e.length,r))>-1&&Lc(n,h))return{changes:{insert:e+e+e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)};if(n.charCategorizer(a)(c)!=ye.Word&&Bc(n,a,r)>-1&&!SA(n,a,e,r))return{changes:{insert:e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)}}return{range:s=l}});return s?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Lc(n,e){let t=Ce(n).resolveInner(e+1);return t.parent&&t.from==e}function SA(n,e,t,i){let r=Ce(n).resolveInner(e,-1),s=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(r.from,Math.min(r.to,r.from+t.length+s)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let h=r.firstChild;for(;h&&h.from==r.from&&h.to-h.from>t.length+a;){if(n.sliceDoc(h.to-t.length,h.to)==t)return!1;h=h.firstChild}return!0}let c=r.to==e&&r.parent;if(!c)break;r=c}return!1}function Bc(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=ye.Word)return e;for(let r of t){let s=e-r.length;if(n.sliceDoc(s,e)==r&&i(n.sliceDoc(s-1,s))!=ye.Word)return s}return-1}function xA(n={}){return[Jy,Ge,Ke.of(n),Hy,wA,Hf]}const nd=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:Vy},{key:"ArrowDown",run:ur(!0)},{key:"ArrowUp",run:ur(!1)},{key:"PageDown",run:ur(!0,"page")},{key:"PageUp",run:ur(!1,"page")},{key:"Enter",run:jy}],wA=si.highest(ms.computeN([Ke],n=>n.facet(Ke).defaultKeymap?[nd]:[]));var qc={};class Nr{constructor(e,t,i,r,s,o,l,a,c,h=0,u){this.p=e,this.stack=t,this.state=i,this.reducePos=r,this.pos=s,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=c,this.lookAhead=h,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let r=e.parser.context;return new Nr(e,[],t,i,i,0,[],0,r?new Ic(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,r=e&65535,{parser:s}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(c==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=h):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(r,c)}storeNode(e,t,i,r=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!s||this.pos==i)this.buffer.push(e,t,i,r);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,r>4&&(r-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=r}}shift(e,t,i,r){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:o}=this.p;this.pos=r;let l=o.stateFlag(s,1);!l&&(r>i||t<=o.maxNode)&&(this.reducePos=r),this.pushState(s,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,r,4)}else this.pos=r,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,r,4)}apply(e,t,i,r){e&65536?this.reduce(e):this.shift(e,t,i,r)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(i,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new Nr(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new vA(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let r=[];for(let s=0,o;sa&1&&l==o)||r.push(t[s],o)}t=r}let i=[];for(let r=0;r>19,r=t&65535,s=this.stack.length-i*3;if(s<0||e.getGoto(this.stack[s],r,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(r,s)=>{if(!t.includes(r))return t.push(r),e.allActions(r,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-s;if(l>1){let a=o&65535,c=this.stack.length-l*3;if(c>=0&&e.getGoto(this.stack[c],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,s+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class Ic{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class vA{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}}class Gr{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Gr(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Gr(this.stack,this.pos,this.index)}}function dn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,r=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),s+=a,l)break;s*=46}t?t[r++]=s:t=new e(s)}return t}class kr{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const zc=new kr;class kA{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=zc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,r=this.rangeIndex,s=this.pos+e;for(;si.to:s>=i.to;){if(r==this.ranges.length-1)return null;let o=this.ranges[++r];s+=o.from-i.to,i=o}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,r;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),r=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),r}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=zc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(i+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return i}}class Di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;rd(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}Di.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class rl{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?dn(e):e}token(e,t){let i=e.pos,r=0;for(;;){let s=e.next<0,o=e.resolveOffset(1,1);if(rd(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(s||r++,o==null)break;e.reset(o,e.token)}r&&(e.reset(i,e.token),e.acceptToken(this.elseToken,r))}}rl.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class In{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function rd(n,e,t,i,r,s){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||QA(p,e.token.value,r,s))){e.acceptToken(p);break}}let h=e.next,u=0,f=n[o+2];if(e.next<0&&f>u&&n[c+f*3-3]==65535){o=n[c+f*3-1];continue e}for(;u>1,p=c+d+(d<<1),m=n[p],O=n[p+1]||65536;if(h=O)u=d+1;else{o=n[p+2],e.advance();continue e}}break}}function Wc(n,e,t){for(let i=e,r;(r=n[i])!=65535;i++)if(r==t)return i-e;return-1}function QA(n,e,t,i){let r=Wc(t,i,e);return r<0||Wc(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class PA{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?jc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?jc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(s instanceof ke){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+s.length}}}class CA{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new kr)}getActions(e){let t=0,i=null,{parser:r}=e.p,{tokenizers:s}=r,o=r.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let c=0;cu.end+25&&(a=Math.max(u.lookAhead,a)),u.value!=0)){let f=t;if(u.extended>-1&&(t=this.addActions(e,u.extended,u.end,t)),t=this.addActions(e,u.value,u.end,t),!h.extend&&(i=u,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new kr,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new kr,{pos:i,p:r}=e;return t.start=i,t.end=Math.min(i+1,r.stream.end),t.value=i==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,i){let r=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(r,e),i),e.value>-1){let{parser:s}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,i,r){for(let s=0;se.bufferLength*4?new PA(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],r,s;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{r||(r=[],s=[]),r.push(l);let a=this.tokens.getMainToken(l);s.push(a.value,a.end)}}break}}if(!i.length){let o=r&&KA(r);if(o)return nt&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw nt&&r&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let o=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,s,i);if(o)return nt&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&c.buffer.length>500)if((l.score-c.score||l.buffer.length-c.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let c=e.curContext&&e.curContext.tracker.strict,h=c?e.curContext.hash:0;for(let u=this.fragments.nodeAt(r);u;){let f=this.parser.nodeSet.types[u.type.id]==u.type?s.getGoto(e.state,u.type.id):-1;if(f>-1&&u.length&&(!c||(u.prop(H.contextHash)||0)==h))return e.useNode(u,f),nt&&console.log(o+this.stackID(e)+` (via reuse of ${s.getName(u.type.id)})`),!0;if(!(u instanceof ke)||u.children.length==0||u.positions[0]>0)break;let d=u.children[0];if(d instanceof ke&&u.positions[0]==0)u=d;else break}}let l=s.stateSlot(e.state,4);if(l>0)return e.reduce(l),nt&&console.log(o+this.stackID(e)+` (via always-reduce ${s.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let c=0;cr?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return Vc(e,t),!0}}runRecovery(e,t,i){let r=null,s=!1;for(let o=0;o ":"";if(l.deadEnd&&(s||(s=!0,l.restart(),nt&&console.log(h+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let u=l.split(),f=h;for(let d=0;d<10&&u.forceReduce()&&(nt&&console.log(f+this.stackID(u)+" (via force-reduce)"),!this.advanceFully(u,i));d++)nt&&(f=this.stackID(u)+" -> ");for(let d of l.recoverByInsert(a))nt&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(c==l.pos&&(c++,a=0),l.recoverByDelete(a,c),nt&&console.log(h+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Vc(l,i)):(!r||r.scoren;class RA{constructor(e){this.start=e.start,this.shift=e.shift||ro,this.reduce=e.reduce||ro,this.reuse=e.reuse||ro,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class Hr extends Yu{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),r=[];for(let l=0;l=0)s(h,a,l[c++]);else{let u=l[c+-h];for(let f=-h;f>0;f--)s(l[c++],a,u);c++}}}this.nodeSet=new Tl(t.map((l,a)=>et.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:r[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=zu;let o=dn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new Di(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let r=new TA(this,e,t,i);for(let s of this.wrappers)r=s(r,e,t,i);return r}getGoto(e,t,i=!1){let r=this.goto;if(t>=r[0])return-1;for(let s=r[t+1];;){let o=r[s++],l=o&1,a=r[s++];if(l&&i)return a;for(let c=s+(o>>1);s0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),r=i?t(i):void 0;for(let s=this.stateSlot(e,1);r==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=Ft(this.data,s+2);else break;r=t(Ft(this.data,s+1))}return r}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ft(this.data,i+2);else break;if((this.data[i+2]&1)==0){let r=this.data[i+1];t.some((s,o)=>o&1&&s==r)||t.push(this.data[i],r)}}return t}configure(e){let t=Object.assign(Object.create(Hr.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let r=e.tokenizers.find(s=>s.from==i);return r?r.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,r)=>{let s=e.specializers.find(l=>l.from==i.external);if(!s)return i;let o=Object.assign(Object.assign({},i),{external:s.to});return t.specializers[r]=Yc(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let s of e.split(" ")){let o=t.indexOf(s);o>=0&&(i[o]=!0)}let r=null;for(let s=0;si)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const ZA=316,MA=317,Nc=1,EA=2,UA=3,FA=4,DA=318,XA=320,LA=321,BA=5,qA=6,IA=0,sl=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],sd=125,zA=59,ol=47,WA=42,jA=43,VA=45,YA=60,NA=44,GA=63,HA=46,_A=91,JA=new RA({start:!1,shift(n,e){return e==BA||e==qA||e==XA?n:e==LA},strict:!1}),eb=new In((n,e)=>{let{next:t}=n;(t==sd||t==-1||e.context)&&n.acceptToken(DA)},{contextual:!0,fallback:!0}),tb=new In((n,e)=>{let{next:t}=n,i;sl.indexOf(t)>-1||t==ol&&((i=n.peek(1))==ol||i==WA)||t!=sd&&t!=zA&&t!=-1&&!e.context&&n.acceptToken(ZA)},{contextual:!0}),ib=new In((n,e)=>{n.next==_A&&!e.context&&n.acceptToken(MA)},{contextual:!0}),nb=new In((n,e)=>{let{next:t}=n;if(t==jA||t==VA){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(Nc);n.acceptToken(i?Nc:EA)}}else t==GA&&n.peek(1)==HA&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(UA))},{contextual:!0});function so(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}const rb=new In((n,e)=>{if(n.next!=YA||!e.dialectEnabled(IA)||(n.advance(),n.next==ol))return;let t=0;for(;sl.indexOf(n.next)>-1;)n.advance(),t++;if(so(n.next,!0)){for(n.advance(),t++;so(n.next,!1);)n.advance(),t++;for(;sl.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==NA)return;for(let i=0;;i++){if(i==7){if(!so(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(FA,-t)}),sb=Nu({"get set async static":g.modifier,"for while do if else switch try catch finally return throw break continue default case defer":g.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":g.operatorKeyword,"let var const using function class extends":g.definitionKeyword,"import export from":g.moduleKeyword,"with debugger new":g.keyword,TemplateString:g.special(g.string),super:g.atom,BooleanLiteral:g.bool,this:g.self,null:g.null,Star:g.modifier,VariableName:g.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":g.function(g.variableName),VariableDefinition:g.definition(g.variableName),Label:g.labelName,PropertyName:g.propertyName,PrivatePropertyName:g.special(g.propertyName),"CallExpression/MemberExpression/PropertyName":g.function(g.propertyName),"FunctionDeclaration/VariableDefinition":g.function(g.definition(g.variableName)),"ClassDeclaration/VariableDefinition":g.definition(g.className),"NewExpression/VariableName":g.className,PropertyDefinition:g.definition(g.propertyName),PrivatePropertyDefinition:g.definition(g.special(g.propertyName)),UpdateOp:g.updateOperator,"LineComment Hashbang":g.lineComment,BlockComment:g.blockComment,Number:g.number,String:g.string,Escape:g.escape,ArithOp:g.arithmeticOperator,LogicOp:g.logicOperator,BitOp:g.bitwiseOperator,CompareOp:g.compareOperator,RegExp:g.regexp,Equals:g.definitionOperator,Arrow:g.function(g.punctuation),": Spread":g.punctuation,"( )":g.paren,"[ ]":g.squareBracket,"{ }":g.brace,"InterpolationStart InterpolationEnd":g.special(g.brace),".":g.derefOperator,", ;":g.separator,"@":g.meta,TypeName:g.typeName,TypeDefinition:g.definition(g.typeName),"type enum interface implements namespace module declare":g.definitionKeyword,"abstract global Privacy readonly override":g.modifier,"is keyof unique infer asserts":g.operatorKeyword,JSXAttributeValue:g.attributeValue,JSXText:g.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":g.angleBracket,"JSXIdentifier JSXNameSpacedName":g.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":g.attributeName,"JSXBuiltin/JSXIdentifier":g.standard(g.tagName)}),ob={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},lb={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},ab={__proto__:null,"<":193},cb=Hr.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:JA,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[sb],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[tb,ib,nb,rb,2,3,4,5,6,7,8,9,10,11,12,13,14,eb,new rl("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new rl("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>ob[n]||-1},{term:343,get:n=>lb[n]||-1},{term:95,get:n=>ab[n]||-1}],tokenPrec:15201}),od=[Ye("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),Ye("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),Ye("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),Ye("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),Ye("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),Ye(`try { - \${} -} catch (\${error}) { - \${} -}`,{label:"try",detail:"/ catch block",type:"keyword"}),Ye("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),Ye(`if (\${}) { - \${} -} else { - \${} -}`,{label:"if",detail:"/ else block",type:"keyword"}),Ye(`class \${name} { - constructor(\${params}) { - \${} - } -}`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Gc=new dg,ld=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ad(n,e){let t=Gc.get(e);if(t)return t;let i=[],r=!0;function s(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(r)r=!1;else if(o.name){let l=fb[o.name];if(l&&l(o,s)||ld.has(o.name))return!1}else if(o.to-o.from>8192){for(let l of ad(n,o.node))i.push(l);return!1}}),Gc.set(e,i),i}const Hc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Hc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let r=e;r;r=r.parent)ld.has(r.name)&&(i=i.concat(ad(n.state.doc,r)));return{options:i,from:t?e.from:n.pos,validFor:Hc}}const Lt=Lr.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Ns({except:/^\s*({|else\b)/}),TryStatement:Ns({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Mg,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:Zg({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Ns({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),rf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":Dg,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Lt.configure({dialect:"ts"},"typescript"),mb=Lt.configure({dialect:"jsx",props:[Zl.add(n=>n.isTop?[hd]:void 0)]}),Ob=Lt.configure({dialect:"jsx ts",props:[Zl.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),gb=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?Ob:mb:n.typescript?pb:Lt,t=n.typescript?hb.concat(gb):od.concat(fd);return new kg(e,[Lt.data.of({autocomplete:Ty(cd,Yf(t))}),Lt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=R.inputHandler.of((n,e,t,i,r)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Lt.isActiveAt(n.state,e,-1))return!1;let s=r(),{state:o}=s,l=o.changeByRange(a=>{var c;let{head:h}=a,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:a,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:a,changes:{from:h,insert:``}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([s,o.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,r=e.length,s,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,r),this.bufferStart=i,this.normalize=s?l=>s(Jc(l)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fl(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let r=this.normalize(t);if(r.length)for(let s=0,o=i,l=!0;;s++){let a=r.charCodeAt(s),c=this.match(a,o,l,this.bufferPos+this.bufferStart,s==r.length-1);if(c)return this.value=c,this;if(s==r.length-1)break;l&&sthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,r=i+t[0].length;if(this.matchPos=_r(this.text,r+(i==r?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||r.to<=t){let l=new Xi(t,e.sliceString(t,i));return oo.set(e,l),l}if(r.from==t&&r.to==i)return r;let{text:s,from:o}=r;return o>t&&(s=e.sliceString(t,o)+s,o=t),r.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,r=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,precise:!0,match:t},this.matchPos=_r(this.text,r+(i==r?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Xi.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Nl),!0}catch{return!1}}function _r(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const wb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:r}=VO(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return r.then(s=>{let o=s&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(s.elements.line.value);if(!o){n.dispatch({effects:i});return}let l=e.doc.lineAt(e.selection.main.head),[,a,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:l.number;if(c&&u){let O=d/100;a&&(O=O*(a=="-"?-1:1)+l.number/e.doc.lines),d=Math.round(e.doc.lines*O)}else c&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,R.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},vb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,vb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[Rb,$b]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const $b=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let r=i.main,s,o=null;if(r.empty){if(!e.highlightWordAroundCursor)return B.none;let a=t.wordAt(r.head);if(!a)return B.none;o=t.charCategorizer(r.head),s=t.sliceDoc(a.from,a.to)}else{let a=r.to-r.from;if(a200)return B.none;if(e.wholeWords){if(s=t.sliceDoc(r.from,r.to),o=t.charCategorizer(r.head),!(eh(o,t,r.from,r.to)&&Tb(o,t,r.from,r.to)))return B.none}else if(s=t.sliceDoc(r.from,r.to),!s)return B.none}let l=[];for(let a of n.visibleRanges){let c=new Yi(t.doc,s,a.from,a.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(r.empty&&h<=r.from&&u>=r.to?l.push(Cb.range(h,u)):(h>=r.to||u<=r.from)&&l.push(Pb.range(h,u)),l.length>e.maxMatches))return B.none}}return B.set(l)}},{decorations:n=>n.decorations}),Rb=R.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(r=>n.wordAt(r.head)||A.cursor(r.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,r=n.wordAt(t.head),s=r&&r.from==t.from&&r.to==t.to;for(let o=!1,l=new Yi(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(s){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(s=>s.from===s.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(s=>n.sliceDoc(s.from,s.to)!=i))return!1;let r=Zb(n,i);return r?(e(n.update({selection:n.selection.addRange(A.range(r.from,r.to),!1),effects:R.scrollIntoView(r.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>R.scrollIntoView(e)})}});class Od{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Lb(this):new Fb(this)}getCursor(e,t=0,i){let r=e.doc?e:_.create({doc:e});return i==null&&(i=r.doc.length),this.regexp?Pi(this,r,t,i):Qi(this,r,t,i)}}class gd{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,r,s,o)=>{if(t&&!t(i,r,s,o))return!1;let l=i>=o&&r<=o+s.length?s.slice(i-o,r-o):e.doc.sliceString(i,r);return n(l,e,i,r)}}function Qi(n,e,t,i){let r;return n.wholeWord&&(r=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(r=Eb(n.test,e,r)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase(),r)}function Ub(n,e){return(t,i,r,s)=>((s>t||s+r.length=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let s=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!s.next().done;)r(s.value.from,s.value.to)}}function Db(n,e,t){return(i,r,s)=>(!t||t(i,r,s))&&n(s[0],e,i,r)}function Pi(n,e,t,i){let r;return n.wholeWord&&(r=Xb(e.charCategorizer(e.selection.main.head))),n.test&&(r=Db(n.test,e,r)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:r},t,i)}function Jr(n,e){return n.slice(Ze(n,e,!1),e)}function es(n,e){return n.slice(e,Ze(n,e))}function Xb(n){return(e,t,i)=>!i[0].length||(n(Jr(i.input,i.index))!=ye.Word||n(es(i.input,i.index))!=ye.Word)&&(n(es(i.input,i.index+i[0].length))!=ye.Word||n(Jr(i.input,i.index+i[0].length))!=ye.Word)}class Lb extends gd{nextMatch(e,t,i){let r=Pi(this.spec,e,i,e.doc.length).next();return r.done&&(r=Pi(this.spec,e,0,t).next()),r.done?null:r.value}prevMatchInRange(e,t,i){for(let r=1;;r++){let s=Math.max(t,i-r*1e4),o=Pi(this.spec,e,s,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(s==t||l.from>s+10))return l;if(s==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let r=i.length;r>0;r--){let s=+i.slice(0,r);if(s>0&&s=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let s=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!s.next().done;)r(s.value.from,s.value.to)}}const Zn=W.define(),Gl=W.define(),Ht=Te.define({create(n){return new lo(ll(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new lo(t.value.create(),n.panel):t.is(Gl)&&(n=new lo(n.query,t.value?Hl:null));return n},provide:n=>ji.from(n,e=>e.panel)});class lo{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),qb=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),Ib=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Ht))}update(n){let e=n.state.field(Ht);(e!=n.startState.field(Ht)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let r=0,s=t.visibleRanges,o=s.length;rs[r+1].from-500;)a=s[++r].to;n.highlight(t.state,l,a,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?qb:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function zn(n){return e=>{let t=e.state.field(Ht,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const ts=zn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let r=A.single(i.from,i.to),s=n.state.facet(tn);return n.dispatch({selection:r,effects:[_l(n,i),s.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),is=zn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,r=e.prevMatch(t,i,i);if(!r)return!1;let s=A.single(r.from,r.to),o=n.state.facet(tn);return n.dispatch({selection:s,effects:[_l(n,r),o.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),zb=zn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),Wb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:r}=t.main,s=[],o=0;for(let l=new Yi(n.doc,n.sliceDoc(i,r));!l.next().done;){if(s.length>1e3)return!1;l.value.from==i&&(o=s.length),s.push(A.range(l.value.from,l.value.to))}return e(n.update({selection:A.create(s,o),userEvent:"select.search.matches"})),!0},th=zn((n,{query:e})=>{let{state:t}=n,{from:i,to:r}=t.selection.main;if(t.readOnly)return!1;let s=e.nextMatch(t,i,i);if(!s)return!1;let o=s,l=[],a,c,h=[];o.precise?o.from==i&&o.to==r&&(c=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push(R.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(l);return o&&(a=A.single(o.from,o.to).map(u),h.push(_l(n,o)),h.push(t.facet(tn).scrollToMatch(a.main,n))),n.dispatch({changes:u,selection:a,effects:h,userEvent:"input.replace"}),!0}),jb=zn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let r of e.matchAll(n.state,1e9)){let{from:s,to:o,precise:l}=r;l&&t.push({from:s,to:o,insert:e.getReplacement(r)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:R.announce.of(i),userEvent:"input.replace.all"}),!0});function Hl(n){return n.state.facet(tn).createPanel(n)}function ll(n,e){var t,i,r,s,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let c=n.facet(tn);return new Od({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(r=e?.literal)!==null&&r!==void 0?r:c.literal,regexp:(s=e?.regexp)!==null&&s!==void 0?s:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Hl);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Ht,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=ll(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Gl.of(!0),e?Zn.of(ll(n.state,e.query.spec)):W.appendConfig.of(Gb)]});return!0},Sd=n=>{let e=n.state.field(Ht,!1);if(!e||!e.panel)return!1;let t=Fu(n,Hl);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Gl.of(!1)}),!0},Vb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:ts,shift:is,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:ts,shift:is,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:Wb},{key:"Mod-Alt-g",run:wb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Ht).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:rt(e,"Find"),"aria-label":rt(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:rt(e,"Replace"),"aria-label":rt(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(r,s,o){return he("button",{class:"cm-button",name:r,onclick:s,type:"button"},o)}this.dom=he("div",{onkeydown:r=>this.keydown(r),class:"cm-search"},[this.searchField,i("next",()=>ts(e),[rt(e,"next")]),i("prev",()=>is(e),[rt(e,"previous")]),i("select",()=>zb(e),[rt(e,"all")]),he("label",null,[this.caseField,rt(e,"match case")]),he("label",null,[this.reField,rt(e,"regexp")]),he("label",null,[this.wordField,rt(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[rt(e,"replace")]),i("replaceAll",()=>jb(e),[rt(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":rt(e,"close"),type:"button"},["×"])])}commit(){let e=new Od({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){rO(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?is:ts)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function rt(n,e){return n.state.phrase(e)}const fr=30,dr=/[\s\.,:;?!]/;function _l(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),r=n.state.doc.lineAt(t).to,s=Math.max(i.from,e-fr),o=Math.min(r,t+fr),l=n.state.sliceDoc(s,o);if(s!=i.from){for(let a=0;al.length-fr;a--)if(!dr.test(l[a-1])&&dr.test(l[a])){l=l.slice(0,a);break}}return R.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=R.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Gb=[Ht,si.low(Ib),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let r=i.facet(Kt).markerFilter;r&&(e=r(e,i));let s=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,l=[],a=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==s.length?null:s[d];if(!p&&!l.length)break;let m,O;if(l.length)m=a,O=l.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;O=p.to,l.push(p),d++}for(;dx.from||x.to==m))l.push(x),d++,O=Math.min(x.to,O);else{O=Math.min(x.from,O);break}}O=Math.min(O,u);let y=!1;if(l.some(x=>x.from==m&&(x.to==O||O==u))&&(y=m==O,!y&&O-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=O){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(l);if(y)o.add(m,m,B.widget({widget:new n1(b),diagnostics:l.slice()}));else{let x=l.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,O,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:l.slice(),inclusiveEnd:l.some(C=>C.to>O)}))}if(a=O,a==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(r,s,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,s,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,r=n.state.facet(Kt).hideOn(n,t,i);if(r!=null)return r;let s=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qs))||n.changes.touchesRange(s.from,Math.max(s.to,i)))}function Hb(n,e){return n.field(Ot,!1)?e:e.concat(W.appendConfig.of(Kd))}function wd(n,e){return{effects:Hb(n,[Qs.of(e)])}}const Qs=W.define(),vd=W.define(),kd=W.define(),Ot=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,r=n.panel;if(n.selected){let s=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,s)||Ni(t,null,s)}!t.size&&r&&e.state.facet(Kt).autoPanel&&(r=null),n=new di(t,r,i)}for(let t of e.effects)if(t.is(Qs)){let i=e.state.facet(Kt).autoPanel?t.value.length?ns.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(vd)?n=new di(n.diagnostics,t.value?ns.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[ji.from(n,e=>e.panel),R.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(Ot),r,s=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,c,{spec:h})=>{if(e>=a&&e<=c&&(a==c||(e>a||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(Ot,!1);return!e||!e.panel?!1:(n.dispatch({effects:vd.of(!1)}),!0)},e1=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(wd(this.view.state,i.reduce((r,s)=>r.concat(s))))},i=>{We(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function t1(n,e,t){let i=[],r=-1;for(let s of n)s.then(o=>{i.push(o),clearTimeout(r),i.length==n.length?e(i):r=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:rh,tooltipFilter:rh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,r,s)=>e(i,r,s)||t(i,r,s):e:t,autoPanel:(e,t)=>e||t})}}});function rh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function i1(n,e={}){return[Kt.of({source:n,config:e}),e1,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;is.toLowerCase()==r.toLowerCase())){e.push(r);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let r=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((s,o)=>{let l=!1,a=d=>{if(d.preventDefault(),l)return;l=!0;let p=Ni(n.state.field(Ot).diagnostics,e);p&&s.apply(n,p.from,p.to)},{name:c}=s,h=r[o]?c.indexOf(r[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=s.markClass?" "+s.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:a,onmousedown:a,"aria-label":` Action: ${c}${h<0?"":` (access key "${r[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class n1 extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class sh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class ns{constructor(e){this.view=e,this.items=[];let t=r=>{if(!(r.ctrlKey||r.altKey||r.metaKey)){if(r.keyCode==27)nh(this.view),this.view.focus();else if(r.keyCode==38||r.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(r.keyCode==40||r.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(r.keyCode==36)this.moveSelection(0);else if(r.keyCode==35)this.moveSelection(this.items.length-1);else if(r.keyCode==13)this.view.focus();else if(r.keyCode>=65&&r.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:s}=this.items[this.selectedIndex],o=Pd(s.actions);for(let l=0;l{for(let s=0;snh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(Ot).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),r=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),s=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:s.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let c=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),r&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Ot),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new ns(e)}}function Qr(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function pr(n){return Qr(``,'width="6" height="3"')}const r1=R.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:pr("#f11")},".cm-lintRange-warning":{backgroundImage:pr("orange")},".cm-lintRange-info":{backgroundImage:pr("#999")},".cm-lintRange-hint":{backgroundImage:pr("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function s1(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let r=s1(i.severity);r>t&&(t=r,e=i.severity)}return e}class $d extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,r=e.state.facet(Ps).tooltipFilter;return r&&(i=r(i,e.state)),i.length&&(t.onmouseover=()=>l1(e,t,i)),t}}function o1(n,e){let t=i=>{let r=e.getBoundingClientRect();if(!(i.clientX>r.left-10&&i.clientXr.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,o1(n,e)}let{hoverTime:r}=n.state.facet(Ps),s=setTimeout(i,r);e.onmouseout=()=>{clearTimeout(s),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(s),s=setTimeout(i,r)}}function a1(n,e){let t=Object.create(null);for(let r of e){let s=n.lineAt(r.from);(t[s.from]||(t[s.from]=[])).push(r)}let i=[];for(let r in t)i.push(new $d(t[r]).range(+r));return N.of(i,!0)}const c1=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(al),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(al).between(t.from,t.to,(r,s,o)=>{r>t.from&&ri.is(Jl)?i.value:t,n)},provide:n=>Os.from(n)}),h1=R.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qr('')},".cm-lint-marker-warning":{content:Qr('')},".cm-lint-marker-error":{content:Qr('')}}),u1=Eu(Jb,{hideOn:xd}),Kd=[Ot,R.decorations.compute([Ot],n=>{let{selected:e,panel:t}=n.field(Ot);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),u1,r1],Ps=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function f1(n={}){return[Ps.of(n),al,c1,h1,Rd]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function d1(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function p1(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,r=()=>{},s=null){if(!n){r({result:"unavailable"});return}n.callHandler(e,d1(e,t,i,s),r)}function m1(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const O1=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),cl="2026-01-01T00:00:00Z",Wt="2026-01-01T12:00:00Z",ao=(n,e)=>({value:n,unit:e,hasSamples:!0,start:cl,end:Wt}),oh=(n,e,t)=>Object.entries(e).map(([i,r])=>({id:`$${n}.${i}`,group:n,value:r,legacy:[t,i]})),g1=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:Wt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse9fEddB4a8Sah4X1RNTsD04dD0de4P9D2NYV6POrrcicOY+5KKxfD+v6f4k0xNU01so3DKfvK3dT7itqvMatozlYUUUUgCiiigAooooAKKK+Vvjx8fofBkcvhLwhIsmrONssowVtgf0MnoP4ep9K1pUpVZcsC6dNzfLEu/HX49WvgOCTwx4XdZtZkXDtwy2wPc9i5H3V7dT2B/N+7u7q/upL29kaWaVi7u5JZmJySSeSSaZPPPdTvc3LtJJIxZ3YkszHkkk8kk1FX0OHw8aMbLc9mjRVJWQUUUV0GxNb3E9rOl1au0ckbBkdSQysDkEEcgg96/RT4EftAQeMUi8JeMZFi1ZRtimOAtyB29BJ7dG7c8V+ctPjkeJ1liYqynII4II6EGufEYeNaNpGVaiqqsz9waK+QfgN+0GniEQ+DPHMwW/4S3umOBP6I57Seh/i/3uv19Xz1ajKlLlmeLUpypvlkFFFFZEBRRRQAUUUUAFFFFAH/1v28ooortPTCiio5poreJp52CIgJZmOAAOpJoAeSFBZjgDqa+c/iJ8UDd+ZoXhqTEXKyzr1b1VD6ep79uOuV8Q/iXLrhfRtCYpZjh36NL/gvt37+leO130MPb3pm8KdtWFFFFdhsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHX+DfF974R1MXUOXgkwJouzD1H+0Oxr7G0vU7LWbCPUtOcSQyjKkfyPoR3FfBVeg+AfHNx4Rv8Ayp8vZTH94n90/wB9fcd/UfhjmxFHn96O5nUhfVH2HRUFrdW97bJd2jiSKQBlZeQQanrzTmCiiigAoor46+Pn7Qa6GJvBXgWbN7ylzdIeIexSM/3/AFP8PQfN93WjRlVlywNKdJ1HyxL3x6/aBj8MLN4N8Eyh9SOVnuF5Fv6qvrJ/6D9en56ySSTSNNMxd3JLMTkknqSfWkZmdi7kkk5JPUmm19FQw8aMeWJ7NGiqasgooorc1CiiigAooooAUEg5HBFfd/wF/aGF95Pgnx/PifhLW8c/f7BJSf4uwY9eh55PwfRWNehGrHlkZ1aUai5ZH7iUV8LfAX9ocweT4J8fz/JwlreOfu9gkpPb0c9Oh45H3SDnkV87XoSpS5ZHi1aUqb5ZBRRRWJmFFFFABRRRQB//1/28oorP1TVLDRrF9R1KQRQxjJJ/kPUnsK7kr6I9MnvLy10+1e9vZBFFGNzMxwAK+U/H3xFuvFErafp5MVgp6dGkI7t7eg/E89M/xx48v/F115SZhsoz+7iz1/2m9T+g/U8BXoUMPy+9Lc6IU7asKKKK6jUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9W+G/j9/DdyNK1RibCU9evlMe4/2T3H4/X6sR0lQSRkMrDII5BB7ivz9r274YfEL+zXTw5rb/AOjscQyMf9WT/CT/AHT29Pp048RQv78TGpC+qPpaiivh34+/tC/67wP4Bn9UuryM/gY4iPyZh9B61zUaMqsuWJFKk6j5Yl/4+ftCCx87wR4Cn/f8pdXiH7nYxxkfxdmYdOg55HweSScmkor6KhQjSjyxPapUlTXLEKKKK2NAooooAKKKKACiiigAooooAK+xfgL+0K2iGHwX47mLWXCW1255h7BJD3T0b+Hv8v3fjqisq1GNWPLIipTVRcsj9wkdZFDoQVIyCOhFOr87PgP+0DN4TaLwf40lMmlkhYJzy1v6A9zH+q9uOB+h8M0NxCtxbuJI3AZWU5BB5BBHBBr53EYeVGXLI8WtRdJ2ZJRRRWBkFFFFAH//0P2j13XtN8Oae+papJsReAP4mPZVHcmvkTxh4z1Pxffedcny4EP7qEHhR6n1b1NUvE3ijVPFWoG/1FuBxHGPuovoP6nvXOV9BRoKGr3PchDl1YUUUV0GgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFISAMngCvE/Gvjc3hfSNGfEPSSQfx+w/2ffv9Otwg5OyLhTc3ZHonjb4/eI7jw0fAeiT4iGUlulJ8xo8Y8tT6di3Ujjp1+aKKK7KdKNNWijvhTUFaIUUUVoWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfT3wL+Pl14Fmj8L+KnabR3OEflmtie47lPVe3UdwfmGis6tKNSPLMipTU1yyP28tLu1v7WO9spFmhlUOjoQyspGQQRwQRVivzH+CHx2v/h1dLoOvM1xosrcjq1uSeWT1Xuy/iOc5/SvTtRsNXsYtT0yZZ7edQ8ciHKsp6EGvnsThpUZWex41eg6Ts9i7RRRXMYn/0friiiivqD6AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkZlRS7nAHJJpHdI0MkhCqoySeAAK8J8Z+NX1Zm0zS2K2w4Zuhk/wDsf51cIOT0Lp03N2RL408bNqJbStJbFuOHcdX9h/s/z+leZUUV3RioqyPQjFRVkFFFFUUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV738Fvjfqnwyvhpmo7rnRpmzJF1aInq8ee/qvQ+x5rwSioqU41I8sloTOCmuWR+2Oj6zpfiDTIdZ0adbi1uFDxyIcgj+hHQg8g8GtOvym+Dvxm1j4Xan5Em650mdsz2+eQf+ekeeAw7jow4PYj9P8Aw/4h0fxTpEOu6DOtxa3C7kdf1BHUEdCDyDXz2JwsqL8jxq+HdJ+R/9L64ooor6g+gCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwABTZpobaJp52CIgyzHgACvAfGHjKXXZDZWJKWin6FyO59vQfn7XTpubNKdNzehL4y8aSay50/TiVtFPJ6GQj19vQfnXntFFd0YqKsj0IxUVZBRRRVDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr134S/F3XPhbq/m2+bjTp2H2i2J4btvT+64Hfv0PbHkVFROCmuWS0FKKkuWR//0/riiiivqD6AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqG4uILSBrm5cJGgyzHoBTbu7t7G3e7u3EcaDLMe1fPXizxdceIZ/IhzHaoflTu3+039B2rSnTc2aU6bmyXxf4wn1+U2trlLRDwO7kd2/oK4eiiu2MVFWR6EYqKsgoooqhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//U+uKKKK+oPoAooooAKKKKACiiigAooooAKKKKACiiigAooooAKq3t7a6daveXjhI0GST/AJ602/v7TTLR729cJGg5J/kPUmvnXxR4pu/EdzzmO3Q/u4/6n1P8q0p03M1pUnN+RJ4q8V3XiK42LmO2Q/Inr/tN7/yrkaKK7UklZHfGKirIKKKKoYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9X64ooor6g+gCiiigAooooAKKKKACiiigAooooAKKKKACqGpalZ6TZtfXz7I1/Mn0A7k03VdVstGs2vr59qL0Hcn0A7mvnLxH4jvfEV558/yxL/AKuMdFH9T6mtadPm9DWlSc/Qk8S+JrzxHd+ZJ8kKH93H2HufU1zNFFdqSSsjvSSVkFFFFMYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1vriipFilf7ik/QVZXTtQf7kEh+in/CvqD6ApUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf/AApcy7iuYNFdOngvxc/TTbn8Y2H8xVhfAPjJ+mnTfiMfzpc8e4XRyFFdwvw38bv009/xZB/NqsL8LfHbf8uOPrJH/wDFUvaR7hzLuef0V6Svwl8cN1tkX6yJ/Q1ZX4P+M26pCv1kH9AaXtYdxc67nltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AAJz/wCyUvbw7hzx7njlZesaxY6JZNe3zYUcADqx9APWvSvHfg6P4daE+u+JNQgVfuxxJuMkr/3UBAz7noB1r4j13Xr7xBem7vDgDhEHRR6D+p710UIqpqtjejT9pr0JPEHiC+8Q3hubo7UXhIx0Uf4+prBoorvStojvSS0QUUUUxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//2Q==",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:Wt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:Wt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:Wt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:cl,end:Wt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:cl,end:Wt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:ao(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:ao(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:ao(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:Wt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],y1={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},A1=g1.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...y1[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),Re={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(O1.map(n=>[n.id,n])),...Object.fromEntries(A1.map(n=>[n.id,{documentation:n.notes,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function b1(n,e){const t=Object.entries(e.properties??{}).filter(([,r])=>r.required).map(([r,s])=>`${r}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> - \${} -`:`<${n}${i} />`}const lh=Object.entries(Re.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:b1(n,e)}));function S1(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function x1(n,e){const t=Re.components[n];return t?Object.entries({...Re.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,r])=>({label:i,type:"property",detail:r.required?`${r.type} · required`:r.type,info:r.deprecated?`Deprecated: ${r.deprecated}`:r.documentation,apply:`${i}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`})):[]}function w1(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=Re.components[e[1]]?.properties?.[e[2]]??Re.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function v1(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=w1(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:lh,validFor:/^[A-Za-z]*$/};const r=S1(e);if(r&&/(?:\s|^)\w*$/.test(r.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),l=new Set([...r.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(a=>a[1]));return{from:o?.from??n.pos,options:x1(r.name,l),validFor:/^[A-Za-z][\w]*$/}}const s=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(s){const o=s.text.slice(0,s.text.indexOf(".")+1),l=Object.entries(Re.functions).filter(([a])=>a.startsWith(o));return l.length?{from:s.from+o.length,options:l.map(([a,c])=>({label:a.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:lh,validFor:/^[A-Za-z]*$/}:null}function ah(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const r=ah(t,"JSXIdentifier")[0];r&&e.push({name:n.doc.sliceString(r.from,r.to),from:r.from,to:r.to,attributes:ah(t,"JSXAttribute").map(s=>{const o=s.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=Re.components[t.name];if(!i)continue;const r=new Set([...Object.keys(Re.globalProperties),...Object.keys(i.properties??{})]),s=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){r.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const l=i.properties?.[o.name]??Re.globalProperties[o.name];l?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${l.deprecated}`})}for(const[o,l]of Object.entries(i.properties??{}))if(l.required&&!s.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),s.has(o)){for(const a of l.requires??[])s.has(a)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${a}” property.`});for(const a of l.conflicts??[])s.has(a)&&o cannot combine “${o}” with “${a}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>s.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function k1(n,e){const t=Md(n.state).find(r=>e>=r.from&&e<=r.to);if(!t)return null;const i=Re.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const r=document.createElement("div");r.className="studio-hover";const s=document.createElement("strong");s.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,r.append(s,o),{dom:r}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function Q1(n,e){return R.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const P1=Ln.define([{tag:[g.keyword,g.controlKeyword,g.moduleKeyword,g.operatorKeyword,g.bool,g.null],color:"#FF7AB2"},{tag:[g.string,g.special(g.string)],color:"#FF8170"},{tag:[g.number,g.regexp],color:"#D9C97C"},{tag:[g.comment,g.lineComment,g.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[g.tagName,g.typeName,g.className],color:"#5DD8FF"},{tag:g.attributeName,color:"#B281EB"},{tag:[g.propertyName,g.function(g.variableName),g.function(g.propertyName)],color:"#67B7A4"},{tag:g.definition(g.variableName),color:"#4EB0CC"},{tag:[g.variableName,g.operator,g.punctuation,g.bracket],color:"#E8E8ED"},{tag:g.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[Q1(e?ch.dark:ch.light,e),Jg(e?P1:i0)]}const C1=Lt.parser.configure({dialect:"jsx"}),T1=new Map(Object.keys(Re.components).map(n=>[n.toLowerCase(),n])),$1=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),R1=512*1024,K1=512,Z1=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,r)=>{const s={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(s,r))return s[r];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(r)){const o=r[1].toLowerCase()==="x"?parseInt(r.slice(2),16):Number(r.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function wi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>R1)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=C1.parse(n);let i=!1;if(t.iterate({enter:s=>{s.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function r(s,o,l){(l>Z1||e.nodes.length>=K1)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const a=ci(s),c=a[0],h=a.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=T1.get(f.toLowerCase()),p=Re.components[d],m={...Re.globalProperties,...p?.properties??{}},O=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=O?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&O&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(s.from),parentID:o,tag:f,component:d??null,from:s.from,to:s.to,openingEnd:c.to,insertAt:c.to-(O?1:2),contentFrom:c.to,contentTo:O?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:l};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const v=ci(S),U=hi(n,v[0]),F=v[2],j=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):j,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=O?a.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(r(S,b.id,l+1).id);if(b.structure=!b.locked&&O&&$1.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(v=>v.id===S).locked),!b.locked&&d==="Text"&&O&&k.length===1){const S=k[0],v=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(v)?Fd(v):S.name==="JSXEscape"?co(v.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(s){if(s.name!=="CallExpression")return;const o=ci(s.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const l=ci(o[1]).filter(a=>!["(",")"].includes(a.name));if(l.length===1&&l[0].name==="JSXElement")return e.roots.push(r(l[0],null,0).id),!1}})}catch(s){return{...e,nodes:[],roots:[],issue:s.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function hl(n){return!n?.component||n.locked?{}:{...Re.globalProperties,...Re.components[n.component]?.properties??{}}}function M1(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(a=>a.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let r=[],s=i.from;if(t.type==="property"){const a=hl(i),c=Object.hasOwn(a,t.name)?a[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=Re.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),r=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;r=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),r=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")r=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:s};r=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],s=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const a={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(a,t.kind)||de("Unsupported new layer."),r=[{from:i.contentTo,to:i.contentTo,insert:a[t.kind]}],s=i.contentTo}else de("Unsupported layout operation.");r.sort((a,c)=>a.from-c.from);let o=e;for(const a of[...r].reverse())o=o.slice(0,a.from)+a.insert+o.slice(a.to);return wi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:r,selectedFrom:s}}const Dd=Lt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Gi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:Re.globalProperties.font.values},bodyFont:{values:Re.globalProperties.font.values},fontDesign:{values:Re.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),mr={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},rs=Object.freeze({Meadow:Object.freeze({...mr,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...mr,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...mr,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...mr,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Xd(n,e){Object.hasOwn(Gi,n)||Qe("Unknown theme token.");const t=Gi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function ea(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Gi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Xd(e,n[e]);return n}function Ld(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),ea(e.tokens),e}function E1(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Ld(t),t}function ss(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],r=[];if(t.iterate({enter(a){a.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(a.name)&&n.slice(a.from,a.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(a.from,a.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(a.name)&&(a.name==="VariableDefinition"?i:r).push(a.node)}}),!i.length&&!r.length){const a=wi(n);e.canInitialize=!a.issue&&a.roots.length===1&&!a.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;a.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froma.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const s=i[0].parent,o=Ci(s);(s.name!=="VariableDeclaration"||s.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(a=>a.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const l={};for(const a of Ci(o[3])){if(["{","}",","].includes(a.name))continue;const c=Ci(a),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(a.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(l,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Xd(u,f),l[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}ea(l);for(const a of r){const c=a.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==a.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Gi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=l}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),ea(t),{changes:Object.keys(Gi).filter(r=>t[r]!==n.tokens[r]).map(r=>({...n.ranges[r],insert:JSON.stringify(t[r])})).sort((r,s)=>r.from-s.from)}}function U1(n,e="Meadow"){(!ss(n).canInitialize||!Object.hasOwn(rs,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=wi(n),r=i.nodes[0],s=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;s.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(r,c,c,!0);r.structure&&o(r,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let l=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")l=c.to;else break;s.push({from:l,to:l,insert:` -const widgetTheme = ${JSON.stringify(rs[e],null,2)}; -`}),s.sort((c,h)=>c.from-h.from);let a=n;for(const c of[...s].reverse())a=a.slice(0,c.from)+c.insert+a.slice(c.to);return(!ss(a).tokens||wi(a).issue)&&Qe("This layout cannot be themed automatically. Your source was preserved."),{changes:s}}function Bd(n){if(!Array.isArray(n)||n.length>4096)return[];const e=new Map,t=new Set;for(const i of n){if(typeof i!="string"||new TextEncoder().encode(i).length>1024||/[\\\u0000-\u001f\u007f-\u009f]/.test(i))continue;const r=i.split("/");if(r.length!==2||r[0]!=="image"||!r[1]||new TextEncoder().encode(r[1]).length>255||r[1]!==r[1].trim()||r[1].includes("..")||!/\.(png|jpe?g|webp)$/i.test(r[1]))continue;const s=i.normalize("NFC").toLowerCase();e.has(s)&&e.get(s)!==i&&t.add(s),e.set(s,i)}return[...e].filter(([i])=>!t.has(i)).map(([,i])=>i).sort().slice(0,256)}const ta=W.define(),os=Te.define({create:()=>[],update(n,e){for(const t of e.effects)t.is(ta)&&(n=Bd(t.value));return n}});function ia(n,e){n.state.field(os,!1)!==void 0&&n.dispatch({effects:ta.of(e)})}const qd=Object.freeze({bloom:Object.freeze({name:"Bloom mark",description:"A small four-petal flower",kind:"icon"}),leaf:Object.freeze({name:"Leaf mark",description:"A tilted leaf and stem",kind:"icon"}),pebble:Object.freeze({name:"Pebble friend",description:"A quiet, round-eared companion",kind:"pet"})}),uo=`/* -ScriptWidget original geometric assets 1: Bloom mark, Leaf mark, Pebble friend. -Source: https://github.com/everettjf/scriptwidget (Editor/editorfe/src/visualAssets.js) -SPDX-License-Identifier: MIT -Copyright (c) 2021-2022 everettjf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ -`;function F1(n,e){const t=i=>e?`{widgetTheme.${i}}`:JSON.stringify(rs.Meadow[i]);if(n==="bloom")return``;if(n==="leaf")return``;if(n==="pebble")return``;throw new Error("Choose an original asset from the catalog.")}function D1(n,e,{id:t,kind:i,path:r},s=[]){if(n.source!==e||n.issue)throw new Error("Layout changed. Select the container again.");const o=n.nodes.find(f=>f.id===t);if(!o?.structure)throw new Error("Select a stack/grid with literal JSX children in Layout or Assets.");let l;if(i==="photo"){if(!Bd(s).includes(r))throw new Error("This image is no longer in the package resource list. Refresh images.");l=``}else{if(!Object.hasOwn(qd,i))throw new Error("Choose an original asset from the catalog.");l=F1(i,!!ss(e).tokens)}const a=[{from:o.contentTo,to:o.contentTo,insert:l}];let c=o.contentTo;if(i!=="photo"&&!e.includes(uo)){const f=e.startsWith("#!")?e.indexOf(` -`)+1:0;a.push({from:f,to:f,insert:uo}),c+=uo.length}a.sort((f,d)=>f.from-d.from);let h=e;for(const f of[...a].reverse())h=h.slice(0,f.from)+f.insert+h.slice(f.to);if(wi(h).issue)throw new Error("This asset would exceed the supported layout limits. Your source was preserved.");return{changes:a,selectedFrom:c}}const X1=n=>["string","number","number|string","date|number","boolean","enum","color","url","action-id","storage-key"].includes(n.type);function L(n,e,t){const i=document.createElement(n);return e&&(i.className=e),t!==void 0&&(i.textContent=t),i}function L1(n,e){const t=L("section","sw-layout"),i=L("div","sw-layout-header"),r=L("div","sw-layout-body");t.setAttribute("aria-label","Visual layout editor");let s=!1,o="layout",l=null,a=null,c="",h=null,u=!1,f=0;const d=String(Math.random()),p=(Q,D)=>P=>{if(u||!t.contains(Q)){P.preventDefault();return}return D(P)},m=(Q,D,P)=>Q.addEventListener(D,p(Q,P)),O=(Q,D,P=!1)=>{const V=L("button","sw-layout-button",Q);return V.type="button",V.disabled=P,m(V,"click",D),V},y=O("Layout",()=>{s=o==="layout"?!s:!0,o="layout",Y(),n.requestMeasure()});y.classList.add("sw-layout-toggle"),y.setAttribute("aria-expanded","false");const b=L("span","sw-layout-hint","Select layers and edit literal JSX"),x=O("Undo",()=>Xl(n)),C=O("Redo",()=>Wr(n)),k=O("Theme",()=>{s=o==="theme"?!s:!0,o="theme",Y(),n.requestMeasure()});k.setAttribute("aria-expanded","false");const S=O("Assets",()=>{s=o==="assets"?!s:!0,o="assets",Y(),n.requestMeasure()});S.setAttribute("aria-expanded","false"),i.append(y,k,S,b,x,C),t.append(i,r),r.hidden=x.hidden=C.hidden=!0;const v=L("p","sw-layout-error");v.setAttribute("role","alert"),v.hidden=!0,t.append(v);function U(){l=wi(n.state.doc.toString());const Q=L("div","sw-layout-inspector sw-theme-inspector");if(r.replaceChildren(Q),Q.append(L("div","sw-layout-title","Widget assets")),Q.append(L("p","sw-layout-notice","Insert editable original JSX or a package image. Originals follow connected theme colors; pet artwork is static. Import photos with the app's existing image tools or Web Studio's Add image.")),l.issue){Q.append(L("p","sw-layout-notice",l.issue));return}const D=l.nodes.filter(q=>q.structure),P=L("select");P.setAttribute("aria-label","Asset destination");for(const q of D){const G=L("option","",`${q.tag} · line ${n.state.doc.lineAt(q.from).number}`);G.value=q.id,P.append(G)}D.some(q=>q.id===a)?P.value=a:a=P.value,m(P,"change",()=>{a=P.value}),Q.append(P);const V=n.state.readOnly||!D.length;D.length||Q.append(L("p","sw-layout-notice","Add a stack/grid with literal JSX children in Code to insert assets."));function le(q,G){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const ce=D1(l,n.state.doc.toString(),{id:P.value,kind:q,path:G},n.state.field(os));a=P.value,v.hidden=!0,n.dispatch({changes:ce.changes,selection:{anchor:ce.selectedFrom},annotations:vr.of("full"),userEvent:"input.asset",scrollIntoView:!0})}catch(ce){v.textContent=ce.message,v.hidden=!1}}for(const[q,G]of Object.entries(qd)){const ce=L("div","sw-layout-actions");ce.append(O(`Insert ${G.name}`,()=>le(q),V),L("span","",G.description)),Q.append(ce)}Q.append(L("div","sw-layout-title","Package images"));const J=n.state.field(os),ee=L("select");ee.setAttribute("aria-label","Package image");for(const q of J){const G=L("option","",q);G.value=q,ee.append(G)}ee.disabled=!J.length,Q.append(ee,O("Insert package image",()=>le("photo",ee.value),V||!J.length)),J.length||Q.append(L("p","sw-layout-notice","No supported images in image/. Add a PNG, JPEG or WebP to the package, then refresh or reopen the editor.")),e.refreshResources&&Q.append(O("Refresh images",async()=>{const q=++f,G=n.state.doc,ce=()=>!u&&q===f&&n.state.doc===G;try{const I=await e.refreshResources();ce()&&(v.hidden=!0,ia(n,I))}catch{ce()&&(v.textContent="Images could not be refreshed. Reopen this document and try again.",v.hidden=!1)}})),Q.append(L("p","sw-layout-notice","Bloom mark, Leaf mark and Pebble friend: original ScriptWidget geometry, MIT licensed. Package photos retain their own rights. See the Studio assets documentation."))}function F(Q,D){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const P=n.state.doc.toString();if(P!==D)throw new Error("Source changed. Reopen Theme before editing.");const V=Q(P);v.hidden=!0,V.changes.length&&n.dispatch({changes:V.changes,annotations:vr.of("full"),userEvent:"input.theme"})}catch(P){v.textContent=P.message,v.hidden=!1}}function j(){const Q=n.state.doc.toString(),D=ss(Q),P=n.state.readOnly,V=L("div","sw-layout-inspector sw-theme-inspector");if(r.replaceChildren(V),V.append(L("div","sw-layout-title","Widget theme")),V.append(L("p","sw-layout-notice","Saved as ordinary JavaScript with your widget. Dynamic values stay in Code. Applying a theme changes the connected colors, fonts and spacing.")),D.issue){V.append(L("p","sw-layout-notice",D.issue));return}if(!D.tokens){V.append(O("Connect layout to Meadow theme",()=>F(ee=>U1(ee),Q),P||!D.canInitialize)),D.canInitialize||V.append(L("p","sw-layout-notice","Use a literal top-level $render layout, or define the documented widgetTheme object in Code."));return}const le=L("div","sw-layout-actions");for(const[ee,q]of Object.entries(rs))le.append(O(ee,()=>F(G=>ho(D,G,q),Q),P));V.append(le);for(const[ee,q]of Object.entries(Gi)){const G=L("form","sw-layout-form"),ce=L("label","",ee),I=L(q.values?"select":"input");if(q.values)for(const se of q.values){const Me=L("option","",se);Me.value=se,I.append(Me)}q.type==="number"&&(I.type="number",I.min="0",I.max=String(q.maximum),I.step="any"),I.value=String(D.tokens[ee]),I.setAttribute("aria-label",`Theme ${ee}`),I.disabled=P;const te=O(`Apply ${ee}`,()=>{},P);te.type="submit",G.append(ce,I,te),m(G,"submit",se=>{se.preventDefault();const Me=q.type==="number"?I.value.trim()?Number(I.value):NaN:I.value;F(ge=>ho(D,ge,{...D.tokens,[ee]:Me}),Q)}),V.append(G)}const J=L("textarea");J.rows=5,J.setAttribute("aria-label","Reusable theme JSON"),J.value=E1(D.tokens),V.append(L("label","","Copy this JSON to reuse a theme, or paste a version 1 theme and import it."),J,O("Import theme JSON",()=>F(ee=>ho(D,ee,Ld(J.value).tokens),Q),P))}function E(Q,D=l?.source){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");if(D!==n.state.doc.toString())throw new Error("Source changed during this operation. Select the layer again.");const P=M1(l,n.state.doc.toString(),Q);if(v.hidden=!0,!P.changes.length)return;n.dispatch({changes:P.changes,selection:{anchor:P.selectedFrom},annotations:vr.of("full"),userEvent:"input.layout",scrollIntoView:!0})}catch(P){v.textContent=P.message,v.hidden=!1}}function M(Q){u||(a=Q.id,c="",n.dispatch({selection:{anchor:Q.from,head:Q.to},scrollIntoView:!0,userEvent:"select.layout"}),Y())}function Y(){if(y.setAttribute("aria-expanded",String(s&&o==="layout")),k.setAttribute("aria-expanded",String(s&&o==="theme")),S.setAttribute("aria-expanded",String(s&&o==="assets")),r.hidden=!s,x.hidden=C.hidden=!s,b.hidden=s,x.disabled=n.state.readOnly||wc(n.state)===0,C.disabled=n.state.readOnly||vc(n.state)===0,!s)return;if(o==="assets"){U();return}if(o==="theme"){j();return}if(l=wi(n.state.doc.toString()),r.replaceChildren(),l.issue){r.append(L("p","sw-layout-notice",l.issue));return}const Q=n.state.selection.main.from,D=l.nodes.filter(I=>I.from<=Q&&QI.id===a&&I.from<=Q&&Q<=I.to)??D??l.nodes[0];a=P.id;const V=L("div","sw-layout-layers");V.setAttribute("role","tree"),V.setAttribute("aria-label","Layout layers");const le=n.state.readOnly,J=I=>{const te=I.text??I.properties.find(se=>se.name==="text"&&se.editable&&typeof se.value=="string")?.value;return`<${I.tag}>${te?` · ${te.slice(0,32)}`:""}${I.locked?" · locked":""}`};for(const[I,te]of l.nodes.entries()){const se=l.nodes.find(ie=>ie.id===te.parentID),Me=!le&&!te.locked&&se?.structure,ge=O(J(te),()=>M(te));ge.classList.add("sw-layout-layer"),ge.dataset.layerId=te.id,ge.style.paddingInlineStart=`${8+te.depth*14}px`,ge.setAttribute("role","treeitem"),ge.setAttribute("aria-level",String(te.depth+1)),ge.setAttribute("aria-selected",String(te.id===P.id)),ge.tabIndex=te.id===P.id?0:-1,ge.draggable=!!Me,m(ge,"keydown",ie=>{let we;ie.key==="ArrowUp"&&(we=l.nodes[Math.max(0,I-1)]),ie.key==="ArrowDown"&&(we=l.nodes[Math.min(l.nodes.length-1,I+1)]),ie.key==="ArrowLeft"&&(we=se),ie.key==="ArrowRight"&&(we=l.nodes.find(qe=>qe.id===te.children[0])),ie.key==="Home"&&(we=l.nodes[0]),ie.key==="End"&&(we=l.nodes.at(-1)),we&&(ie.preventDefault(),ie.stopPropagation(),M(we),ee().find(qe=>qe.dataset.layerId===we.id)?.focus())}),m(ge,"dragstart",ie=>{if(!Me){ie.preventDefault();return}h={id:te.id,source:l.source},ie.dataTransfer.setData("application/x-scriptwidget-layer",d),ie.dataTransfer.effectAllowed="move"}),m(ge,"dragover",ie=>{h&&se?.structure&&te.id!==h.id&&(ie.preventDefault(),ie.dataTransfer.dropEffect="move")}),m(ge,"drop",ie=>{if(!h||ie.dataTransfer.getData("application/x-scriptwidget-layer")!==d||!se?.structure)return;ie.preventDefault();const we=h;h=null,E({type:"move",id:we.id,parentID:se.id,index:se.children.filter(qe=>qe!==we.id).indexOf(te.id)},we.source)}),m(ge,"dragend",()=>{h=null}),V.append(ge)}function ee(){return[...t.querySelectorAll(".sw-layout-layer")]}const q=L("div","sw-layout-inspector"),G=L("div","sw-layout-title",`<${P.tag}>`);if(q.append(G),(le||P.locked)&&q.append(L("p","sw-layout-notice",le?"This document is read only.":P.reason)),!le&&!P.locked){let ge=function(){c=se.value;const oe=hl(P)[c],Ae=P.properties.find(tt=>tt.name===c);if(Me.replaceChildren(),te.onsubmit=tt=>tt.preventDefault(),Ae&&!Ae.editable){Me.append(L("span","sw-layout-notice","Dynamic value: edit it in Code. Connected widgetTheme tokens can be changed in Theme."));return}const ae=L(oe.values||oe.type==="boolean"?"select":"input");ae.setAttribute("aria-label","Layout property value");for(const tt of oe.values??(oe.type==="boolean"?[!0,!1]:[])){const li=L("option","",String(tt));li.value=String(tt),ae.append(li)}ae.value=Ae?String(Ae.value):oe.values?.[0]??(oe.type==="boolean"?"true":"");const Ie=O("Apply",()=>{});Ie.type="submit",Me.append(ae,Ie,O("Remove",()=>E({type:"property",id:P.id,name:c,remove:!0}),!Ae||oe.required)),te.onsubmit=p(te,tt=>{tt.preventDefault();const li=oe.type==="boolean"?ae.value==="true":oe.type==="number"?ae.value.trim()?Number(ae.value):NaN:ae.value;E({type:"property",id:P.id,name:c,value:li})})};if(P.textEditable){const oe=L("form","sw-layout-form"),Ae=L("label","","Text"),ae=L("input");ae.value=P.text,ae.setAttribute("aria-label","Layer text");const Ie=O("Apply text",()=>{});Ie.type="submit",oe.append(Ae,ae,Ie),m(oe,"submit",tt=>{tt.preventDefault(),E({type:"text",id:P.id,value:ae.value})}),q.append(oe)}const I=Object.entries(hl(P)).filter(([,oe])=>X1(oe)),te=L("form","sw-layout-form"),se=L("select");se.setAttribute("aria-label","Layout property");for(const[oe]of I){const Ae=L("option","",oe);Ae.value=oe,se.append(Ae)}I.some(([oe])=>oe===c)||(c=P.structure?"alignment":"color"),se.value=c,se.value||(se.selectedIndex=0,c=se.value);const Me=L("div","sw-layout-property");te.append(se,Me),m(se,"change",ge),ge(),q.append(te);const ie=l.nodes.find(oe=>oe.id===P.parentID),we=ie?.children.indexOf(P.id)??-1,qe=L("div","sw-layout-actions");if(qe.append(O("Move up",()=>E({type:"move",id:P.id,parentID:ie.id,index:we-1}),!ie?.structure||we<=0),O("Move down",()=>E({type:"move",id:P.id,parentID:ie.id,index:we+1}),!ie?.structure||we>=ie.children.length-1),O("Delete layer",()=>E({type:"remove",id:P.id}),!ie?.structure)),q.append(qe),ie?.structure){const oe=l.nodes.filter(ae=>ae.structure&&!(ae.from>=P.from&&ae.to<=P.to)),Ae=L("select");Ae.setAttribute("aria-label","Move layer into container");for(const ae of oe){const Ie=L("option","",`${ae.tag} · line ${n.state.doc.lineAt(ae.from).number}`);Ie.value=ae.id,Ae.append(Ie)}q.append(Ae,O("Move inside",()=>{const ae=l.nodes.find(Ie=>Ie.id===Ae.value);E({type:"move",id:P.id,parentID:ae.id,index:ae.children.filter(Ie=>Ie!==P.id).length})},!oe.length))}if(P.structure){const oe=L("div","sw-layout-actions");for(const[Ae,ae]of[["text","Add text"],["stack","Add stack"],["spacer","Add spacer"],["icon","Add icon"]])oe.append(O(ae,()=>E({type:"add",id:P.id,kind:Ae})));q.append(oe)}}const ce=P.properties.filter(I=>!I.editable).map(I=>I.name);ce.length&&q.append(L("p","sw-layout-notice",`Preserved in Code: ${ce.join(", ")}`)),!P.structure&&P.children.length&&q.append(L("p","sw-layout-notice","This child structure stays in Code. Reordering is available on literal stack/grid children.")),r.append(V,q)}return{dom:t,top:!0,update(Q){if(!s)return;const D=n.state.selection.main.from,P=l?.nodes.filter(le=>le.from<=D&&Dle.effects.some(J=>J.is(ta)));(Q.docChanged||V||Q.startState.readOnly!==n.state.readOnly||Q.selectionSet&&P!==a)&&(Q.docChanged&&o!=="assets"&&(a=null),Y()),x.disabled=n.state.readOnly||wc(n.state)===0,C.disabled=n.state.readOnly||vc(n.state)===0},destroy(){u=!0}}}const B1=R.baseTheme({".sw-layout":{fontFamily:"system-ui, sans-serif",fontSize:"12px",backgroundColor:"#f6f7fa",color:"#272a34",borderBottom:"1px solid #dce0e9"},"&dark .sw-layout":{backgroundColor:"#252830",color:"#eceef5",borderColor:"#414552"},".sw-layout-header":{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px",padding:"6px 10px"},".sw-layout-toggle":{fontWeight:"600"},".sw-layout-hint":{opacity:"0.65",fontSize:"11px"},".sw-layout-button":{fontFamily:"inherit",fontSize:"11px",color:"inherit",backgroundColor:"transparent",border:"1px solid #a0a5b655",borderRadius:"6px",padding:"4px 8px",cursor:"pointer",whiteSpace:"nowrap"},".sw-layout-button:disabled":{opacity:"0.4",cursor:"default"},".sw-layout-body":{display:"grid",gridTemplateColumns:"minmax(120px, 1fr) minmax(180px, 1.6fr)",maxHeight:"280px",overflow:"auto",borderTop:"1px solid #a0a5b633"},".sw-layout-body[hidden]":{display:"none"},".sw-layout-layers":{padding:"6px 2px",overflow:"auto",borderRight:"1px solid #a0a5b633"},".sw-layout-layer":{display:"block",border:0,borderRadius:"4px",width:"100%",textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",margin:"1px 0",paddingBlock:"6px"},'.sw-layout-layer[aria-selected="true"]':{backgroundColor:"#4085f52b",color:"inherit"},".sw-layout-inspector":{padding:"8px 10px",display:"flex",alignItems:"start",flexDirection:"column",gap:"8px",minWidth:0},".sw-theme-inspector":{gridColumn:"1 / -1"},".sw-theme-inspector textarea":{boxSizing:"border-box",width:"100%",fontFamily:"monospace",backgroundColor:"transparent",color:"inherit",border:"1px solid #a0a5b666",borderRadius:"5px"},".sw-layout-title":{fontWeight:"600"},".sw-layout-form":{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"5px",width:"100%"},".sw-layout-property,.sw-layout-actions":{display:"flex",flexWrap:"wrap",gap:"5px",alignItems:"center"},".sw-layout input,.sw-layout select":{fontFamily:"inherit",fontSize:"12px",minWidth:0,maxWidth:"100%",padding:"4px 6px",border:"1px solid #a0a5b666",borderRadius:"5px",backgroundColor:"transparent",color:"inherit"},".sw-layout-notice":{margin:"8px",lineHeight:"1.5",fontSize:"11px",opacity:"0.7"},".sw-layout-body > .sw-layout-notice":{gridColumn:"1 / -1"},".sw-layout-error":{margin:"0 10px 6px",color:"#b32636",fontSize:"12px"},"&dark .sw-layout-error":{color:"#ff99a4"},".sw-layout button:focus-visible,.sw-layout input:focus-visible,.sw-layout select:focus-visible":{outline:"2px solid #4085f5",outlineOffset:"1px"},"@media (max-width: 480px)":{".sw-layout-body":{gridTemplateColumns:"minmax(90px, 1fr) minmax(150px, 1.6fr)"},".sw-layout-hint":{display:"none"}}});function q1(n={}){return[B1,os,ji.of(e=>L1(e,n))]}const Id="scriptwidget.studio.document-state.v1.";function zd(n,e,t){if(!n||!e)return!1;try{return n.setItem(`${Id}${e}`,JSON.stringify({anchor:Number(t.anchor)||0,head:Number(t.head)||0,scrollTop:Number(t.scrollTop)||0})),!0}catch{return!1}}function I1(n,e,t){if(!n||!e)return null;try{const i=JSON.parse(n.getItem(`${Id}${e}`));if(!i||typeof i!="object")return null;const r=s=>Math.max(0,Math.min(Number(s)||0,t));return{anchor:r(i.anchor),head:r(i.head),scrollTop:Math.max(0,Number(i.scrollTop)||0)}}catch{return null}}const z1="scriptwidget.web-studio.draft.v1:";function na(n){return`${z1}${n}`}function W1(n,e){if(!e)return null;try{const t=JSON.parse(n.getItem(na(e))||"null");return t&&typeof t.content=="string"&&typeof t.baseRevision=="string"?t:null}catch{return null}}function hh(n,e,t,i,r=Date.now()){if(!e||typeof i!="string")return null;const s={documentID:e,content:t,baseRevision:i,updatedAt:r};return n.setItem(na(e),JSON.stringify(s)),s}function fo(n,e){e&&n.removeItem(na(e))}function j1(n,e,t,i){const r=W1(n,e);return!r||r.content===t?null:{...r,serverContent:t,serverRevision:i,isStale:r.baseRevision!==i}}function V1(){return{connection:"connecting",save:"idle",preview:"idle",conflict:null}}function Y1(n,e){switch(e.type){case"CONNECTED":return{...n,connection:"connected"};case"OFFLINE":return{...n,connection:"offline",save:n.save==="saving"?"draft":n.save};case"DISCONNECTED":return{...n,connection:"disconnected"};case"EDITED":return{...n,save:"draft",conflict:null};case"SAVING":return{...n,save:"saving"};case"SAVED":return{...n,save:"saved",preview:e.preview||"requested",conflict:null};case"SAVE_FAILED":return{...n,save:"error"};case"CONFLICT":return{...n,save:"conflict",conflict:e.conflict};default:return n}}class N1{constructor(e){this.send=e,this.epoch=0,this.context=null,this.inFlight=null,this.needsFlush=!1}open({documentID:e,packageID:t,path:i,revision:r,content:s}){return this.epoch+=1,this.context={documentID:e,packageID:t,path:i,revision:r,content:s,generation:0,savedGeneration:0},this.needsFlush=!1,this.snapshot()}edit(e){return this.context?(this.context.content=e,this.context.generation+=1,this.snapshot()):null}rebase(e){return this.context&&(this.context.revision=e),this.snapshot()}get isDirty(){return!!(this.context&&this.context.generation!==this.context.savedGeneration)}snapshot(){return this.context?{...this.context,dirty:this.isDirty}:null}async flush(){if(!this.context||!this.isDirty)return{skipped:!0,snapshot:this.snapshot()};if(this.inFlight)return this.needsFlush=!0,this.inFlight.then(()=>this.isDirty?this.flush():{skipped:!0,snapshot:this.snapshot()});const e=this.epoch,t={...this.context};this.needsFlush=!1,this.inFlight=this.send({documentID:t.documentID,packageID:t.packageID,path:t.path,content:t.content,baseRevision:t.revision}).then(r=>this.epoch!==e||this.context?.documentID!==t.documentID?{ignored:!0,result:r,snapshot:this.snapshot()}:(this.context.revision=r.revision,this.context.savedGeneration=t.generation,{result:r,snapshot:this.snapshot()})).finally(()=>{this.inFlight=null});const i=await this.inFlight;return this.needsFlush&&this.isDirty?this.flush():i}}function uh(n){return["draft","saving","error","conflict"].includes(n)}class G1 extends Error{constructor(e,t,i={}){super(e),this.name="StudioAPIError",this.status=t,this.body=i}}class H1{constructor({fetchImpl:e=globalThis.fetch,token:t=()=>"",onUnauthorized:i=()=>{}}={}){if(typeof e!="function")throw new TypeError("A fetch implementation is required");this.fetchImpl=e,this.token=t,this.onUnauthorized=i}async request(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t)),r=await i.json().catch(()=>({}));return this.validate(i,e,r),r}async requestBlob(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t));if(!i.ok){const r=await i.json().catch(()=>({}));this.validate(i,e,r)}return i.blob()}authorizedOptions(e){return{...e,headers:{"Content-Type":"application/json","X-Studio-Token":this.token(),...e.headers||{}}}}validate(e,t,i){if(!e.ok){const r=new G1(i.message||`Request failed (${e.status})`,e.status,i);throw e.status===401&&t!=="/api/v1/pair"&&this.onUnauthorized(r),r}}}const ra=/^https?:$/.test(window.location.protocol),_1=document.querySelector(ra?"#editor":"#native-editor"),sa=new Hi,ls=new Hi;let It=null,me=null,Et=null,lt=0,vi=0,ul=!1,Mn=null,fh=null;const dh=document.querySelector("#save-status");let Wd=null;function En(n,e="idle"){dh.textContent=n,dh.dataset.state=e}function J1(){window.clearTimeout(fh),fh=window.setTimeout(()=>{const n=z.state.selection.main;zd(window.localStorage,me,{anchor:n.anchor,head:n.head,scrollTop:z.scrollDOM.scrollTop})},180)}function jd(){return window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function oa(){window.clearTimeout(Mn),En("Saving…","saving"),Mn=window.setTimeout(()=>{const n=z.state.doc.toString(),e=lt,t=me,i=Et,r=vi;nn(It,Ue.documentSave,{content:n,version:e},t,(s={})=>{ra||t!==me||i!==Et||r!==vi||e!==lt||En(s.result==="ok"||s.result==="unavailable"?"Saved":"Save failed",s.result==="failed"?"error":"saved")},i)},700)}function eS(n){if((n.selectionSet||n.viewportChanged||n.docChanged)&&J1(),!n.docChanged||ul)return;lt+=1,Wd?.documentChanged();const e=[];n.changes.iterChanges((t,i,r,s,o)=>{e.push({from:t,to:i,insert:o.toString(),newFrom:r,newTo:s})}),nn(It,Ue.documentChanged,{changes:e,version:lt},me,void 0,Et),oa()}const Vd=[ng(),og(),xO(),v0(),q1({refreshResources:()=>new Promise((n,e)=>{const t=me,i=vi,r=Et,s=window.setTimeout(()=>e(new Error("Resource refresh timed out")),5e3);nn(It,Ue.documentResources,{},t,(o={})=>{window.clearTimeout(s),t!==me||i!==vi||o.result!=="ok"||o.documentID!==t||!Array.isArray(o.resources)?e(new Error("Document resources are unavailable")):n(o.resources)},r)})}),Gg(),hO(),OO(),_.allowMultipleSelections.of(!0),Ug(),c0(),uA(),xA({override:[v1],activateOnTyping:!0}),MO(),FO(),CO(),Qb(),f1(),i1(Ed,{delay:350}),Eu(k1),yb({jsx:!0}),ms.of([Py,...mA,...Qy,...Vb,...Z0,...jg,...nd]),sa.of(_.readOnly.of(!1)),ls.of(Ud(jd())),R.updateListener.of(eS),R.contentAttributes.of({autocapitalize:"off",autocomplete:"off",spellcheck:"false"})],z=new R({state:_.create({doc:"",extensions:Vd}),parent:_1});function _t(n,e=me,t=0,i=!1){window.clearTimeout(Mn),vi+=1;const r=z.state.selection.main;zd(window.localStorage,me,{anchor:r.anchor,head:r.head,scrollTop:z.scrollDOM.scrollTop}),ul=!0;const s=e!==me;me=e,lt=t;const o=I1(window.localStorage,me,(n??"").length),l=o?{anchor:o.anchor,head:o.head}:{anchor:0};if(s){const a=ls.get(z.state),c=z.state.readOnly;let h=_.create({doc:n??"",extensions:Vd,selection:l});h=h.update({effects:[ls.reconfigure(a),sa.reconfigure(_.readOnly.of(c))]}).state,z.setState(h)}else z.dispatch({changes:{from:0,to:z.state.doc.length,insert:n??""},selection:l,scrollIntoView:!0});o&&window.requestAnimationFrame(()=>{z.scrollDOM.scrollTop=o.scrollTop}),ul=!1,i&&nn(It,Ue.documentChanged,{content:z.state.doc.toString(),version:lt},me,void 0,Et),En("Saved","saved")}function ph(n){if(z.state.readOnly)return!1;const e=z.state.selection.main;return z.dispatch({changes:{from:e.from,to:e.to,insert:n},selection:{anchor:e.from+n.length},userEvent:"input"}),z.focus(),!0}async function as(){if(z.state.readOnly)return!1;const n=z.state.doc.toString(),e=vi,t=lt,i=()=>!z.state.readOnly&&e===vi&&t===lt&&n===z.state.doc.toString();try{const[{format:r},{default:s},{default:o}]=await Promise.all([Cs(()=>import("./standalone-Cayz_KD-.js"),[],import.meta.url),Cs(()=>import("./babel-BktJt1uC.js"),[],import.meta.url),Cs(()=>import("./estree-DFfjoHvx.js"),[],import.meta.url)]),l=await r(n,{parser:"babel",plugins:[s,o],semi:!0,singleQuote:!0,trailingComma:"es5"});return i()?(_t(l,me,lt+1,!0),oa(),!0):!1}catch(r){return i()&&nn(It,"diagnostics.publish",{message:String(r),severity:"error"},me,void 0,Et),!1}}function Li(n){z.dispatch({effects:sa.reconfigure(_.readOnly.of(!!n))})}function cs(n){const e=n==="dark"||n==="light"?n:jd();document.documentElement.dataset.theme=e,z.dispatch({effects:ls.reconfigure(Ud(e))})}function tS(n=[]){const e=n.map(t=>({from:Math.max(0,Math.min(t.from??0,z.state.doc.length)),to:Math.max(0,Math.min(t.to??t.from??0,z.state.doc.length)),severity:t.severity??"error",message:t.message??"Unknown error"}));z.dispatch(wd(z.state,e))}function st(n,e){It.registerHandler(n,async(t={},i=()=>{})=>{try{if(Et!==null&&n!==Ue.documentOpen&&n!==Ue.editorSetTheme&&(t.documentID!==me||t.sessionID!==Et))throw new Error("The editor session changed.");i({result:"ok",...await e(t)})}catch(r){i({result:"failed",message:String(r)})}})}p1(n=>{It=n,st(Ue.documentOpen,({payload:e={},documentID:t,sessionID:i=null})=>(Et=i,_t(e.content,t,e.version??0),ia(z,e.resources??[]),Li(e.readOnly),e.dirty&&(En("Restored unsaved edits","editing"),e.readOnly||oa()),{protocolVersion:Zd})),st(Ue.documentReplace,({payload:e={},documentID:t})=>{if(z.state.readOnly||e.expectedContent!==void 0&&e.expectedContent!==z.state.doc.toString())throw new Error("The file changed or is read only.");return _t(e.content,t,e.version??lt,!0),{}}),st(Ue.documentSetReadOnly,({payload:e={}})=>(Li(e.readOnly),{readOnly:!!e.readOnly})),st(Ue.editorInsert,({payload:e={}})=>({inserted:ph(e.content??"")})),st(Ue.editorFormat,async()=>({formatted:await as()})),st(Ue.editorSetTheme,({payload:e={}})=>(cs(e.theme),{})),st(Ue.editorGetState,()=>({content:z.state.doc.toString(),version:lt,documentID:me,sessionID:Et,selection:{from:z.state.selection.main.from,to:z.state.selection.main.to}})),st(Ue.diagnosticsPublish,({payload:e={}})=>(tS(e.items),{})),st("editor_setValue",({value:e})=>(_t(e),{})),st("editor_insertValue",({value:e})=>({inserted:ph(e??"")})),st("editor_getValue",()=>({value:z.state.doc.toString()})),st("editor_setReadonly",({readonly:e})=>(Li(e),{readonly:!!e})),st("editor_formatCode",async()=>({formatted:await as()})),m1(It)});ra&&(document.querySelector("#native-editor").hidden=!0,document.querySelector("#web-studio").hidden=!1,iS());async function iS(){const n=document.querySelector("#pair-dialog"),e=document.querySelector("#pair-form"),t=document.querySelector("#pair-error"),i=document.querySelector("#package-select"),r=document.querySelector("#file-select"),s=document.querySelector("#connection-status"),o=document.querySelector("#disconnect-button"),l=document.querySelector("#studio-grid"),a=document.querySelector(".editor-column"),c=document.querySelector("#recovery-banner"),h=document.querySelector("#conflict-banner"),u=document.querySelector("#command-dialog"),f=document.querySelector("#command-search"),d=document.querySelector("#command-list"),p=document.querySelector("#compare-dialog");let m=window.sessionStorage.getItem("scriptwidget.web-studio.token")||"",O=[],y=null,b=null,x=null,C=0,k=null,S="",v="",U=null,F=V1(),j="",E="",M=null;function Y(w="Session ended. Enter the new code shown on your device."){m="",window.sessionStorage.removeItem("scriptwidget.web-studio.token"),o.hidden=!0,Q({type:"DISCONNECTED"}),s.textContent=w,Li(!0),n.open||n.showModal()}function Q(w){F=Y1(F,w);const Z={connecting:"Connecting",connected:"Connected",offline:"Offline",disconnected:"Disconnected"},X={idle:"Ready",draft:"Draft saved locally",saving:"Saving…",saved:"Saved",error:"Save failed",conflict:"Conflict"};s.dataset.state=F.connection,document.querySelector("#status-connection").textContent=Z[F.connection]||F.connection,En(X[F.save]||F.save,F.save),document.querySelector("#dirty-indicator").hidden=!["draft","saving","error","conflict"].includes(F.save),document.querySelector("#status-preview").textContent=F.preview==="requested"?"Preview requested":"Preview idle",document.querySelector("#preview-detail").textContent=F.preview==="requested"?"Requested on device":"Not requested"}const D=new H1({token:()=>m,onUnauthorized:()=>Y()}),P=(w,Z)=>D.request(w,Z);M=new N1(({packageID:w,path:Z,content:X,baseRevision:ne})=>P("/api/v1/document",{method:"PUT",body:JSON.stringify({package:w,path:Z,content:X,baseRevision:ne})}));async function V(w){m=(await P("/api/v1/pair",{method:"POST",body:JSON.stringify({code:w})})).token,window.sessionStorage.setItem("scriptwidget.web-studio.token",m),o.hidden=!1,Q({type:"CONNECTED"}),le()}function le(){window.clearInterval(y),y=window.setInterval(async()=>{if(m)try{const w=await P("/api/v1/session");if(!navigator.onLine)return;I(w),Q({type:"CONNECTED"})}catch(w){w.status!==401&&(s.textContent=`Interrupted · ${w.message}`,Q({type:"OFFLINE"}))}},5e3)}async function J(){if(O=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...O.map(Z=>new Option(Z.name,Z.id))),!O.length){s.textContent="No editable widgets",Li(!0);return}await ee()}async function ee(){const w=O.find(ne=>ne.id===i.value),Z=w?.files||[];r.replaceChildren(...Z.map(ne=>new Option(ne,ne)));const X=Z.includes(w?.entry)?w.entry:Z[0];X&&(r.value=X),await G()}async function q(w=""){O=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...O.map(Oe=>new Option(Oe.name,Oe.id))),j&&(i.value=j);const X=O.find(Oe=>Oe.id===i.value),ne=X?.files||[];r.replaceChildren(...ne.map(Oe=>new Option(Oe,Oe))),r.value=ne.includes(w)?w:ne.includes(E)?E:X?.entry||ne[0]}async function G(){if(!i.value||!r.value)return;const w=new URLSearchParams({package:i.value,path:r.value}),Z=await P(`/api/v1/document?${w}`),X=`${i.value}/${r.value}`;j=i.value,E=r.value,S=Z.revision,v=Z.content,U=null,h.hidden=!0,_t(Z.content,X,0),ia(z,O.find(Oe=>Oe.id===j)?.files??[]),M.open({documentID:X,packageID:j,path:E,revision:Z.revision,content:Z.content}),Li(!!Z.readOnly),ce(Z);const ne=j1(window.localStorage,X,Z.content,Z.revision);c.hidden=!ne,c._draft=ne,document.querySelector("#recovery-message").textContent=ne?.isStale?"The device version also changed. Review before saving.":"Restore it or keep the device version.",s.textContent="Connected",Q({type:"CONNECTED"}),o.hidden=!1,ge(),le(),Me()}function ce(w){document.querySelector("#breadcrumb-package").textContent=w.packageName||i.value,document.querySelector("#breadcrumb-file").textContent=r.value,document.querySelector("#editor-tab-name").textContent=r.value,document.querySelector("#revision-detail").textContent=S?S.slice(0,8):"—",document.querySelector("#access-detail").textContent=w.readOnly?"Read only":"Editable"}function I(w){w.device&&(document.querySelector("#device-name").textContent=w.device.name||w.device.model,document.querySelector("#device-system").textContent=`${w.device.model} · ${w.device.system}`),w.preview?.package&&(document.querySelector("#preview-target").textContent=w.preview.package),w.preview?.snapshotSequence&&te()}async function te(){try{const w=await D.requestBlob("/api/v1/preview"),Z=URL.createObjectURL(w),X=document.querySelector("#device-preview"),ne=k;k=Z,X.onload=()=>{ne&&URL.revokeObjectURL(ne)},X.src=Z,X.hidden=!1,document.querySelector("#preview-detail").textContent="Rendered on device"}catch{}}function se(w){const Z=document.querySelector("#console-list"),X=document.createElement("li");for(X.className=w.level||"info",X.textContent=w.message||"",Z.append(X);Z.children.length>200;)Z.firstChild.remove();Z.scrollTop=Z.scrollHeight}function Me(){window.clearTimeout(x);const w=async()=>{if(m)try{const Z=await P(`/api/v1/events?after=${C}`);C=Z.nextSequence??C;for(const X of Z.events||[])X.type==="console"&&se(X.payload||{}),X.type==="preview.snapshot"&&te(),X.type==="preview.requested"&&(document.querySelector("#status-preview").textContent="Preview requested",document.querySelector("#preview-detail").textContent="Requested on device"),X.type==="files.changed"&&X.payload?.package===j&&q(E).catch(qe);Q({type:"CONNECTED"})}catch(Z){Z.status!==401&&Q({type:"OFFLINE"})}finally{m&&(x=window.setTimeout(w,1e3))}};w()}function ge(){const w=Ed(z);document.querySelector("#problems-list").replaceChildren(...w.map(X=>{const ne=z.state.doc.lineAt(X.from),Oe=document.createElement("li");Oe.className=`problem-item ${X.severity}`;const it=document.createElement("button");return it.type="button",it.innerHTML=`${X.severity==="error"?"●":"▲"}Ln ${ne.number}`,it.children[1].textContent=X.message,it.addEventListener("click",()=>{z.dispatch({selection:{anchor:X.from},scrollIntoView:!0}),z.focus()}),Oe.append(it),Oe})),document.querySelector("#problems-count").textContent=String(w.length),document.querySelector("#status-problem-count").textContent=String(w.length),document.querySelector("#problems-summary").textContent=w.length?`${w.filter(X=>X.severity==="error").length} errors, ${w.filter(X=>X.severity!=="error").length} warnings`:"No problems detected"}async function ie(w,Z,X=null){M.snapshot()?.content!==w&&M.edit(w),X&&M.rebase(X),Q({type:"SAVING"});try{const ne=await M.flush();if(ne.ignored){Z({result:"ok",ignored:!0});return}if(ne.skipped){Q({type:"SAVED"}),Z({result:"ok",skipped:!0});return}const Oe=ne.result||{},it=M.snapshot();S=it?.revision||S,v=it?.content||w,fo(window.localStorage,me),U=null,h.hidden=!0,document.querySelector("#revision-detail").textContent=S?.slice(0,8)||"—",Q({type:"SAVED",preview:Oe.preview?.state}),Z({result:"ok",...Oe})}catch(ne){ne.status===409?(U=ne.body,h.hidden=!1,Q({type:"CONFLICT",conflict:U})):Q({type:"SAVE_FAILED"}),Z({result:"failed",message:ne.message})}}It={registerHandler(){},callHandler(w,Z,X=()=>{}){if(w===Ue.documentSave)ie(Z.payload.content,X);else if(w===Ue.documentResources){const ne=me,Oe=j;P("/api/v1/packages").then(it=>{if(ne!==me||Z.documentID!==me||Oe!==j){X({result:"failed"});return}X({result:"ok",documentID:ne,resources:(it.packages??[]).find(Wn=>Wn.id===Oe)?.files??[]})}).catch(()=>X({result:"failed"}))}else X({result:"ok"})}},Wd={documentChanged(){const w=z.state.doc.toString();M.edit(w),hh(window.localStorage,me,w,M.snapshot()?.revision||S),Q({type:"EDITED"}),window.clearTimeout(b),b=window.setTimeout(ge,380)}};async function we(w,Z){if(!uh(F.save)){await w();return}try{if(window.clearTimeout(Mn),await ie(z.state.doc.toString(),()=>{}),!M.isDirty&&F.save!=="conflict"){await w();return}}catch{}window.confirm("This document has changes that are not saved on the device. A browser draft is available. Switch anyway?")?await w():Z()}i.addEventListener("change",()=>{const w=i.value;i.value=j,we(async()=>{i.value=w,await ee()},()=>{i.value=j}).catch(qe)}),r.addEventListener("change",()=>{const w=r.value;r.value=E,we(async()=>{r.value=w,await G()},()=>{r.value=E}).catch(qe)});function qe(w){s.textContent=w.message||String(w),Q({type:"SAVE_FAILED"})}e.addEventListener("submit",async w=>{w.preventDefault(),t.textContent="";try{await V(document.querySelector("#pair-code").value),n.close(),await J()}catch(Z){t.textContent=Z.message}}),o.addEventListener("click",async()=>{try{await P("/api/v1/session",{method:"DELETE"})}catch{}Y("Disconnected. Start a new session with the code on your device.")}),document.querySelector("#new-file").addEventListener("click",async()=>{const w=window.prompt("New package-relative text file","source/helper.js")?.trim();if(w)try{await P("/api/v1/document",{method:"POST",body:JSON.stringify({package:j,path:w})}),await q(w),await G()}catch(Z){qe(Z)}}),document.querySelector("#delete-file").addEventListener("click",async()=>{const w=O.find(Z=>Z.id===j);if(!E||E===w?.entry){window.alert("The widget entry file cannot be deleted.");return}if(window.confirm(`Delete ${E}? This cannot be undone.`))try{const Z=new URLSearchParams({package:j,path:E});await P(`/api/v1/document?${Z}`,{method:"DELETE"}),E="",await q(),await G()}catch(Z){qe(Z)}}),document.querySelector("#clear-console").addEventListener("click",()=>document.querySelector("#console-list").replaceChildren()),document.querySelector("#restore-draft").addEventListener("click",()=>{const w=c._draft;w&&(_t(w.content,w.documentID,lt+1),c.hidden=!0,hh(window.localStorage,me,w.content,S),Q({type:"EDITED"}),ge())}),document.querySelector("#discard-draft").addEventListener("click",()=>{fo(window.localStorage,me),c.hidden=!0}),document.querySelector("#reload-server").addEventListener("click",()=>{U&&(fo(window.localStorage,me),S=U.currentRevision,v=U.currentContent,_t(v,me,lt+1),M.open({documentID:me,packageID:j,path:E,revision:S,content:v}),U=null,h.hidden=!0,Q({type:"SAVED"}),ge())}),document.querySelector("#keep-local").addEventListener("click",()=>{U&&ie(z.state.doc.toString(),()=>{},U.currentRevision)}),document.querySelector("#compare-conflict").addEventListener("click",()=>{document.querySelector("#compare-local").textContent=z.state.doc.toString(),document.querySelector("#compare-server").textContent=U?.currentContent||v,p.showModal()}),p.querySelector("button").addEventListener("click",()=>p.close());function oe(){const w=a.classList.toggle("problems-collapsed");document.querySelector("#problems-toggle").setAttribute("aria-expanded",String(!w))}function Ae(w){l.classList.toggle(`show-${w}`)}document.querySelector("#problems-toggle").addEventListener("click",oe),document.querySelector("#status-problems").addEventListener("click",()=>{a.classList.remove("problems-collapsed")}),document.querySelector("#explorer-button").addEventListener("click",()=>Ae("explorer")),document.querySelector("#inspector-button").addEventListener("click",()=>Ae("inspector")),document.querySelectorAll("[data-close-panel]").forEach(w=>w.addEventListener("click",()=>l.classList.remove(`show-${w.dataset.closePanel}`)));const ae=[{name:"Save Document",keys:"⌘S",run:()=>{window.clearTimeout(Mn),ie(z.state.doc.toString(),()=>{})}},{name:"Format Document",keys:"⇧⌥F",run:as},{name:"Toggle Problems",keys:"⌘J",run:oe},{name:"Toggle Explorer",keys:"⌘⇧E",run:()=>Ae("explorer")},{name:"Toggle Inspector",keys:"",run:()=>Ae("inspector")},{name:"Use Light Theme",keys:"",run:()=>cs("light")},{name:"Use Dark Theme",keys:"",run:()=>cs("dark")}];function Ie(w=""){const Z=ae.filter(X=>X.name.toLowerCase().includes(w.toLowerCase()));d.replaceChildren(...Z.map(X=>{const ne=document.createElement("li"),Oe=document.createElement("button");Oe.type="button",Oe.className="command";const it=document.createElement("span");it.textContent=X.name;const Wn=document.createElement("kbd");return Wn.textContent=X.keys,Oe.append(it,Wn),Oe.addEventListener("click",()=>{u.close(),X.run()}),ne.append(Oe),ne}))}function tt(){Ie(),u.showModal(),f.value="",f.focus()}document.querySelector("#command-button").addEventListener("click",tt),f.addEventListener("input",()=>Ie(f.value)),document.addEventListener("keydown",w=>{const Z=w.metaKey||w.ctrlKey;Z&&w.shiftKey&&w.key.toLowerCase()==="p"?(w.preventDefault(),tt()):Z&&w.key.toLowerCase()==="s"?(w.preventDefault(),ae[0].run()):Z&&w.key.toLowerCase()==="j"?(w.preventDefault(),oe()):Z&&w.shiftKey&&w.key.toLowerCase()==="e"?(w.preventDefault(),Ae("explorer")):w.shiftKey&&w.altKey&&w.key.toLowerCase()==="f"&&(w.preventDefault(),as())}),z.dom.addEventListener("keyup",li),z.dom.addEventListener("mouseup",li);function li(){const w=z.state.selection.main.head,Z=z.state.doc.lineAt(w);document.querySelector("#cursor-position").textContent=`Ln ${Z.number}, Col ${w-Z.from+1}`}window.addEventListener("offline",()=>{s.textContent="Computer is offline",Q({type:"OFFLINE"})}),window.addEventListener("online",()=>{m&&P("/api/v1/session").then(w=>(I(w),Q({type:"CONNECTED"}),J())).catch(qe)}),window.addEventListener("beforeunload",w=>{uh(F.save)&&(w.preventDefault(),w.returnValue="")});try{await J()}catch{Y("Pair with the code shown on your device.")}}window.matchMedia?.("(prefers-color-scheme: dark)").addEventListener("change",()=>cs("system"));window.webkit||_t(`// ScriptWidget Studio -const widget = ( - - - -); -`); diff --git a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js new file mode 100644 index 00000000..2c1a0aa7 --- /dev/null +++ b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/assets/index-DIlVDbPO.js @@ -0,0 +1,59 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();const Yd="modulepreload",Nd=function(n,e){return new URL(n,e).href},al={},Cr=function(e,t,i){let s=Promise.resolve();if(t&&t.length>0){let c=function(h){return Promise.all(h.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const o=document.getElementsByTagName("link"),a=document.querySelector("meta[property=csp-nonce]"),l=a?.nonce||a?.getAttribute("nonce");s=c(t.map(h=>{if(h=Nd(h,i),h in al)return;al[h]=!0;const u=h.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(i)for(let p=o.length-1;p>=0;p--){const m=o[p];if(m.href===h&&(!u||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${h}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Yd,u||(d.as="script"),d.crossOrigin="",d.href=h,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((p,m)=>{d.addEventListener("load",p),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${h}`)))})}))}function r(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&r(a.reason);return e().catch(r)})};let po=[],mh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=mh[i])e=i+1;else return!0;if(e==t)return!1}}function ll(n){return n>=127462&&n<=127487}const cl=8205;function Gd(n,e,t=!0,i=!0){return(t?gh:_d)(n,e,i)}function gh(n,e,t){if(e==n.length)return e;e&&Oh(n.charCodeAt(e))&&yh(n.charCodeAt(e-1))&&e--;let i=Tr(n,e);for(e+=hl(i);e=0&&ll(Tr(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function _d(n,e,t){for(;e>1;){let i=gh(n,e-2,t);if(i=56320&&n<57344}function yh(n){return n>=55296&&n<56320}function hl(n){return n<65536?1:2}class se{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Bi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),kt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Bi(this,e,t);let i=[];return this.decompose(e,t,i,0),kt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new pn(this),r=new pn(e);for(let o=t,a=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(a+=s.value.length,s.done||a>=i)return!0}}iter(e=1){return new pn(this,e)}iterRange(e,t=this.length){return new Ah(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?se.empty:e.length<=32?new we(e):kt.from(we.split(e,[]))}}class we extends se{constructor(e,t=Jd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],a=s+o.length;if((t?i:a)>=e)return new ep(s,a,i,o);s=a+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new we(ul(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),a=gs(r.text,o.text.slice(),0,r.length);if(a.length<=32)i.push(new we(a,o.length+r.length));else{let l=a.length>>1;i.push(new we(a.slice(0,l)),new we(a.slice(l)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof we))return super.replace(e,t,i);[e,t]=Bi(this,e,t);let s=gs(this.text,gs(i.text,ul(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new we(s,r):kt.from(we.split(s,[]),r)}sliceString(e,t=this.length,i=` +`){[e,t]=Bi(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=a.slice(Math.max(0,e-r),t-r)),r=l+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new we(i,s)),i=[],s=-1);return s>-1&&t.push(new we(i,s)),t}}class kt extends se{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],a=s+o.length,l=i+o.lines-1;if((t?l:a)>=e)return o.lineInner(e,t,i,s);s=a+1,i=l+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let c=s&((o<=e?1:0)|(l>=t?2:0));o>=e&&l<=t&&!c?i.push(a):a.decompose(e-o,t-o,i,c)}o=l+1}}replace(e,t,i){if([e,t]=Bi(this,e,t),i.lines=r&&t<=a){let l=o.replace(e-r,t-r,i),c=this.lines-o.lines+l.lines;if(l.lines>4&&l.lines>c>>6){let h=this.children.slice();return h[s]=l,new kt(h,this.length-(t-e)+i.length)}return super.replace(r,a,l)}r=a+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` +`){[e,t]=Bi(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=a.sliceString(e-o,t-o,i)),o=l+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof kt))return 0;let i=0,[s,r,o,a]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==a)return i;let l=this.children[s],c=e.children[r];if(l!=c)return i+l.scanIdentical(c,t);i+=l.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new we(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,a=[],l=0,c=-1,h=[];function u(d){let p;if(d.lines>r&&d instanceof kt)for(let m of d.children)u(m);else d.lines>o&&(l>o||!l)?(f(),a.push(d)):d instanceof we&&l&&(p=h[h.length-1])instanceof we&&d.lines+p.lines<=32?(l+=d.lines,c+=d.length+1,h[h.length-1]=new we(p.text.concat(d.text),p.length+1+d.length)):(l+d.lines>s&&f(),l+=d.lines,c+=d.length+1,h.push(d))}function f(){l!=0&&(a.push(h.length==1?h[0]:kt.from(h,c)),c=-1,l=h.length=0)}for(let d of e)u(d);return f(),a.length==1?a[0]:new kt(a,t)}}se.empty=new we([""],0);function Jd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function gs(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(l>i&&(a=a.slice(0,i-s)),s0?1:(e instanceof we?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,a=s instanceof we?s.text.length:s.children.length;if(o==(t>0?a:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(s instanceof we){let l=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=s.children[o+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof we?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Ah{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new pn(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class bh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(se.prototype[Symbol.iterator]=function(){return this.iter()},pn.prototype[Symbol.iterator]=Ah.prototype[Symbol.iterator]=bh.prototype[Symbol.iterator]=function(){return this});class ep{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function Bi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Ze(n,e,t=!0,i=!0){return Gd(n,e,t,i)}function tp(n){return n>=56320&&n<57344}function ip(n){return n>=55296&&n<56320}function Ne(n,e){let t=n.charCodeAt(e);if(!ip(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return tp(i)?(t-55296<<10)+(i-56320)+65536:t}function fa(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Qt(n){return n<65536?1:2}const mo=/\r\n?|\n/;var De=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(De||(De={}));class Zt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=a}else{if(i!=De.Simple&&c>=e&&(i==De.TrackDel&&se||i==De.TrackBefore&&se))return null;if(c>e||c==e&&t<0&&!a)return e==s||t<0?r:r+l;r+=l}s=c}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&a>=e)return st?"cover":!0;s=a}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new Zt(e)}static create(e){return new Zt(e)}}class Re extends Zt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return go(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Oo(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=a,t[s+1]=o;let l=s>>1;for(;i.length0&&Ht(i,t,r.text),r.forward(h),a+=h}let c=e[o++];for(;a>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,a=null;function l(h=!1){if(!h&&!s.length)return;of||u<0||f>t)throw new RangeError(`Invalid change range ${u} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?se.of(d.split(i||mo)):d:se.empty,m=p.length;if(u==f&&m==0)return;uo&&Xe(s,u-o,-1),Xe(s,f-u,m),Ht(r,s,p),o=f}}return c(e),l(!a),a}static empty(e){return new Re(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sa&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Ht(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)a=n.sections[o++],l=n.sections[o++];e(s,c,r,h,u),s=c,r=h}}}function Oo(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Sn(n),a=new Sn(e);for(let l=-1;;){if(o.done&&a.len||a.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&a.ins==-1){let c=Math.min(o.len,a.len);Xe(s,c,-1),o.forward(c),a.forward(c)}else if(a.ins>=0&&(o.ins<0||l==o.i||o.off==0&&(a.len=0&&l=0){let c=0,h=o.len;for(;h;)if(a.ins==-1){let u=Math.min(h,a.len);c+=u,h-=u,a.forward(u)}else if(a.ins==0&&a.lenl||o.ins>=0&&o.len>l)&&(a||i.length>c),r.forward2(l),o.forward(l)}}}}class Sn{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?se.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?se.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Yt{constructor(e,t,i,s){this.from=e,this.to=t,this.flags=i,this.goalColumn=s}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Yt(i,s,this.flags,this.goalColumn)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return A.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return A.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return A.range(e.anchor,e.head)}static create(e,t,i,s){return new Yt(e,t,i,s)}}class A{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:A.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new A(e.ranges.map(t=>Yt.fromJSON(t)),e.main)}static single(e,t=e){return new A([A.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?A.range(l,a):A.range(a,l))}}return new A(e,t)}}function xh(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let da=0;class K{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=da++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new K(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:pa),!!e.static,e.enables)}of(e){return new Os([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Os(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Os(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function pa(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Os{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=da++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,a=this.type==2,l=!1,c=!1,h=[];for(let u of this.dependencies)u=="doc"?l=!0:u=="selection"?c=!0:(((t=e[u.id])!==null&&t!==void 0?t:1)&1)==0&&h.push(e[u.id]);return{create(u){return u.values[o]=i(u),1},update(u,f){if(l&&f.docChanged||c&&(f.docChanged||f.selection)||yo(u,h)){let d=i(u);if(a?!fl(d,u.values[o],s):!s(d,u.values[o]))return u.values[o]=d,1}return 0},reconfigure:(u,f)=>{let d,p=f.config.address[r];if(p!=null){let m=Cs(f,p);if(this.dependencies.every(g=>g instanceof K?f.facet(g)===u.facet(g):g instanceof Te?f.field(g,!1)==u.field(g,!1):!0)||(a?fl(d=i(u),m,s):s(d=i(u),m)))return u.values[o]=m,0}else d=i(u);return u.values[o]=d,1}}}get extension(){return this}}function fl(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[l.id]),s=t.map(l=>l.type),r=i.filter(l=>!(l&1)),o=n[e.id]>>1;function a(l){let c=[];for(let h=0;hi===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Vn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Vn),o=s.facet(Vn),a;return(a=r.find(l=>l.field==this))&&a!=o.find(l=>l.field==this)?(i.values[t]=a.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Vn.of({field:this,create:e})]}get extension(){return this}}const fi={lowest:4,low:3,default:2,high:1,highest:0};function sn(n){return e=>new vh(e,n)}const ri={highest:sn(fi.highest),high:sn(fi.high),default:sn(fi.default),low:sn(fi.low),lowest:sn(fi.lowest)};class vh{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Gi{of(e){return new Ao(this,e)}reconfigure(e){return Gi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Ao{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class Ps{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let f of sp(e,t,o))f instanceof Te?s.push(f):(r[f.facet.id]||(r[f.facet.id]=[])).push(f);let a=Object.create(null),l=[],c=[];for(let f of s)a[f.id]=c.length<<1,c.push(d=>f.slot(d));let h=i?.config.facets;for(let f in r){let d=r[f],p=d[0].facet,m=h&&h[f]||[];if(d.every(g=>g.type==0))if(a[p.id]=l.length<<1|1,pa(m,d))l.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));l.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(a[g.id]=l.length<<1|1,l.push(g.value)):(a[g.id]=c.length<<1,c.push(y=>g.dynamicSlot(y)));a[p.id]=c.length<<1,c.push(g=>np(g,p,d))}}let u=c.map(f=>f(a));return new Ps(e,o,u,a,l,r)}}function sp(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,a){let l=s.get(o);if(l!=null){if(l<=a)return;let c=i[l].indexOf(o);c>-1&&i[l].splice(c,1),o instanceof Ao&&t.delete(o.compartment)}if(s.set(o,a),Array.isArray(o))for(let c of o)r(c,a);else if(o instanceof Ao){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let c=e.get(o.compartment)||o.inner;t.set(o.compartment,c),r(c,a)}else if(o instanceof vh)r(o.inner,o.prec);else if(o instanceof Te)i[a].push(o),o.provides&&r(o.provides,a);else if(o instanceof Os)i[a].push(o),o.facet.extensions&&r(o.facet.extensions,fi.default);else{let c=o.extension;if(!c)throw new Error(`Unrecognized extension value in extension set (${o}).`);if(c==o)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(c,a)}}return r(n,fi.default),i.reduce((o,a)=>o.concat(a))}function mn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Cs(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const wh=K.define(),bo=K.define({combine:n=>n.some(e=>e),static:!0}),kh=K.define({combine:n=>n.length?n[0]:void 0,static:!0}),Qh=K.define(),Ph=K.define(),Ch=K.define(),Th=K.define({combine:n=>n.length?n[0]:!1});class Wt{constructor(e,t){this.type=e,this.value=t}static define(){return new rp}}class rp{of(e){return new Wt(this,e)}}class op{constructor(e){this.map=e}of(e){return new z(this,e)}}class z{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new z(this.type,t)}is(e){return this.type==e}static define(e={}){return new op(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}z.reconfigure=z.define();z.appendConfig=z.define();class Pe{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&xh(i,t.newLength),r.some(a=>a.type==Pe.time)||(this.annotations=r.concat(Pe.time.of(Date.now())))}static create(e,t,i,s,r,o){return new Pe(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Pe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Pe.time=Wt.define();Pe.userEvent=Wt.define();Pe.addToHistory=Wt.define();Pe.remote=Wt.define();function ap(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof Pe?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof Pe?n=r[0]:n=$h(e,Zi(r),!1)}return n}function cp(n){let e=n.startState,t=e.facet(Ch),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=Rh(i,So(e,r,n.changes.newLength),!0))}return i==n?n:Pe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const hp=[];function Zi(n){return n==null?hp:Array.isArray(n)?n:[n]}var ye=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(ye||(ye={}));const up=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let xo;try{xo=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function fp(n){if(xo)return xo.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||up.test(t)))return!0}return!1}function dp(n){return e=>{if(!/\S/.test(e))return ye.Space;if(fp(e))return ye.Word;for(let t=0;t-1)return ye.Word;return ye.Other}}class _{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let a=0;as.set(c,l)),t=null),s.set(a.value.compartment,a.value.extension)):a.is(z.reconfigure)?(t=null,i=a.value):a.is(z.appendConfig)&&(t=null,i=Zi(i).concat(a.value));let r;t?r=e.startState.values.slice():(t=Ps.resolve(i,s,this),r=new _(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,c)=>c.reconfigure(l,this),null).values);let o=e.startState.facet(bo)?e.newSelection:e.newSelection.asSingle();new _(t,e.newDoc,o,r,(a,l)=>l.update(a,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:A.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=Zi(i.effects);for(let a=1;ao.spec.fromJSON(a,l)))}}return _.create({doc:e.doc,selection:A.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=Ps.resolve(e.extensions||[],new Map),i=e.doc instanceof se?e.doc:se.of((e.doc||"").split(t.staticFacet(_.lineSeparator)||mo)),s=e.selection?e.selection instanceof A?e.selection:A.single(e.selection.anchor,e.selection.head):A.single(0);return xh(s,i.length),t.staticFacet(bo)||(s=s.asSingle()),new _(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(_.tabSize)}get lineBreak(){return this.facet(_.lineSeparator)||` +`}get readOnly(){return this.facet(Th)}phrase(e,...t){for(let i of this.facet(_.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(wh))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return dp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,a=e-i;for(;o>0;){let l=Ze(t,o,!1);if(r(t.slice(l,o))!=ye.Word)break;o=l}for(;an.length?n[0]:4});_.lineSeparator=kh;_.readOnly=Th;_.phrases=K.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});_.languageData=wh;_.changeFilter=Qh;_.transactionFilter=Ph;_.transactionExtender=Ch;Gi.reconfigure=z.define();function yt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],a=i[r];if(a===void 0)i[r]=o;else if(!(a===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](a,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class Jt{eq(e){return this==e}range(e,t=e){return vo.create(e,t,this)}}Jt.prototype.startSide=Jt.prototype.endSide=0;Jt.prototype.point=!1;Jt.prototype.mapMode=De.TrackDel;function ma(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let vo=class Kh{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Kh(e,t,i)}};function wo(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class ga{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,a=r.length;;){if(o==a)return o;let l=o+a>>1,c=r[l]-e||(i?this.value[l].endSide:this.value[l].startSide)-t;if(l==o)return c>=0?o:a;c>=0?a=l:o=l+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||f==d&&c.startSide>0&&c.endSide<=0)continue;(d-f||c.endSide-c.startSide)<0||(o<0&&(o=f),c.point&&(a=Math.max(a,d-f)),i.push(c),s.push(f-o),r.push(d-o))}return{mapped:i.length?new ga(s,r,i,a):null,pos:o}}}class N{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new N(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(wo)),this.isEmpty)return t.length?N.of(t):this;let a=new Zh(this,null,-1).goto(0),l=0,c=[],h=new Bt;for(;a.value||l=0){let u=t[l++];h.addInner(u.from,u.to,u.value)||c.push(u)}else a.rangeIndex==1&&a.chunkIndexthis.chunkEnd(a.chunkIndex)||ra.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return xn.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return xn.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),a=t.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),l=dl(o,a,i),c=new rn(o,l,r),h=new rn(a,l,r);i.iterGaps((u,f,d)=>pl(c,u,h,f,d,s)),i.empty&&i.length==0&&pl(c,0,h,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let a=dl(r,o),l=new rn(r,a,0).goto(i),c=new rn(o,a,0).goto(i);for(;;){if(l.to!=c.to||!ko(l.active,c.active)||l.point&&(!c.point||!ma(l.point,c.point)))return!1;if(l.to>s)return!0;l.next(),c.next()}}static spans(e,t,i,s,r=-1){let o=new rn(e,null,r).goto(t),a=t,l=o.openStart;for(;;){let c=Math.min(o.to,i);if(o.point){let h=o.activeForPoint(o.to),u=o.pointFroma&&(s.span(a,c,o.active,l),l=o.openEnd(c));if(o.to>i)return l+(o.point&&o.to>i?1:0);a=o.to,o.next()}}static of(e,t=!1){let i=new Bt;for(let s of e instanceof vo?[e]:t?pp(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return N.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=N.empty;s=s.nextLayer)t=new N(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}}N.empty=new N([],[],null,-1);function pp(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(wo);e=i}return n}N.empty.nextLayer=N.empty;class Bt{finishChunk(e){this.chunks.push(new ga(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Bt)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(N.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=N.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function dl(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Zh(o,t,i,r));return s.length==1?s[0]:new xn(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Rr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Rr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Rr(this.heap,0)}}}function Rr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}class rn{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=xn.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){jn(this.active,e),jn(this.activeTo,e),jn(this.activeRank,e),this.minActive=ml(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Yn(this.active,t,i),Yn(this.activeTo,t,s),Yn(this.activeRank,t,r),e&&Yn(e,t,this.cursor.from),this.minActive=ml(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&jn(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function pl(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,a=i,l=i-e,c=!!r.boundChange;for(let h=!1;;){let u=n.to+l-t.to,f=u||n.endSide-t.endSide,d=f<0?n.to+l:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&ma(n.point,t.point)&&ko(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(a,p,n.point,t.point),h=!1):(h&&r.boundChange(a),p>a&&!ko(n.active,t.active)&&r.compareRange(a,p,n.active,t.active),c&&po)break;a=d,f<=0&&n.next(),f>=0&&t.next()}}function ko(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function ml(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Ze(n,s)}return i===!0?-1:n.length}const Po="ͼ",gl=typeof Symbol>"u"?"__"+Po:Symbol.for(Po),Co=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Ol=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class ei{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,a,l,c){let h=[],u=/^@(\w+)\b/.exec(o[0]),f=u&&u[1]=="keyframes";if(u&&a==null)return l.push(o[0]+";");for(let d in a){let p=a[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,l);else if(p&&typeof p=="object"){if(!u)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&l.push((i&&!u&&!c?o.map(i):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Ol[gl]||1;return Ol[gl]=e+1,Po+e.toString(36)}static mount(e,t,i){let s=e[Co],r=i&&i.nonce;s?r&&s.setNonce(r):s=new mp(e,r),s.mount(Array.isArray(t)?t:[t],e)}}let yl=new Map;class mp{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=yl.get(i);if(r)return e[Co]=r;this.sheet=new s.CSSStyleSheet,yl.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Co]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(l,1),r--,l=-1),l==-1){if(this.modules.splice(r++,0,a),i)for(let c=0;c",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},Al=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),gp=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),Op=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),bl=typeof navigator<"u"&&/Mac/.test(navigator.platform),yp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Ap=Al&&(bl||+Al[1]<57)||Op&&bl;for(var Fe=0;Fe<10;Fe++)ti[48+Fe]=ti[96+Fe]=String(Fe);for(var Fe=1;Fe<=24;Fe++)ti[Fe+111]="F"+Fe;for(var Fe=65;Fe<=90;Fe++)ti[Fe]=String.fromCharCode(Fe+32),vn[Fe]=String.fromCharCode(Fe);for(var $r in ti)vn.hasOwnProperty($r)||(vn[$r]=ti[$r]);function bp(n){var e=Ap&&(n.ctrlKey||n.altKey||n.metaKey)||(gp||yp)&&n.shiftKey&&n.key&&n.key.length==1,t=!e&&n.key||(n.shiftKey?vn:ti)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function he(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;e2);var R={mac:vl||/Mac/.test(We.platform),windows:/Win/.test(We.platform),linux:/Linux|X11/.test(We.platform),ie:hr,ie_version:Eh?To.documentMode||6:$o?+$o[1]:Ro?+Ro[1]:0,gecko:Sl,gecko_version:Sl?+(/Firefox\/(\d+)/.exec(We.userAgent)||[0,0])[1]:0,chrome:!!Kr,chrome_version:Kr?+Kr[1]:0,ios:vl,android:/Android\b/.test(We.userAgent),webkit:xl,webkit_version:xl?+(/\bAppleWebKit\/(\d+)/.exec(We.userAgent)||[0,0])[1]:0,safari:Ko,safari_version:Ko?+(/\bVersion\/(\d+(\.\d+)?)/.exec(We.userAgent)||[0,0])[1]:0,tabSize:To.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Oa(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const Ts=Object.create(null);function ya(n,e,t){if(n==e)return!0;n||(n=Ts),e||(e=Ts);let i=Object.keys(n),s=Object.keys(e);if(i.length-0!=s.length-0)return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function Sp(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function wl(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function xp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Ai(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=Uh(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Ai(e,i,s,t,e.widget||null,!0)}static line(e){return new Fn(e)}static set(e,t=!1){return N.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}B.none=N.empty;class Un extends B{constructor(e){let{start:t,end:i}=Uh(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Oa(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Ts}eq(e){return this==e||e instanceof Un&&this.tagName==e.tagName&&ya(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Un.prototype.point=!1;class Fn extends B{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Fn&&this.spec.class==e.spec.class&&ya(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Fn.prototype.mapMode=De.TrackBefore;Fn.prototype.point=!0;class Ai extends B{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?De.TrackBefore:De.TrackAfter:De.TrackDel}get type(){return this.startSide!=this.endSide?Le.WidgetRange:this.startSide<=0?Le.WidgetBefore:Le.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Ai&&vp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Ai.prototype.point=!0;function Uh(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function vp(n,e){return n==e||!!(n&&e&&n.compare(e))}function Mi(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}class wn extends Jt{constructor(e,t,i){super(),this.tagName=e,this.attributes=t,this.rank=i}eq(e){return e==this||e instanceof wn&&this.tagName==e.tagName&&ya(this.attributes,e.attributes)}static create(e){return new wn(e.tagName,e.attributes||Ts,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return N.of(e,t)}}wn.prototype.startSide=wn.prototype.endSide=-1;function kn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Zo(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function gn(n,e){if(!e.anchorNode)return!1;try{return Zo(n,e.anchorNode)}catch{return!1}}function ys(n){return n.nodeType==3?Qn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function On(n,e,t,i){return t?kl(n,e,t,i,-1)||kl(n,e,t,i,1):!1}function ii(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Rs(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function kl(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:It(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=ii(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?It(n):0}else return!1}}function It(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function $s(n,e){let{left:t,right:i}=n;if(t==i)return n;let s=e?t:i;return{left:s,right:s,top:n.top,bottom:n.bottom}}function wp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function Fh(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function kp(n,e,t,i,s,r,o,a){let l=n.ownerDocument,c=l.defaultView||window;for(let h=n,u=!1;h&&!u;)if(h.nodeType==1){let f,d=h==l.body,p=1,m=1;if(d)f=wp(c);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(u=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let b=h.getBoundingClientRect();({scaleX:p,scaleY:m}=Fh(h,b)),f={left:b.left,right:b.left+h.clientWidth*p,top:b.top,bottom:b.top+h.clientHeight*m}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>f.bottom+y&&(y=e.bottom-f.bottom+o)):e.bottom>f.bottom-o&&(y=e.bottom-f.bottom+o,t<0&&e.top-y0&&e.right>f.right+g&&(g=e.right-f.right+r)):e.right>f.right-r&&(g=e.right-f.right+r,t<0&&e.leftf.bottom||e.leftf.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),h=h.assignedSlot||h.parentNode}else if(h.nodeType==11)h=h.host;else break}function Dh(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}class Qp{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?It(t):0),i,Math.min(e.focusOffset,i?It(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}function Lh(n){let e=[];for(let t=n;t;t=t.nodeType==11?t.host:t.parentNode)t.nodeType==1&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function Xh(n,e=!0){for(let{node:t,left:i,top:s}of n)e&&t.scrollTop!=s&&(t.scrollTop=s),t.scrollLeft!=i&&(t.scrollLeft=i)}let ui=null;R.safari&&R.safari_version>=26&&(ui=!1);function Bh(n){if(n.setActive)return n.setActive();if(ui)return n.focus(ui);let e=Lh(n);n.focus(ui==null?{get preventScroll(){return ui={preventScroll:!0},!0}}:void 0),ui||(ui=!1,Xh(e))}let Ql;function Qn(n,e,t=e){let i=Ql||(Ql=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function Ei(n,e,t,i){let s={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:s.altKey,ctrlKey:s.ctrlKey,shiftKey:s.shiftKey,metaKey:s.metaKey}=i);let r=new KeyboardEvent("keydown",s);r.synthetic=!0,n.dispatchEvent(r);let o=new KeyboardEvent("keyup",s);return o.synthetic=!0,n.dispatchEvent(o),r.defaultPrevented||o.defaultPrevented}function Pp(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function Cp(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,It(t));;)if(i){if(t.nodeType!=1)return!1;let s=t.childNodes[i-1];s.contentEditable=="false"?i--:(t=s,i=It(t))}else{if(t==n)return!0;i=ii(t),t=t.parentNode}}function Ih(n){return n instanceof Window?n.pageYOffset>Math.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function qh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=It(t)}else if(t.parentNode&&!Rs(t))i=ii(t),t=t.parentNode;else return null}}function Wh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(a.level==i)return o;(r<0||(s!=0?s<0?a.fromt:e[r].level>a.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}}function jh(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(St[m+1]==-d){let g=St[m+2],y=g&2?s:g&4?g&1?r:s:0;y&&(ue[u]=ue[St[m]]=y),a=m;break}}else{if(St.length==189)break;St[a++]=u,St[a++]=f,St[a++]=l}else if((p=ue[u])==2||p==1){let m=p==s;l=m?0:1;for(let g=a-3;g>=0;g-=3){let y=St[g+2];if(y&2)break;if(m)St[g+2]|=2;else{if(y&4)break;St[g+2]|=4}}}}}function Mp(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,a=sl;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),ue[--p]=d;l=h}else r=c,l++}}}function Eo(n,e,t,i,s,r,o){let a=i%2?2:1;if(i%2==s%2)for(let l=e,c=0;ll&&o.push(new Ct(l,m.from,d));let g=m.direction==bi!=!(d%2);Uo(n,g?i+1:i,s,m.inner,m.from,m.to,o),l=m.to}p=m.to}else{if(p==t||(h?ue[p]!=a:ue[p]==a))break;p++}f?Eo(n,l,p,i+1,s,f,o):le;){let h=!0,u=!1;if(!c||l>r[c-1].to){let m=ue[l-1];m!=a&&(h=!1,u=m==16)}let f=!h&&a==1?[]:null,d=h?i:i+1,p=l;e:for(;;)if(c&&p==r[c-1].to){if(u)break e;let m=r[--c];if(!h)for(let g=m.from,y=c;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(ue[g-1]==a)break e;break}}if(f)f.push(m);else{m.toue.length;)ue[ue.length]=256;let i=[],s=e==bi?0:1;return Uo(n,s,s,t,0,n.length,i),i}function Yh(n){return[new Ct(0,n,0)]}let Nh="";function Up(n,e,t,i,s){var r;let o=i.head-n.from,a=Ct.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),l=e[a],c=l.side(s,t);if(o==c){let f=a+=s?1:-1;if(f<0||f>=e.length)return null;l=e[a=f],o=l.side(!s,t),c=l.side(s,t)}let h=Ze(n.text,o,l.forward(s,t));(hl.to)&&(h=c),Nh=n.text.slice(Math.min(o,h),Math.max(o,h));let u=a==(s?e.length-1:0)?null:e[a+(s?1:-1)];return u&&h==c&&u.level+(s?0:1)n.some(e=>e)}),nu=K.define({combine:n=>n.some(e=>e)}),su=K.define();class Ui{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new Ui(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Ui(A.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Nn=z.define({map:(n,e)=>n.map(e)}),ru=z.define();function ze(n,e,t){let i=n.facet(Jh);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const Dt=K.define({combine:n=>n.length?n[0]:!0});let Dp=0;const Ti=K.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let l=[];return o&&l.push(ur.of(c=>{let h=c.plugin(a);return h?o(h):B.none})),r&&l.push(r(a)),l})}static fromClass(e,t){return xe.define((i,s)=>new e(i,s),t)}}class Zr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(ze(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){ze(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){ze(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const ou=K.define(),xa=K.define(),ur=K.define(),au=K.define(),va=K.define(),Dn=K.define(),lu=K.define();function Pl(n,e){let t=n.state.facet(lu);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return N.spans(i,e.from,e.to,{point(){},span(r,o,a,l){let c=r-e.from,h=o-e.from,u=s;for(let f=a.length-1;f>=0;f--,l--){let d=a[f].spec.bidiIsolate,p;if(d==null&&(d=Fp(e.text,c,h)),l>0&&u.length&&(p=u[u.length-1]).to==c&&p.direction==d)p.to=h,u=p.inner;else{let m={from:c,to:h,direction:d,inner:[]};u.push(m),u=m.inner}}}}),s}const cu=K.define();function wa(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(cu)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const hn=K.define();class ct{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new ct(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new ct(r,o,a,l))),this.changedRanges=s}static create(e,t,i){return new Ks(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const Lp=[];class Se{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Lp}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Sp(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,i){return null}domPosFor(e,t){let i=ii(this.dom),s=this.length?e>0:t>0;return new pt(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof dr)return e;return null}static get(e){return e.cmTile}}class fr extends Se{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let a of this.children){if(a.sync(e),o+=a.length+a.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=a.dom&&(r.written=!0),a.dom.parentNode==t)for(;s&&s!=a.dom;)s=Cl(s);else t.insertBefore(a.dom,s);i=a.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=Cl(s);this.length=o}}function Cl(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class dr extends fr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Se.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof Lt)t.push(s),i=o,s=0;else{let a=r+o.length,l=e(o,r);if(l!==void 0)return l;r=a+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((a,l)=>{let c=l+a.length;if(e>=l&&e<=c){if(a.isWidget()&&t>=-1&&t<=1){if(a.flags&32)return!0;a.flags&16&&(i=void 0)}(le||e==l&&(t>1?a.length:a.covers(-1)))&&(!r||!a.isWidget()&&r.isWidget())&&(r=a,o=e-l)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}}class Lt extends fr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new Lt(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class Ii extends fr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new Ii(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,a=-1;function l(h,u){for(let f=0,d=0;f=u&&(p.isComposite()?l(p,u-d):(!o||o.isHidden&&(t>0&&!(o.flags&32)||i&&Bp(o,p)))&&(m>u||p.flags&32&&t<=1)?(o=p,a=u-d):(d=-1)&&(s=p,r=u-d)),d=m}}l(this,e);let c=(t<0?s:o)||s||o;return c?{tile:c,offset:c==s?r:a}:null}coordsIn(e,t,i){let s=this.resolveInline(e,t,!0);return s?s.tile.coordsIn(Math.max(0,s.offset),t,i):Xp(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:s,offset:r}=i;if(this.dom.contains(s.dom))return s.isText()?new pt(s.dom,Math.min(s.dom.nodeValue.length,r)):s.domPosFor(r,s.flags&16?1:s.flags&32?-1:t);let o=i.tile.parent,a=!1;for(let l of o.children){if(a)return new pt(l.dom,0);l==i.tile&&(a=!0)}}return new pt(this.dom,0)}}function Xp(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=ys(e);return t[t.length-1]||null}function Bp(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.tops&&(e=s);let r=e,o=e,a=0;e==0&&t<0||e==s&&t>=0?R.chrome||R.gecko||(e?(r--,a=1):o=0)?0:l.length-1];return R.safari&&!a&&c.width==0&&(c=Array.prototype.find.call(l,h=>h.width)||c),i==null?c:$s(c,(a?a>0:t<0)==i)}static of(e,t){let i=new pi(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class Si extends Se{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return $s(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let a=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=a?r.length-1:0;o=r[l],!(e>0?l==0:l==r.length-1||o.top0==i)}}class Ip{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:s,index:r,beforeBreak:o,parents:a}=this;for(;e||t>0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!a.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=a.pop(),r++}else{let l=s.children[r],c=l.breakAfter;(t>0?l.length<=e:l.length=0;a--){let l=t.marks[a],c=s.lastChild;if(c instanceof Ge&&c.mark.eq(l.mark))c.dom!=l.dom&&c.setDOM(Mr(l.dom)),s=c;else{if(this.cache.reused.get(l)){let u=Se.get(l.dom);u&&u.setDOM(Mr(l.dom))}let h=Ge.of(l.mark,l.dom);s.append(h),s=h}this.cache.reused.set(l,2)}let r=Se.get(e.text);r&&this.cache.reused.set(r,2);let o=new pi(e.text,e.text.nodeValue);o.flags|=8,this.pos=e.range.toB,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=hu);let s=Ii.start(e,t||((i=this.cache.find(Ii))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],a;if(t>0&&(a=s.lastChild)&&a instanceof Ge&&a.mark.eq(o))s=a,t--;else{let l=Ge.of(o,(i=this.cache.find(Ge,c=>c.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(l),s=l,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Tl(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(R.ios&&Tl(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Er,0,32)||new Si(Er.toDOM(),0,Er,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,i=new qp(e.from,e.to,e.value,t),s=this.wrappers.length;for(;s>0&&(this.wrappers[s-1].rank-i.rank||this.wrappers[s-1].to-i.to)<0;)s--;this.wrappers.splice(s,0,i)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Zs,void 0,1);return i&&(i.flags=t),i||new Zs(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class zp{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let a=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,a)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Ms=[Si,Ii,pi,Ge,Zs,Lt,dr];for(let n=0;n[]),this.index=Ms.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let a=0;a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let a=os){let c=l-s;this.preserve(c,!o,!a),s=l,r+=c}if(!a)break;t&&a.fromA<=t.range.fromA&&a.toA>=t.range.toA?(this.forward(a.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(l-a);else{let c=l>0||a{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Ge&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Ge&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=-1,o=N.spans(this.decorations,e,t,{point:(a,l,c,h,u,f)=>{if(c instanceof Ai){if(this.disallowBlockEffectsFor[f]){if(c.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(a).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=h.length,u>h.length)s.continueWidget(l-a);else{let d=c.widget||(c.block?qi.block:qi.inline),p=Yp(c),m=this.cache.findWidget(d,l-a,p)||Si.of(d,this.view,l-a,p);c.block?(c.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(m)):(s.ensureLine(i),s.addInlineWidget(m,h,u))}i=null}else i=Np(i,c);l>a&&this.text.skip(l-a)},span:(a,l,c,h)=>{for(let u=a;u-1&&(this.openWidget=o>r),this.openWidget||s.addLineStartIfNotCovered(i),this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=Se.get(s);if(s==this.view.contentDOM)break;r instanceof Ge?t.push(r):r?.isLine()?i=r:r instanceof Lt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new Ii(s,hu):i||t.push(Ge.of(new Un({tagName:s.nodeName.toLowerCase(),attributes:xp(s)}),s)))}return{line:i,marks:t}}}function Tl(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Yp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const hu={class:"cm-line"};function Np(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&Oa(t,n),i&&(n.class+=" "+i)),n}function Hp(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Ge&&e.push(i.mark)}return e}function Mr(n){let e=Se.get(n);return e&&e.setDOM(n.cloneNode()),n}class qi extends Ut{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}qi.inline=new qi("span");qi.block=new qi("div");const Er=new class extends Ut{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Rl{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=B.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new dr(e,e.contentDOM),this.updateInner([new ct(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:u})=>uthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!rm(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?_p(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:h,to:u}=this.hasComposition;i=new ct(h,u,e.changes.mapPos(h,-1),e.changes.mapPos(u,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(R.ie||R.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,a=this.blockWrappers;this.updateDeco();let l=tm(o,this.decorations,e.changes);l.length&&(i=ct.extendWithRanges(i,l));let c=nm(a,this.blockWrappers,e.changes);return c.length&&(i=ct.extendWithRanges(i,c)),r&&!i.some(h=>h.fromA<=r.range.fromA&&h.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,a=new jp(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Se.get(t.text)&&a.cache.reused.set(Se.get(t.text),2),this.tile=a.run(e,t),Do(o,a.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=R.chrome||R.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&gn(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let a=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,c,h;if(l.empty?h=c=this.inlineDOMNearPos(l.anchor,l.assoc||1):(h=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),c=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),R.gecko&&l.empty&&!this.hasComposition&&Gp(c)){let f=document.createTextNode("");this.view.observer.ignore(()=>c.node.insertBefore(f,c.node.childNodes[c.offset]||null)),c=h=new pt(f,0),a=!0}let u=this.view.observer.selectionRange;(a||!u.focusNode||(!On(c.node,c.offset,u.anchorNode,u.anchorOffset)||!On(h.node,h.offset,u.focusNode,u.focusOffset))&&!this.suppressWidgetCursorChange(u,l))&&(this.view.observer.ignore(()=>{R.android&&R.chrome&&i.contains(u.focusNode)&&sm(u.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=kn(this.view.root);if(f)if(l.empty){if(R.gecko){let d=Jp(c.node,c.offset);if(d&&d!=3){let p=(d==1?qh:Wh)(c.node,c.offset);p&&(c=new pt(p.node,p.offset))}}f.collapse(c.node,c.offset),l.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=l.bidiLevel)}else if(f.extend){f.collapse(c.node,c.offset);try{f.extend(h.node,h.offset)}catch{}}else{let d=document.createRange();l.anchor>l.head&&([c,h]=[h,c]),d.setEnd(h.node,h.offset),d.setStart(c.node,c.offset),f.removeAllRanges(),f.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(c,h)),this.impreciseAnchor=c.precise?null:new pt(u.anchorNode,u.anchorOffset),this.impreciseHead=h.precise?null:new pt(u.focusNode,u.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&On(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=kn(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let a=o.posAtStart;if(t.head==a||t.head==a+o.length)return;let l=this.coordsAt(t.head,-1),c=this.coordsAt(t.head,1);if(!l||!c||l.bottom>c.top)return;let h=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let u=e.observer.selectionRange;e.docView.posFromDOM(u.anchorNode,u.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=It(e)==0?0:t==0?-1:1;for(;;){let a=e.parentNode;if(a==i.dom)break;o==0&&a.firstChild!=a.lastChild&&(e==a.firstChild?o=-1:o=1),e=a}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!Se.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,a=s;;o++){let l=i.children[o];if(l.dom==r)return a;a+=l.length+l.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(s,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,a=-1,l=!1;return this.tile.blockTiles((c,h)=>{if(c.isWidget()){if(c.flags&32&&h>=e)return!0;c.flags&16&&(r=!0)}else{let u=h+c.length;if(h<=e&&(i=c,s=e-h,r=u=e&&!o&&(o=c,a=e-h,l=h>e),h>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:l&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(a,t))}coordsAt(e,t,i){let{tile:s,offset:r}=this.tile.resolveBlock(e,t);return s.isWidget()?s.widget instanceof Ur?null:s.coordsInWidget(r,t,!0):s.coordsIn(r,t,i)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let a of r.children){if(a.length>=o){let l=s(a,o);if(l)return l}if(o-=a.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,a=-1,l=this.view.textDirection==fe.LTR,c=0,h=(u,f,d)=>{for(let p=0;ps);p++){let m=u.children[p],g=f+m.length,y=m.dom.getBoundingClientRect(),{height:b}=y;if(d&&!p&&(c+=y.top-d.top),m instanceof Lt)g>i&&h(m,f,y);else if(f>=i&&(c>0&&t.push(-c),t.push(b+c),c=0,o)){let x=m.dom.lastChild,C=x?ys(x):[];if(C.length){let k=C[C.length-1],S=l?k.right-y.left:y.right-k.left;S>a&&(a=S,this.minWidth=r,this.minWidthFrom=f,this.minWidthTo=g)}}d&&p==u.children.length-1&&(c+=d.bottom-y.bottom),f=g+m.breakAfter}};return h(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?fe.RTL:fe.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let a=0,l;for(let c of o.children){if(!c.isText()||/[^ -~]/.test(c.text))return;let h=ys(c.dom);if(h.length!=1)return;a+=h[0].width,l=h[0].height}if(a)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:a/o.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=ys(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let a=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(B.replace({widget:new Ur(a),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return B.set(e)}updateDeco(){let e=1,t=this.view.state.facet(ur).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(va).map((r,o)=>{let a=typeof r=="function";return a&&(i=!0),a?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(N.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(su))try{if(c(this.view,e.range,e))return!0}catch(h){ze(this.view.state,h,"scroll handler")}let{range:t}=e,i=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=wa(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:a,offsetHeight:l}=this.view.scrollDOM;if(kp(this.view.scrollDOM,o,t.head1&&(i.top>window.visualViewport.offsetTop+window.visualViewport.height||i.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Do(this.tile)}}function Do(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Do(i,e)}}function Gp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function uu(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=qh(t.focusNode,t.focusOffset),s=Wh(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let a=Se.get(s.node);if(!a||a.isText()&&a.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let l=Se.get(i.node);!l||l.isText()&&l.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function _p(n,e,t){let i=uu(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,a=s.nodeValue;if(/[\n\r]/.test(a)||n.state.doc.sliceString(i.from,i.to)!=a)return null;let l=e.invertedDesc;return{range:new ct(l.mapPos(r),l.mapPos(o),r,o),text:s}}function Jp(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class Ur extends Ut{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function om(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return A.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,a=r;t<0?o=Ze(s.text,r,!1):a=Ze(s.text,r);let l=i(s.text.slice(o,a));for(;o>0;){let c=Ze(s.text,o,!1);if(i(s.text.slice(c,o))!=l)break;o=c}for(;an.defaultLineHeight*1.5){let a=n.viewState.heightOracle.textHeight,l=Math.floor((s-t.top-(n.defaultLineHeight-a)*.5)/a);r+=l*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Qo(o,r,n.state.tabSize)}function Lo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==Le.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function lm(n,e,t,i){let s=Lo(n,e.head,e.assoc||-1),r=!i||s.type!=Le.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),a=n.textDirectionAt(s.from),l=n.posAtCoords({x:t==(a==fe.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(l!=null)return A.cursor(l,t?-1:1)}return A.cursor(t?s.to:s.from,t?-1:1)}function $l(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let a=e,l=null;;){let c=Up(s,r,o,a,t),h=Nh;if(!c){if(s.number==(t?n.state.doc.lines:1))return a;h=` +`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),c=n.visualLineSide(s,!t)}if(l){if(!l(h))return a}else{if(!i)return c;l=i(h)}a=c}}function cm(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==ye.Space&&(s=o),s==o}}function hm(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return A.cursor(s,e.assoc);let o=e.goalColumn,a,l=n.contentDOM.getBoundingClientRect(),c=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),h=n.documentTop;if(c)o==null&&(o=c.left-l.left),a=r<0?c.top:c.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(l.right-l.left,n.defaultCharacterWidth*(s-p.from))),a=(r<0?p.top:p.bottom)+h}let u=l.left+o,f=n.viewState.heightOracle.textHeight>>1,d=i??f;for(let p=0;;p+=f){let m=a+(d+p)*r,g=Xo(n,{x:u,y:m},!1,r);if(t?m>l.bottom:ma:b{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:A.cursor(i,in.viewState.docHeight)return new Pt(n.state.doc.length,-1);if(c=n.elementAtHeight(l),i==null)break;if(c.type==Le.Text){if(i<0?c.ton.viewport.to)break;let f=n.docView.coordsAt(i<0?c.from:c.to,i>0?-1:1);if(f&&(i<0?f.top<=l+r:f.bottom>=l+r))break}let u=n.viewState.heightOracle.textHeight/2;l=i>0?c.bottom+u:c.top-u}if(n.viewport.from>=c.to||n.viewport.to<=c.from){if(t)return null;if(c.type==Le.Text){let u=am(n,s,c,o,a);return new Pt(u,u==c.from?1:-1)}}if(c.type!=Le.Text)return l<(c.top+c.bottom)/2?new Pt(c.from,1):new Pt(c.to,-1);let h=n.docView.lineAt(c.from,2);return(!h||h.length!=c.length)&&(h=n.docView.lineAt(c.from,-2)),new um(n,o,a,n.textDirectionAt(c.from)).scanTile(h,c.from)}class um{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(o.has(m)){for(let b=1;b=r&&(x-=p),!o.has(x)){m=x;break t}}break e}o.add(m);let g=t(m),y=0;if(g)for(let b=0;b1))if(x.bottomthis.y)(!c||c.top>x.top)&&(c=x),y=-1;else{let C=x.left>this.x?this.x-x.left:x.right(p+p+m)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(c&&c.top<(p+m+m)/3)return this.y=c.top+1,this.scan(e,t,!0)}let d=(a?this.dirAt(e[h],1):this.baseDir)==fe.LTR;return{i:h,after:this.x>(f.left+f.right)/2==d}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,a=i[r+1]-t;return Qn(e.dom,o,a).getClientRects()});return s.after?new Pt(i[s.i+1],-1):new Pt(i[s.i],1)}scanTile(e,t){if(!e.length)return new Pt(t,1);if(e.children.length==1){let a=e.children[0];if(a.isText())return this.scanText(a,t);if(a.isComposite())return this.scanTile(a,t)}let i=[t];for(let a=0,l=t;a{let l=e.children[a];return l.flags&48?null:(l.dom.nodeType==1?l.dom:Qn(l.dom,0,l.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new Pt(i[s.i+1],-1):new Pt(o,1)}}const ki="￿";class fm{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(_.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ki}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=Se.get(s),a=s.nextSibling;if(a==t){o?.breakAfter&&!a&&i!=this.view.contentDOM&&this.lineBreak();break}let l=Se.get(a);(o&&l?o.breakAfter:(o?o.breakAfter:Rs(s))||Rs(a)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!pm(a,t)&&this.lineBreak(),s=a}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,a;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(a=s.exec(t))&&(r=a.index,o=a[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=o-1);i=r+o}}readNode(e){let t=Se.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(dm(e,i.node,i.offset)?t:0))}}function dm(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,a=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=du(e.docView.tile,t,i,0))){let l=r||o?[]:Om(e),c=new fm(l,e);c.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=c.text,this.newSel=ym(l,this.bounds.from)}else{let l=e.observer.selectionRange,c=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Zo(e.contentDOM,l.focusNode)?a.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Zo(e.contentDOM,l.anchorNode)?a.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),u=e.viewport;if((R.ios||R.chrome)&&c!=h&&Math.min(c,h)<=a.main.from&&Math.max(c,h)>=a.main.to&&(u.from>0||u.to-1&&a.ranges.length>1)this.newSel=a.replaceRange(A.range(h,c));else if(e.lineWrapping&&h==c&&!(a.main.empty&&a.main.head==c)&&e.inputState.lastTouchTime>Date.now()-100){let f=e.coordsAtPos(c,-1),d=0;f&&(d=e.inputState.lastTouchY<=f.bottom?-1:1),this.newSel=A.create([A.cursor(c,d)])}else this.newSel=A.single(h,c)}}}function du(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,a=-1;for(let l=0,c=i,h=i;lt)return du(u,e,t,c);if(f>=e&&s==-1&&(s=l,r=c),c>t&&u.dom.parentNode==n.dom){o=l,a=h;break}h=f,c=f+u.breakAfter}return{from:r,to:a<0?i+n.length:a,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function pu(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:a,to:l}=e.bounds,c=r.from,h=null;(o===8||R.android&&e.text.length=a&&r.to<=l&&(e.typeOver||u!=e.text)&&u.slice(0,r.from-a)==e.text.slice(0,r.from-a)&&u.slice(r.to-a)==e.text.slice(f=e.text.length-(u.length-(r.to-a)))?t={from:r.from,to:r.to,insert:se.of(e.text.slice(r.from-a,f).split(ki))}:(d=mu(u,e.text,c-a,h))&&(R.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==ki+ki&&d.toB--,t={from:a+d.from,to:a+d.toA,insert:se.of(e.text.slice(d.from,d.toB).split(ki))})}else i&&(!n.hasFocus&&s.facet(Dt)||Es(i,r))&&(i=null);if(!t&&!i)return!1;if((R.mac||R.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:se.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:R.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:se.of([" "])}),t)return ka(n,t,i,o);if(i&&!Es(i,r)){let a=!1,l="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(a=!0),l=n.inputState.lastSelectionOrigin,l=="select.pointer"&&(i=fu(s.facet(Dn).map(c=>c(n)),i))),n.dispatch({selection:i,scrollIntoView:a,userEvent:l}),!0}else return!1}function ka(n,e,t,i=-1){if(R.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(R.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Ei(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&Ei(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&Ei(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,a=()=>o||(o=gm(n,e,t));return n.state.facet(eu).some(l=>l(n,e.from,e.to,r,a))||n.dispatch(a()),!0}function gm(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let l=e.fromu(n)),c,l);e.from==h&&(o=h)}if(o>-1)i={changes:e,selection:A.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let l=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(l+e.insert.sliceString(0,void 0,n.state.lineBreak)+c))}else{let l=s.changes(e),c=t&&t.main.to<=l.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let h=n.state.sliceDoc(e.from,e.to),u,f=t&&uu(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);u={from:f.from,to:f.to-p}}else u=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:l,range:c||p.map(l)};let m=p.to-d,g=m-h.length;if(n.state.sliceDoc(g,m)!=h||m>=u.from&&g<=u.to)return{range:p};let y=s.changes({from:g,to:m,insert:e.insert}),b=p.to-r.to;return{changes:y,range:c?A.range(Math.max(0,c.anchor+b),Math.max(0,c.head+b)):p.map(y)}})}else i={changes:l,selection:c&&s.selection.replaceRange(c)}}let a="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,a+=".compose",n.inputState.compositionFirstChange&&(a+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:a,scrollIntoView:!0})}function mu(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&a>0&&n.charCodeAt(o-1)==e.charCodeAt(a-1);)o--,a--;if(i=="end"){let l=Math.max(0,r-Math.min(o,a));t-=o+l-r}if(o=o?r-t:0;r-=l,a=r+(a-o),o=r}else if(a=a?r-t:0;r-=l,o=r+(o-a),a=r}return{from:r,toA:o,toB:a}}function Om(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new Kl(t,i)),(s!=t||r!=i)&&e.push(new Kl(s,r))),e}function ym(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?A.single(t+e,i+e):null}function Es(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class Am{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,R.safari&&e.contentDOM.addEventListener("input",()=>null),R.gecko&&Em(e.contentDOM.ownerDocument)}handleEvent(e){!Cm(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Sm(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,a=i[r];a&&o!=!a.handlers.length&&(s.removeEventListener(r,this.handleEvent),a=null),a||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Ou.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),R.android&&R.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(R.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(gu.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||xm.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};return t.shiftKey&&R.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&bm(this.view.win)&&(t.shiftKey=!1),this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t},setTimeout(()=>this.flushIOSKey(),250),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:R.safari&&!R.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function bm(n){return n.visualViewport?n.visualViewport.height*n.visualViewport.scale/n.document.documentElement.clientHeight<.85:!1}function Zl(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){ze(t.state,s)}}}function Sm(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let a in r){let l=r[a];l&&t(a).handlers.push(Zl(i.value,l))}if(o)for(let a in o){let l=o[a];l&&t(a).observers.push(Zl(i.value,l))}}for(let i in Ot)t(i).handlers.push(Ot[i]);for(let i in je)t(i).observers.push(je[i]);return e}const gu=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],xm="dthko",Ou=[16,17,18,20,91,92,224,225],Hn=6;function Gn(n){return Math.max(0,n)*.7+8}function vm(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class wm{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Dh(e.contentDOM),this.atoms=e.state.facet(Dn).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(_.allowMultipleSelections)&&km(e,t),this.dragging=Pm(e,t)&&bu(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&vm(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,a=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:a}=this.scrollParents.y.getBoundingClientRect());let l=wa(this.view);e.clientX-l.left<=s+Hn?t=-Gn(s-e.clientX):e.clientX+l.right>=o-Hn&&(t=Gn(e.clientX-o)),e.clientY-l.top<=r+Hn?i=-Gn(r-e.clientY):e.clientY+l.bottom>=a-Hn&&(i=Gn(e.clientY-a)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=fu(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function km(n,e){let t=n.state.facet(Hh);return t.length?t[0](e):R.mac?e.metaKey:e.ctrlKey}function Qm(n,e){let t=n.state.facet(Gh);return t.length?t[0](e):R.mac?!e.altKey:!e.ctrlKey}function Pm(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=kn(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Cm(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=Se.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const Ot=Object.create(null),je=Object.create(null),yu=R.ie&&R.ie_version<15||R.ios&&R.webkit_version<604;function Tm(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Au(n,t.value)},50)}function pr(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Au(n,e){e=pr(n.state,ba,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(Bo!=null&&t.selection.ranges.every(l=>l.empty)&&Bo==r.toString()){let l=-1;i=t.changeByRange(c=>{let h=t.doc.lineAt(c.from);if(h.from==l)return{range:c};l=h.from;let u=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:u},range:A.cursor(c.from+u.length)}})}else o?i=t.changeByRange(l=>{let c=r.line(s++);return{changes:{from:l.from,to:l.to,insert:c.text},range:A.cursor(l.from+c.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}je.scroll=n=>{let e=n.inputState;e.lastScrollTop=n.scrollDOM.scrollTop,e.lastScrollLeft=n.scrollDOM.scrollLeft,R.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};je.wheel=je.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ot.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);je.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};je.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};je.touchend=(n,e)=>{n.inputState.touchActive=!1};Ot.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(_h))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=$m(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new wm(n,e,t,i)),i&&n.observer.ignore(()=>{Bh(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ml(n,e,t,i){if(i==1)return A.cursor(e,t);if(i==2)return om(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,a=s?s.posAtEnd:r.to;return aDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Ul+1)%3:1}function $m(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=bu(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,a){let l=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),c,h=Ml(n,l.pos,l.assoc,i);if(t.pos!=l.pos&&!o){let u=Ml(n,t.pos,t.assoc,i),f=Math.min(u.from,h.from),d=Math.max(u.to,h.to);h=f1&&(c=Km(s,l.pos))?c:a?s.addRange(h):A.create([h])}}}function Km(n,e){for(let t=0;t=e)return A.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ot.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=A.undirectionalRange(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",pr(n.state,Sa,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ot.dragend=n=>(n.inputState.draggedContent=null,!1);function Dl(n,e,t,i){if(t=pr(n.state,ba,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&Qm(n,e)?{from:r.from,to:r.to}:null,a={from:s,insert:t},l=n.state.changes(o?[o,a]:a);n.focus(),n.dispatch({changes:l,selection:{anchor:l.mapPos(s,-1),head:l.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ot.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&Dl(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(a.result)||(i[o]=a.result),r()},a.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Dl(n,e,i,!0),!0}return!1};Ot.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=yu?null:e.clipboardData;return t?(Au(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(Tm(n),!1)};function Zm(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Mm(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:pr(n,Sa,e.join(n.lineBreak)),ranges:t,linewise:i}}let Bo=null;Ot.copy=Ot.cut=(n,e)=>{if(!gn(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=Mm(n.state);if(!t&&!s)return!1;Bo=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=yu?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(Zm(n,t),!1)};const Su=Wt.define();function xu(n,e){let t=[];for(let i of n.facet(tu)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Su.of(!0)}):null}function vu(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=xu(n.state,e);t?n.dispatch(t):n.update([])}},10)}je.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),vu(n)};je.blur=n=>{n.observer.clearSelectionRange(),vu(n)};je.compositionstart=je.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};je.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,R.chrome&&R.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};je.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ot.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let a=o[0],l=n.posAtDOM(a.startContainer,a.startOffset),c=n.posAtDOM(a.endContainer,a.endOffset);return ka(n,{from:l,to:c,insert:n.state.toText(r)},null),!0}}let s;if(R.chrome&&R.android&&(s=gu.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return R.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),R.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>je.compositionend(n,e),20),!1};const Ll=new Set;function Em(n){Ll.has(n)||(Ll.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const Xl=["pre-wrap","normal","pre-line","break-spaces"];let Wi=!1;function Bl(){Wi=!1}class Um{constructor(e){this.lineWrapping=e,this.doc=se.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Xl.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=a;if(this.lineWrapping=a,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,l){this.heightSamples={};for(let c=0;c0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>As&&(Wi=!0),this.height=e)}replace(e,t,i){return Ve.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let a=s.length-1;a>=0;a--){let{fromA:l,toA:c,fromB:h,toB:u}=s[a],f=r.lineAt(l,pe.ByPosNoHeight,i.setDoc(t),0,0),d=f.to>=c?f:r.lineAt(c,pe.ByPosNoHeight,i,0,0);for(u+=d.to-c,c=d.to;a>0&&f.from<=s[a-1].toA;)l=s[a-1].fromA,h=s[a-1].fromB,a--,lr*2){let a=e[t-1];a.break?e.splice(--t,1,a.left,null,a.right):e.splice(--t,1,a.left,a.right),i+=1+a.break,s-=a.size}else if(r>s*2){let a=e[i];a.break?e.splice(i,1,a.left,null,a.right):e.splice(i,1,a.left,a.right),i+=2+a.break,r-=a.size}else break;else if(s=r&&o(this.lineAt(0,pe.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}}class ot extends wu{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof ot||s instanceof Ee&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof Ee?s=new ot(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Ve.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Ee extends Ve{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,a=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*r);o=l/r,this.length>r+1&&(a=(this.height-l)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:a}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:a,perChar:l}=this.heightMetrics(t,s);if(t.lineWrapping){let c=s+(e0){let r=i[i.length-1];r instanceof Ee?i[i.length-1]=new Ee(r.length+s):i.push(null,new Ee(s-1))}if(e>0){let r=i[0];r instanceof Ee?i[0]=new Ee(e+r.length):i.unshift(new Ee(e-1),null)}return Ve.of(i)}decomposeLeft(e,t){t.push(new Ee(e-1),null)}decomposeRight(e,t){t.push(null,new Ee(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],a=Math.max(t,s.from),l=-1;for(s.from>t&&o.push(new Ee(s.from-t-1).updateHeight(e,t));a<=r&&s.more;){let h=e.doc.lineAt(a).length;o.length&&o.push(null);let u=s.heights[s.index++],f=0;u<0&&(f=-u,u=s.heights[s.index++]),l==-1?l=u:Math.abs(u-l)>=As&&(l=-2);let d=new ot(h,u,f);d.outdated=!1,o.push(d),a+=h+1}a<=r&&o.push(null,new Ee(r-a).updateHeight(e,a));let c=Ve.of(o);return(l<0||Math.abs(c.height-this.height)>=As||Math.abs(l-this.heightMetrics(e,t).perLine)>=As)&&(Wi=!0),Us(this,c)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class Lm extends Ve{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return ea))return c;let h=t==pe.ByPosNoHeight?pe.ByPosNoHeight:pe.ByPos;return l?c.join(this.right.lineAt(a,h,i,o,a)):this.left.lineAt(a,h,i,s,r).join(c)}forEachLine(e,t,i,s,r,o){let a=s+this.left.height,l=r+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,i,a,l,o);else{let c=this.lineAt(l,pe.ByPos,i,s,r);e=e&&c.from<=t&&o(c),t>c.to&&this.right.forEachLine(c.to+1,t,i,a,l,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let a of i)r.push(a);if(e>0&&Il(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?Ve.of(this.break?[e,null,t]:[e,t]):(this.left=Us(this.left,e),this.right=Us(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,a=t+r.length+this.break,l=null;return s&&s.from<=t+r.length&&s.more?l=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=a+o.length&&s.more?l=o=o.updateHeight(e,a,i,s):o.updateHeight(e,a,i),l?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function Il(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof Ee&&(i=n[e+1])instanceof Ee&&n.splice(e-1,3,new Ee(t.length+1+i.length))}const Xm=5;class Qa{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof ot?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new ot(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=Xm)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new ot(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new Ee(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof ot)return e;let t=new ot(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof ot)&&!this.isCovered?this.nodes.push(new ot(0,-1,0)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&u.overflow!="visible"){let f=h.getBoundingClientRect();r=Math.max(r,f.left),o=Math.min(o,f.right),a=Math.max(a,f.top),l=Math.min(c==n.parentNode?s.innerHeight:l,f.bottom)}c=u.position=="absolute"||u.position=="fixed"?h.offsetParent:h.parentNode}else if(c.nodeType==11)c=c.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:a-(t.top+e),bottom:Math.max(a,l)-(t.top+e)}}function Wm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function zm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Dr{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new Um(i),this.stateDeco=zl(t),this.heightMap=Ve.empty().applyChanges(this.stateDeco,se.empty,this.heightOracle.setDoc(t.doc),[new ct(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=B.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new _n(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Wl:new Pa(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(un(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=zl(this.state);let s=e.changedRanges,r=ct.extendWithRanges(s,Bm(i,this.stateDeco,e?e.changes:Re.empty(this.state.doc.length))),o=this.heightMap.height,a=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Bl(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Wi)&&(e.flags|=2),a?(this.scrollAnchorPos=e.changes.mapPos(a.from,-1),this.scrollAnchorHeight=a.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let l=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let c=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(c||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(nu)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?fe.RTL:fe.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",a=t.getBoundingClientRect(),l=o||this.mustMeasureContent||this.contentDOMHeight!=a.height;this.contentDOMHeight=a.height,this.mustMeasureContent=!1;let c=0,h=0;if(a.width&&a.height){let{scaleX:k,scaleY:S}=Fh(t,a);(k>.005&&Math.abs(this.scaleX-k)>.005||S>.005&&Math.abs(this.scaleY-S)>.005)&&(this.scaleX=k,this.scaleY=S,c|=16,o=l=!0)}let u=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=u||this.paddingBottom!=f)&&(this.paddingTop=u,this.paddingBottom=f,c|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,c|=16);let d=Dh(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=Ih(this.scrollParent||e.win);let m=(this.printing?zm:qm)(t,this.paddingTop),g=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let b=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(b!=this.inView&&(this.inView=b,b&&(l=!0)),!this.inView&&!this.scrollTarget&&!Wm(e.dom))return 0;let x=a.width;if((this.contentDOMWidth!=x||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=a.width,this.editorHeight=e.scrollDOM.clientHeight,c|=16),l){let k=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(k)&&(o=!0),o||s.lineWrapping&&Math.abs(x-this.contentDOMWidth)>s.charWidth){let{lineHeight:S,charWidth:w,textHeight:U}=e.docView.measureTextSize();o=S>0&&s.refresh(r,S,w,U,Math.max(5,x/w),k),o&&(e.docView.minWidth=0,c|=16)}g>0&&y>0?h=Math.max(g,y):g<0&&y<0&&(h=Math.min(g,y)),Bl();for(let S of this.viewports){let w=S.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(S);this.heightMap=(o?Ve.empty().applyChanges(this.stateDeco,se.empty,this.heightOracle,[new ct(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Fm(S.from,w))}Wi&&(c|=2)}let C=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(c&2&&(c|=this.updateScaler()),this.viewport=this.getViewport(h,this.scrollTarget),c|=this.updateForViewport()),(c&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),c|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),c}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:a}=this,l=new _n(s.lineAt(o-i*1e3,pe.ByHeight,r,0,0).from,s.lineAt(a+(1-i)*1e3,pe.ByHeight,r,0,0).to);if(t){let{head:c}=t.range;if(cl.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),u=s.lineAt(c,pe.ByPos,r,0,0),f;t.y=="center"?f=(u.top+u.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&c=a+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=fe.LTR&&!i)return[];let a=[],l=(h,u,f,d)=>{if(u-hh&&yy.from>=f.from&&y.to<=f.to&&Math.abs(y.from-h)y.fromb));if(!g){if(ux.from<=u&&x.to>=u)){let x=t.moveToLineBoundary(A.cursor(u),!1,!0).head;x>h&&(u=x)}let y=this.gapSize(f,h,u,d),b=i||y<2e6?y:2e6;g=new Dr(h,u,y,b)}a.push(g)},c=h=>{if(h.length2e6)for(let S of e)S.from>=h.from&&S.fromh.from&&l(h.from,d,h,u),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];N.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||un(this.heightMap.lineAt(e,pe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||un(this.heightMap.lineAt(this.scaler.fromDOM(e),pe.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return un(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class _n{constructor(e,t){this.from=e,this.to=t}}function jm(n,e,t){let i=[],s=n,r=0;return N.spans(t,n,e,{span(){},point(o,a){o>s&&(i.push({from:s,to:o}),r+=o-s),s=a}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],a=o-r;if(i<=a)return r+i;i-=a}}function es(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function Ym(n,e){for(let t of n)if(e(t))return t}const Wl={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function zl(n){let e=n.facet(ur).filter(i=>typeof i!="function"),t=n.facet(va).filter(i=>typeof i!="function");return t.length&&e.push(N.join(t)),e}class Pa{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:a,to:l})=>{let c=t.lineAt(a,pe.ByPos,e,0,0).top,h=t.lineAt(l,pe.ByPos,e,0,0).bottom;return s+=h-c,{from:a,to:l,top:c,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let a of this.viewports)a.domTop=o+(a.top-r)*this.scale,o=a.domBottom=a.domTop+(a.bottom-a.top),r=a.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function un(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new dt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>un(s,e)):n._content)}const ts=K.define({combine:n=>n.join(" ")}),Io=K.define({combine:n=>n.indexOf(!0)>-1}),qo=ei.newName(),ku=ei.newName(),Qu=ei.newName(),Pu={"&light":"."+ku,"&dark":"."+Qu};function Wo(n,e,t){return new ei(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}const Nm=Wo("."+qo,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Pu),Hm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Lr=R.ie&&R.ie_version<=11;class Gm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Qp,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(R.ie&&R.ie_version<=11||R.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&R.android&&e.constructor.EDIT_CONTEXT!==!1&&!(R.chrome&&R.chrome_version<126)&&(this.editContext=new Jm(e),e.state.facet(Dt)&&(e.contentDOM.editContext=this.editContext.editContext)),Lr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Dt)?i.root.activeElement!=this.dom:!gn(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(R.ie&&R.ie_version<=11||R.android&&R.chrome)&&!i.state.selection.main.empty&&s.focusNode&&On(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=kn(e.root);if(!t)return!1;let i=R.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&_m(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=gn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&Ei(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&gn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new mm(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=pu(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Es(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=Vl(t,e.previousSibling||e.target.previousSibling,-1),s=Vl(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Dt)!=e.state.facet(Dt)&&(e.view.contentDOM.editContext=e.state.facet(Dt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function Vl(n,e,t){for(;e;){let i=Se.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function jl(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return On(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function _m(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return jl(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?jl(n,t):null}class Jm{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,a=this.toEditorPos(i.updateRangeStart),l=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:a,drifted:!1});let c=l-a>i.text.length;a==this.from&&rthis.to&&(l=r);let h=mu(e.state.sliceDoc(a,l),i.text,(c?s.from:s.to)-a,c?"end":null);if(!h){let f=A.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Es(f,s)||e.dispatch({selection:f,userEvent:"select"});return}let u={from:h.from+a,to:h.toA+a,insert:se.of(i.text.slice(h.from,h.toB).split(` +`))};if((R.mac||R.android)&&u.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(u={from:a,to:l,insert:se.of([i.text.replace("."," ")])}),this.pendingContextChange=u,!e.state.readOnly){let f=this.to-this.from+(u.to-u.from+u.insert.length);ka(e,u,A.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),u.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),a=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,a=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(a)){let l=this.toEditorPos(r.rangeStart),c=this.toEditorPos(r.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{let s=kn(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,a,l,c)=>{if(i)return;let h=c.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(c)){s=this.pendingContextChange=null,t+=h,this.to+=h;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=h,this.to+=h;else if(rthis.to||this.to-this.from+c.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),c.toString()),this.to+=h}t+=h}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class ${get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Pp(e.parent)||document,this.viewState=new ql(this,e.state||_.create(e)),e.scrollTo&&e.scrollTo.is(Nn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ti).map(s=>new Zr(s));for(let s of this.plugins)s.update(this);this.observer=new Gm(this),this.inputState=new Am(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Rl(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Pe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let f of e){if(f.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=f.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,a=0,l=null;e.some(f=>f.annotation(Su))?(this.inputState.notifiedFocused=o,a=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,l=xu(r,o),l||(a=1));let c=this.observer.delayedAndroidKey,h=null;if(c?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(h=null)):this.observer.clear(),r.facet(_.phrases)!=this.state.facet(_.phrases))return this.setState(r);s=Ks.create(this,r,e),s.flags|=a;let u=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(u&&(u=u.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection,{x:p,y:m}=this.state.facet($.cursorScrollMargin);u=new Ui(d.empty?d:A.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of f.effects)d.is(Nn)&&(u=d.value.clip(this.state))}this.viewState.update(s,u),this.bidiCache=Fs.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(hn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(ts)!=s.state.facet(ts)&&(this.viewState.mustMeasureContent=!0),(t||i||u||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let f of this.state.facet(Fo))try{f(s)}catch(d){ze(this.state,d,"update listener")}(l||h)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),h&&!pu(this,h)&&c.force&&Ei(this.contentDOM,c.key,c.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new ql(this,e),this.plugins=e.facet(Ti).map(i=>new Zr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Rl(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ti),i=e.state.facet(Ti);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new Zr(r));else{let a=this.plugins[o];a.mustUpdate=e,s.push(a)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let a=0;;a++){if(o<0)if(Ih(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let l=this.viewState.measure();if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(a>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];l&4||([this.measureRequests,c]=[c,this.measureRequests]);let h=c.map(d=>{try{return d.read(this)}catch(p){return ze(this.state,p),Yl}}),u=Ks.create(this,this.state,[]),f=!1;u.flags|=l,t?t.flags|=l:t=u,this.updateState=2,u.empty||(this.updatePlugins(u),this.inputState.update(u),this.updateAttrs(),f=this.docView.update(u),f&&this.docViewUpdate());for(let d=0;d1||p<-1)&&!(R.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let a of this.state.facet(Fo))a(t)}get themeClasses(){return qo+" "+(this.state.facet(Io)?Qu:ku)+" "+this.state.facet(ts)}updateAttrs(){let e=Nl(this,ou,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Dt)?"true":"false",class:"cm-content",style:`${R.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Nl(this,xa,t);let i=this.observer.ignore(()=>{let s=wl(this.contentDOM,this.contentAttrs,t),r=wl(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is($.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(hn);let e=this.state.facet($.cspNonce);ei.mount(this.root,this.styleModules.concat(Nm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Fr(this,e,$l(this,e,t,i))}moveByGroup(e,t){return Fr(this,e,$l(this,e,t,i=>cm(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return A.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return lm(this,e,t,i)}moveVertically(e,t,i){return Fr(this,e,hm(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Xo(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Xo(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.state.doc.lineAt(e),s=this.bidiSpans(i),r=s[Ct.find(s,e-i.from,-1,t)];return this.docView.coordsAt(e,t,r.dir==fe.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(iu)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>eg)return Yh(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||jh(r.isolates,i=Pl(this,e))))return r.order;i||(i=Pl(this,e));let s=Ep(e.text,t,i);return this.bidiCache.push(new Fs(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||R.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Bh(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Nn.of(new Ui(typeof e=="number"?A.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Nn.of(new Ui(A.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return xe.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return xe.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ei.newName(),s=[ts.of(i),hn.of(Wo(`.${i}`,e))];return t&&t.dark&&s.push(Io.of(!0)),s}static baseTheme(e){return ri.lowest(hn.of(Wo("."+qo,e,Pu)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&Se.get(i)||Se.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}}$.styleModule=hn;$.inputHandler=eu;$.clipboardInputFilter=ba;$.clipboardOutputFilter=Sa;$.scrollHandler=su;$.focusChangeEffect=tu;$.perLineTextDirection=iu;$.exceptionSink=Jh;$.updateListener=Fo;$.editable=Dt;$.mouseSelectionStyle=_h;$.dragMovesSelection=Gh;$.clickAddsSelectionRange=Hh;$.decorations=ur;$.blockWrappers=au;$.outerDecorations=va;$.atomicRanges=Dn;$.bidiIsolatedRanges=lu;$.cursorScrollMargin=K.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});$.scrollMargins=cu;$.darkTheme=Io;$.cspNonce=K.define({combine:n=>n.length?n[0]:""});$.contentAttributes=xa;$.editorAttributes=ou;$.lineWrapping=$.contentAttributes.of({class:"cm-lineWrapping"});$.announce=z.define();const eg=4096,Yl={};class Fs{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:fe.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Oa(o,t)}return t}const tg=R.mac?"mac":R.windows?"win":R.linux?"linux":"key";function ig(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,a;for(let l=0;li.concat(s),[]))),t}function sg(n,e,t){return Tu(Cu(n.state),e,n,t)}let Nt=null;const rg=4e3;function og(n,e=tg){let t=Object.create(null),i=Object.create(null),s=(o,a)=>{let l=i[o];if(l==null)i[o]=a;else if(l!=a)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,a,l,c,h)=>{var u,f;let d=t[o]||(t[o]=Object.create(null)),p=a.split(/ (?!$)/).map(y=>ig(y,e));for(let y=1;y{let C=Nt={view:x,prefix:b,scope:o};return setTimeout(()=>{Nt==C&&(Nt=null)},rg),!0}]})}let m=p.join(" ");s(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(u=d._any)===null||u===void 0?void 0:u.run)===null||f===void 0?void 0:f.slice())||[]});l&&g.run.push(l),c&&(g.preventDefault=!0),h&&(g.stopPropagation=!0)};for(let o of n){let a=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let c of a){let h=t[c]||(t[c]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:u}=o;for(let f in h)h[f].run.push(d=>u(d,zo))}let l=o[e]||o.key;if(l)for(let c of a)r(c,l,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(c,"Shift-"+l,o.shift,o.preventDefault,o.stopPropagation)}return t}let zo=null;function Tu(n,e,t,i){zo=e;let s=bp(e),r=Ne(s,0),o=Qt(r)==s.length&&s!=" ",a="",l=!1,c=!1,h=!1;Nt&&Nt.view==t&&Nt.scope==i&&(a=Nt.prefix+" ",Ou.indexOf(e.keyCode)<0&&(c=!0,Nt=null));let u=new Set,f=g=>{if(g){for(let y of g.run)if(!u.has(y)&&(u.add(y),y(t)))return g.stopPropagation&&(h=!0),!0;g.preventDefault&&(g.stopPropagation&&(h=!0),c=!0)}return!1},d=n[i],p,m;return d&&(f(d[a+is(s,e,!o)])?l=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(R.windows&&e.ctrlKey&&e.altKey)&&!(R.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ti[e.keyCode])&&p!=s?(f(d[a+is(p,e,!0)])||e.shiftKey&&(m=vn[e.keyCode])!=s&&m!=p&&f(d[a+is(m,e,!1)]))&&(l=!0):o&&e.shiftKey&&f(d[a+is(s,e,!0)])&&(l=!0),!l&&f(d._any)&&(l=!0)),c&&(l=!0),l&&h&&e.stopPropagation(),zo=null,l}class gi{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=Ru(e);return[new gi(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return ag(e,t,i)}}function Ru(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==fe.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Gl(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,a=n.posAtCoords({x:r.left+1,y:o}),l=n.posAtCoords({x:r.right-1,y:o});return a==null||l==null?i:{from:Math.max(i.from,Math.min(a,l)),to:Math.min(i.to,Math.max(a,l))}}function ag(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==fe.LTR,o=n.contentDOM,a=o.getBoundingClientRect(),l=Ru(n),c=o.querySelector(".cm-line"),h=c&&window.getComputedStyle(c),u=a.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=a.right-(h?parseInt(h.paddingRight):0),d=Lo(n,i,1),p=Lo(n,s,-1),m=d.type==Le.Text?d:null,g=p.type==Le.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=Gl(n,i,1,m)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=Gl(n,s,-1,g)),m&&g&&m.from==g.from&&m.to==g.to)return b(x(t.from,t.to,m));{let k=m?x(t.from,null,m):C(d,!1),S=g?x(null,t.to,g):C(p,!0),w=[];return(m||d).to<(g||p).from-(m&&g?1:0)||d.widgetLineBreaks>1&&k.bottom+n.defaultLineHeight/2M&&Q.from=P)break;ee>D&&E(Math.max(J,D),k==null&&J<=M,Math.min(ee,P),S==null&&ee>=Y,ae.dir)}if(D=j.to+1,D>=P)break}return V.length==0&&E(M,k==null,Y,S==null,n.textDirection),{top:U,bottom:F,horizontal:V}}function C(k,S){let w=a.top+(S?k.top:k.bottom);return{top:w,bottom:w,horizontal:[]}}}function lg(n,e){return n.constructor==e.constructor&&n.eq(e)}class cg{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(bs)!=e.state.facet(bs)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(bs);for(;t!lg(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,R.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const bs=K.define();function $u(n){return[xe.define(e=>new cg(e,n)),bs.of(n)]}const zi=K.define({combine(n){return yt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function hg(n={}){return[zi.of(n),ug,fg,pg,nu.of(!0)]}function Ku(n){return n.startState.facet(zi)!=n.state.facet(zi)}const ug=$u({above:!0,markers(n){let{state:e}=n,t=e.facet(zi),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&R.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",a=s.empty?s:A.cursor(s.head,s.assoc);for(let l of gi.forRange(n,o,a))i.push(l)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Ku(n);return t&&_l(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){_l(e.state,n)},class:"cm-cursorLayer"});function _l(n,e){e.style.animationDuration=n.facet(zi).cursorBlinkRate+"ms"}const fg=$u({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of gi.forRange(n,"cm-selectionBackground",s))e.push(r);if(R.ios&&!t.empty&&n.state.facet(zi).iosSelectionHandles){for(let s of gi.forRange(n,"cm-selectionHandle cm-selectionHandle-start",A.cursor(t.from,1)))e.push(s);for(let s of gi.forRange(n,"cm-selectionHandle cm-selectionHandle-end",A.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Ku(n)},class:"cm-selectionLayer"}),dg=R.gecko&&R.gecko_version==153?"#ffffff01":"transparent",pg=ri.highest($.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:`${dg} !important`},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Zu=z.define({map(n,e){return n==null?null:e.mapPos(n)}}),fn=Te.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Zu)?i.value:t,n)}}),mg=xe.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(fn);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(fn)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(fn),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(fn)!=n&&this.view.dispatch({effects:Zu.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function gg(){return[fn,mg]}function Jl(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,a;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;a=e.exec(r.value);)s(o+a.index,a)}function Og(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}class yg{constructor(e){const{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(a,l,c,h)=>s(h,c,c+a[0].length,a,l);else if(typeof i=="function")this.addMatch=(a,l,c,h)=>{let u=i(a,l,c);u&&h(c,c+a[0].length,u)};else if(i)this.addMatch=(a,l,c,h)=>h(c,c+a[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new Bt,i=t.add.bind(t);for(let{from:s,to:r}of Og(e,this.maxLength))Jl(e.state.doc,this.regexp,s,r,(o,a)=>this.addMatch(a,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,a,l)=>{l>=e.view.viewport.from&&a<=e.view.viewport.to&&(i=Math.min(a,i),s=Math.max(l,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),a=Math.min(r.to,s);if(a>=o){let l=e.state.doc.lineAt(o),c=l.tol.from;o--)if(this.boundary.test(l.text[o-1-l.from])){h=o;break}for(;af.push(y.range(m,g));if(l==c)for(this.regexp.lastIndex=h-l.from;(d=this.regexp.exec(l.text))&&d.indexthis.addMatch(g,e,m,p));t=t.update({filterFrom:h,filterTo:u,filter:(m,g)=>mu,add:f})}}return t}}const Vo=/x/.unicode!=null?"gu":"g",Ag=new RegExp(`[\0-\b +--Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,Vo),bg={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Xr=null;function Sg(){var n;if(Xr==null&&typeof document<"u"&&document.body){let e=document.body.style;Xr=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Xr||!1}const Ss=K.define({combine(n){let e=yt(n,{render:null,specialChars:Ag,addSpecialChars:null});return(e.replaceTabs=!Sg())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,Vo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,Vo)),e}});function xg(n={}){return[Ss.of(n),vg()]}let ec=null;function vg(){return ec||(ec=xe.fromClass(class{constructor(n){this.view=n,this.decorations=B.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Ss)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new yg({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=Ne(e[0],0);if(r==9){let o=s.lineAt(i),a=t.state.tabSize,l=_i(o.text,a,i-o.from);return B.replace({widget:new Pg((a-l%a)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=B.replace({widget:new Qg(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Ss);n.startState.facet(Ss)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const wg="•";function kg(n){return n>=32?wg:n==10?"␤":String.fromCharCode(9216+n)}class Qg extends Ut{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=kg(this.code),i=e.state.phrase("Control character")+" "+(bg[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class Pg extends Ut{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function Cg(){return Rg}const Tg=B.line({class:"cm-activeLine"}),Rg=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Tg.range(s.from)),e=s.from)}return B.set(t)}},{decorations:n=>n.decorations}),jo=2e3;function $g(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>jo||t.off>jo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),a=Math.max(e.off,t.off);for(let l=i;l<=s;l++){let c=n.doc.line(l);c.length<=a&&r.push(A.range(c.from+o,c.to+a))}}else{let o=Math.min(e.col,t.col),a=Math.max(e.col,t.col);for(let l=i;l<=s;l++){let c=n.doc.line(l),h=Qo(c.text,o,n.tabSize,!0);if(h<0)r.push(A.cursor(c.to));else{let u=Qo(c.text,a,n.tabSize);r.push(A.range(c.from+h,c.from+u))}}}return r}function Kg(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function tc(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>jo?-1:s==i.length?Kg(n,e.clientX):_i(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function Zg(n,e){let t=tc(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let a=tc(n,s);if(!a)return i;let l=$g(n.state,t,a);return l.length?o?A.create(l.concat(i.ranges)):A.create(l):i}}:null}function Mg(n){let e=(t=>t.altKey&&t.button==0);return $.mouseSelectionStyle.of((t,i)=>e(i)?Zg(t,i):null)}const Eg={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},Ug={style:"cursor: crosshair"};function Fg(n={}){let[e,t]=Eg[n.key||"Alt"],i=xe.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,$.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?Ug:null})]}const ns="-10000px";class Mu{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(l=>l);if(s===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let o=[],a=t?[]:null;for(let l=0;lt[c]=l),t.length=a.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}}function Dg(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const Br=K.define({combine:n=>{var e,t,i;return{position:R.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||Dg}}}),ic=new WeakMap,Ca=xe.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Br);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new Mu(n,gr,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Br);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=ns,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(R.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=wa(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let a=this.manager.tooltipViews[o];return a.getCoords?a.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Br).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let a of this.manager.tooltipViews)a.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let a=0;a=Math.min(t.bottom,i.bottom)||u.rightMath.min(t.right,i.right)+.1)){h.style.top=ns;continue}let d=l.arrow?c.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=f.right-f.left,g=(e=ic.get(c))!==null&&e!==void 0?e:f.bottom-f.top,y=c.offset||Xg,b=this.view.textDirection==fe.LTR,x=f.width>i.right-i.left?b?i.left:i.right-f.width:b?Math.max(i.left,Math.min(u.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,u.left-m+(d?14:0)-y.x),i.right-m),C=this.above[a];!l.strictSide&&(C?u.top-g-p-y.yi.bottom)&&C==i.bottom-u.bottom>u.top-i.top&&(C=this.above[a]=!C);let k=(C?u.top-i.top:i.bottom-u.bottom)-p;if(kx&&U.topS&&(S=C?U.top-g-2-p:U.bottom+p+2);if(this.position=="absolute"?(h.style.top=(S-n.parent.top)/r+"px",nc(h,(x-n.parent.left)/s)):(h.style.top=S/r+"px",nc(h,x/s)),d){let U=u.left+(b?y.x:-y.x)-(x+14-7);d.style.left=U/s+"px"}c.overlap!==!0&&o.push({left:x,top:S,right:w,bottom:S+g}),h.classList.toggle("cm-tooltip-above",C),h.classList.toggle("cm-tooltip-below",!C),c.positioned&&c.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=ns}},{eventObservers:{scroll(){this.maybeMeasure()}}});function nc(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const Lg=$.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),Xg={x:0,y:0},gr=K.define({enables:[Ca,Lg]}),Ds=K.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class Or{static create(e){return new Or(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Mu(e,Ds,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const Bg=gr.compute([Ds],n=>{let e=n.facet(Ds);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:Or.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),Ig=K.define();class qg{constructor(e,t,i,s,r,o){this.view=e,this.source=t,this.field=i,this.locked=s,this.setHover=r,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(e){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;eo.bottom||t.xo.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),l=a&&a.dir==fe.RTL?-1:1;r=t.x{if(a&&!(Array.isArray(a)&&!a.length)){let l=Array.isArray(a)?a:[a];s&&this.locked.set(l,s),e.dispatch({effects:this.setHover.of(l)})}};if(r&&"then"in r){let a=this.pending={pos:t};r.then(l=>{this.pending==a&&(this.pending=null,o(l))},l=>ze(e.state,l,"hover tooltip"))}else o(r)}get tooltip(){let e=this.view.plugin(Ca),t=e?e.manager.tooltips.findIndex(i=>i.create==Or.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&!this.locked.has(s)&&r&&!Wg(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,a=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==a?this.view.posAtCoords(this.lastMove)!=o:!zg(this.view,o,a,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length&&!this.locked.has(t)){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t);let{active:s}=this;s.length&&!this.locked.has(s)&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const ss=4;function Wg(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let a=o.getBoundingClientRect();s=Math.min(a.top,s),r=Math.max(a.bottom,r)}return e.clientX>=t-ss&&e.clientX<=i+ss&&e.clientY>=s-ss&&e.clientY<=r+ss}function zg(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),a=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,a)=e&&l<=t}function Eu(n,e={}){let t=z.define(),i=new WeakMap,s=Te.define({create(){return[]},update(o,a){let l=i.get(o);if(o.length&&(e.hideOnChange&&(a.docChanged||a.selection)?o=[]:l&&l(a)?o=[]:e.hideOn&&(o=o.filter(c=>!e.hideOn(a,c)))),a.docChanged&&o.length){let c=[];for(let h of o){let u=a.changes.mapPos(h.pos,-1,De.TrackDel);if(u!=null){let f=Object.assign(Object.create(null),h);f.pos=u,f.end!=null&&(f.end=a.changes.mapPos(f.end)),c.push(f)}}o=c}for(let c of a.effects)c.is(t)&&(o=c.value,l=void 0),(c.is(Vg)&&!c.value||c.value==s)&&(o=[]);return o.length&&l&&i.set(o,l),o},provide:o=>Ds.from(o)});const r=xe.define(o=>new qg(o,n,s,i,t,e.hoverTime||300));return{active:s,extension:[s,r,Ig.of(r),Bg]}}function Uu(n,e){let t=n.plugin(Ca);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const Vg=z.define(),sc=K.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Fu(n,e){let t=n.plugin(Du),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const Du=xe.fromClass(class{constructor(n){this.input=n.state.facet(Vi),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(sc);this.top=new rs(n,!0,e.topContainer),this.bottom=new rs(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(sc);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new rs(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new rs(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(Vi);if(t!=this.input){let i=t.filter(l=>l),s=[],r=[],o=[],a=[];for(let l of i){let c=this.specs.indexOf(l),h;c<0?(h=l(n.view),a.push(h)):(h=this.panels[c],h.update&&h.update(n)),s.push(h),(h.top?r:o).push(h)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let l of a)l.dom.classList.add("cm-panel"),l.mount&&l.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>$.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class rs{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=rc(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=rc(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function rc(n){let e=n.nextSibling;return n.remove(),e}const Vi=K.define({enables:Du});function jg(n,e){let t,i=new Promise(o=>t=o),s=o=>Yg(o,e,t);n.state.field(Ir,!1)?n.dispatch({effects:Lu.of(s)}):n.dispatch({effects:z.appendConfig.of(Ir.init(()=>[s]))});let r=Xu.of(s);return{close:r,result:i.then(o=>((n.win.queueMicrotask||(l=>n.win.setTimeout(l,10)))(()=>{n.state.field(Ir).indexOf(s)>-1&&n.dispatch({effects:r})}),o))}}const Ir=Te.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(Lu)?n=[t.value].concat(n):t.is(Xu)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>Vi.computeN([n],e=>e.field(n))}),Lu=z.define(),Xu=z.define();function Yg(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=he("form"),e.input){let a=he("input",e.input);/^(text|password|number|email|tel|url)$/.test(a.type)&&a.classList.add("cm-textfield"),a.name||(a.name="input"),i.appendChild(he("label",(e.label||"")+": ",a))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(he("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let s=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let a=0;a{c.keyCode==27?(c.preventDefault(),o(null)):c.keyCode==13&&(c.preventDefault(),o(l))}),l.addEventListener("submit",c=>{c.preventDefault(),o(l)})}let r=he("div",i,he("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["×"]));e.class&&(r.className=e.class),r.classList.add("cm-dialog");function o(a){r.contains(r.ownerDocument.activeElement)&&n.focus(),t(a)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let a;typeof e.focus=="string"?a=i.querySelector(e.focus):a=i.querySelector("input")||i.querySelector("button"),a&&"select"in a?a.select():a&&"focus"in a&&a.focus()}}}}class Mt extends Jt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Mt.prototype.elementClass="";Mt.prototype.toDOM=void 0;Mt.prototype.mapMode=De.TrackBefore;Mt.prototype.startSide=Mt.prototype.endSide=-1;Mt.prototype.point=!0;const xs=K.define(),Ng=K.define(),Hg={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>N.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},An=K.define();function Bu(n){return[Iu(),An.of({...Hg,...n})]}const oc=K.define({combine:n=>n.some(e=>e)});function Iu(n){return[Gg]}const Gg=xe.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(An).map(e=>new lc(n,e)),this.fixed=!n.state.facet(oc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(oc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=N.iter(this.view.state.facet(xs),this.view.viewport.from),i=[],s=this.gutters.map(r=>new _g(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let a of r.type)if(a.type==Le.Text&&o){Yo(t,i,a.from);for(let l of s)l.line(this.view,a,i);o=!1}else if(a.widget)for(let l of s)l.widget(this.view,a)}else if(r.type==Le.Text){Yo(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(An),t=n.state.facet(An),i=n.docChanged||n.heightChanged||n.viewportChanged||!N.eq(n.startState.facet(xs),n.state.facet(xs),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new lc(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>$.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==fe.LTR?{left:i,right:s}:{right:i,left:s}})});function ac(n){return Array.isArray(n)?n:[n]}function Yo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class _g{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=N.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let a=new qu(e,o,r,i);s.elements.push(a),s.dom.appendChild(a.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];Yo(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(Ng)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class lc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let l=r.getBoundingClientRect();o=(l.top+l.bottom)/2}else o=s.clientY;let a=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,a,s)&&s.preventDefault()});this.markers=ac(t.markers(e)),t.initialSpacer&&(this.spacer=new qu(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ac(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!N.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class qu{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Jg(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let a=o,l=rr(a,l,c)||o(a,l,c):o}return i}})}});class qr extends Mt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Wr(n,e){return n.state.facet(Ri).formatNumber(e,n.state)}const iO=An.compute([Ri],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(eO)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new qr(Wr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(tO)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(Ri)!=e.state.facet(Ri),initialSpacer(e){return new qr(Wr(e,cc(e.state.doc.lines)))},updateSpacer(e,t){let i=Wr(t.view,cc(t.view.state.doc.lines));return i==e.number?e:new qr(i)},domEventHandlers:n.facet(Ri).domEventHandlers,side:"before"}));function nO(n={}){return[Ri.of(n),Iu(),iO]}function cc(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(sO.range(s)))}return N.of(e)});function oO(){return rO}const Wu=1024;let aO=0;class zr{constructor(e,t){this.from=e,this.to=t}}class G{constructor(e={}){this.id=aO++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=et.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}G.closedBy=new G({deserialize:n=>n.split(" ")});G.openedBy=new G({deserialize:n=>n.split(" ")});G.group=new G({deserialize:n=>n.split(" ")});G.isolate=new G({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});G.contextHash=new G({perNode:!0});G.lookAhead=new G({perNode:!0});G.mounted=new G({perNode:!0});class bn{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[G.mounted.id]}}const lO=Object.create(null);class et{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):lO,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new et(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(G.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(G.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}}et.none=new et("",Object.create(null),0,8);class Ta{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(o|be.IncludeAnonymous);;){let c=!1;if(l.from<=r&&l.to>=s&&(!a&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;c=!0}for(;c&&i&&(a||!l.type.isAnonymous)&&i(l),!l.nextSibling();){if(!l.parent())return;c=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Ka(et.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new ke(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new ke(et.none,t,i,s)))}static build(e){return fO(e)}}ke.empty=new ke(et.none,[],[],0);class Ra{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Ra(this.buffer,this.index)}}class ni{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return et.none}toString(){let e=[];for(let t=0;t0));l=o[l+3]);return a}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let a=e,l=0;a=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Pn(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?a.length:-1;e!=c;e+=t){let h=a[e],u=l[e]+o.from,f;if(!(!(r&be.EnterBracketed&&h instanceof ke&&(f=bn.get(h))&&!f.overlay&&f.bracketed&&i>=u&&i<=u+h.length)&&!zu(s,i,u,u+h.length))){if(h instanceof ni){if(r&be.ExcludeBuffers)continue;let d=h.findChild(0,h.buffer.length,t,i-u,s);if(d>-1)return new Tt(new cO(o,h,e,u),null,d)}else if(r&be.IncludeAnonymous||!h.type.isAnonymous||$a(h)){let d;if(!(r&be.IgnoreMounts)&&(d=bn.get(h))&&!d.overlay)return new Je(d.tree,u,e,o);let p=new Je(h,u,e,o);return r&be.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?h.children.length-1:0,t,i,s,r)}}}if(r&be.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&be.IgnoreOverlays)&&(s=bn.get(this._tree))&&s.overlay){let r=e-this.from,o=i&be.EnterBracketed&&s.bracketed;for(let{from:a,to:l}of s.overlay)if((t>0||o?a<=r:a=r:l>r))return new Je(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function uc(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function No(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class cO{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}}class Tt extends Vu{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new Tt(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&be.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new Tt(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new ke(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function ju(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let a=new Je(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Pn(a,e,t,!1))}}return s?ju(s):i}class Ho{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~be.EnterBracketed,e instanceof Je)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Je?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&be.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&be.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&be.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let a=i._tree.children[r];if(this.mode&be.IncludeAnonymous||a instanceof ni||!a.type.isAnonymous||$a(a))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return No(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}}function $a(n){return n.children.some(e=>e instanceof ni||!e.type.isAnonymous||$a(e))}function fO(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=Wu,reused:r=[],minRepeatType:o=i.types.length}=n,a=Array.isArray(t)?new Ra(t,t.length):t,l=i.types,c=0,h=0;function u(k,S,w,U,F,V){let{id:E,start:M,end:Y,size:Q}=a,D=h,P=c;if(Q<0)if(a.next(),Q==-1){let I=r[E];w.push(I),U.push(M-k);return}else if(Q==-3){c=E;return}else if(Q==-4){h=E;return}else throw new RangeError(`Unrecognized record size: ${Q}`);let j=l[E],ae,J,ee=M-k;if(Y-M<=s&&(J=g(a.pos-S,F))){let I=new Uint16Array(J.size-J.skip),H=a.pos-J.size,ce=I.length;for(;a.pos>H;)ce=y(J.start,I,ce);ae=new ni(I,Y-J.start,i),ee=J.start-k}else{let I=a.pos-Q;a.next();let H=[],ce=[],q=E>=o?E:-1,te=0,re=Y;for(;a.pos>I;)q>=0&&a.id==q&&a.size>=0?(a.end<=re-s&&(p(H,ce,M,te,a.end,re,q,D,P),te=H.length,re=a.end),a.next()):V>2500?f(M,I,H,ce):u(M,I,H,ce,q,V+1);if(q>=0&&te>0&&te-1&&te>0){let Me=d(j,P);ae=Ka(j,H,ce,0,H.length,0,Y-M,Me,Me)}else ae=m(j,H,ce,Y-M,D-Y,P)}w.push(ae),U.push(ee)}function f(k,S,w,U){let F=[],V=0,E=-1;for(;a.pos>S;){let{id:M,start:Y,end:Q,size:D}=a;if(D>4)a.next();else{if(E>-1&&Y=0;Q-=3)M[D++]=F[Q],M[D++]=F[Q+1]-Y,M[D++]=F[Q+2]-Y,M[D++]=D;w.push(new ni(M,F[2]-Y,i)),U.push(Y-k)}}function d(k,S){return(w,U,F)=>{let V=0,E=w.length-1,M,Y;if(E>=0&&(M=w[E])instanceof ke){if(!E&&M.type==k&&M.length==F)return M;(Y=M.prop(G.lookAhead))&&(V=U[E]+M.length+Y)}return m(k,w,U,F,V,S)}}function p(k,S,w,U,F,V,E,M,Y){let Q=[],D=[];for(;k.length>U;)Q.push(k.pop()),D.push(S.pop()+w-F);k.push(m(i.types[E],Q,D,V-F,M-V,Y)),S.push(F-w)}function m(k,S,w,U,F,V,E){if(V){let M=[G.contextHash,V];E=E?[M].concat(E):[M]}if(F>25){let M=[G.lookAhead,F];E=E?[M].concat(E):[M]}return new ke(k,S,w,U,E)}function g(k,S){let w=a.fork(),U=0,F=0,V=0,E=w.end-s,M={size:0,start:0,skip:0};e:for(let Y=w.pos-k;w.pos>Y;){let Q=w.size;if(w.id==S&&Q>=0){M.size=U,M.start=F,M.skip=V,V+=4,U+=4,w.next();continue}let D=w.pos-Q;if(Q<0||D=o?4:0,j=w.start;for(w.next();w.pos>D;){if(w.size<0)if(w.size==-3||w.size==-4)P+=4;else break e;else w.id>=o&&(P+=4);w.next()}F=j,U+=Q,V+=P}return(S<0||U==k)&&(M.size=U,M.start=F,M.skip=V),M.size>4?M:void 0}function y(k,S,w){let{id:U,start:F,end:V,size:E}=a;if(a.next(),E>=0&&U4){let Y=a.pos-(E-4);for(;a.pos>Y;)w=y(k,S,w)}S[--w]=M,S[--w]=V-k,S[--w]=F-k,S[--w]=U}else E==-3?c=U:E==-4&&(h=U);return w}let b=[],x=[];for(;a.pos>0;)u(n.start||0,n.bufferStart||0,b,x,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:b.length?x[0]+b[0].length:0;return new ke(l[n.topID],b.reverse(),x.reverse(),C)}const fc=new WeakMap;function vs(n,e){if(!n.isAnonymous||e instanceof ni||e.type!=n)return 1;let t=fc.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ke)){t=1;break}t+=vs(n,i)}fc.set(e,t)}return t}function Ka(n,e,t,i,s,r,o,a,l){let c=0;for(let p=i;p=h)break;S+=w}if(x==C+1){if(S>h){let w=p[C];d(w.children,w.positions,0,w.children.length,m[C]+b);continue}u.push(p[C])}else{let w=m[x-1]+p[x-1].length-k;u.push(Ka(n,p,m,C,x,k,w,null,l))}f.push(k+b-r)}}return d(e,t,i,s,0),(a||l)(u,f,o)}class dO{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Je&&this.map.set(e.tree,t)}get(e){return e instanceof Tt?this.getBuffer(e.context.buffer,e.index):e instanceof Je?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class Oi{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new Oi(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let a=0,l=0,c=0;;a++){let h=a=i)for(;o&&o.from=f.from||u<=f.to||c){let d=Math.max(f.from,l)-c,p=Math.min(f.to,u)-c;f=d>=p?null:new Oi(d,p,f.tree,f.offset+c,a>0,!!h)}if(f&&s.push(f),o.to>u)break;o=rnew zr(s.from,s.to)):[new zr(0,0)]:[new zr(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}}class pO{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new G({perNode:!0});let mO=0;class lt{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=mO++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof lt&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new lt(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new Ls(e);return i=>i.modified.indexOf(t)>-1?i:Ls.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}}let gO=0;class Ls{constructor(e){this.name=e,this.instances=[],this.id=gO++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(a=>a.base==e&&OO(t,a.modified));if(i)return i;let s=[],r=new lt(e.name,s,e,t);for(let a of t)a.instances.push(r);let o=yO(t);for(let a of e.set)if(!a.modified.length)for(let l of o)s.push(Ls.get(a,l));return r}}function OO(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function yO(n){let e=[[]];for(let t=0;ti.length-t.length)}function Nu(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,a=s;for(let u=0;;){if(a=="..."&&u>0&&u+3==s.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(a);if(!f)throw new RangeError("Invalid path: "+s);if(r.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),u+=f[0].length,u==s.length)break;let d=s[u++];if(u==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);a=s.slice(u)}let l=r.length-1,c=r[l];if(!c)throw new RangeError("Invalid path: "+s);let h=new Cn(i,o,l>0?r.slice(0,l):null);e[c]=h.sort(e[c])}}return Hu.add(e)}const Hu=new G({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Cn(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}});class Cn{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let a of r)for(let l of a.set){let c=t[l.id];if(c){o=o?o+" "+c:c;break}}return o},scope:i}}function AO(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function bO(n,e,t,i=0,s=n.length){let r=new SO(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}class SO{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:a,to:l}=e;if(a>=i||l<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let c=s,h=xO(e)||Cn.empty,u=AO(r,h.tags);if(u&&(c&&(c+=" "),c+=u,h.mode==1&&(s+=(s?" ":"")+u)),this.startSpan(Math.max(t,a),c),h.opaque)return;let f=e.tree&&e.tree.prop(G.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+a,1),p=this.highlighters.filter(g=>!g.scope||g.scope(f.tree.type)),m=e.firstChild();for(let g=0,y=a;;g++){let b=g=x||!e.nextSibling())););if(!b||x>i)break;y=b.to+a,y>t&&(this.highlightRange(d.cursor(),Math.max(t,b.from+a),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),c))}m&&e.parent()}else if(e.firstChild()){f&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),c)}while(e.nextSibling());e.parent()}}}function xO(n){let e=n.type.prop(Hu);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const T=lt.define,as=T(),Vt=T(),dc=T(Vt),pc=T(Vt),jt=T(),ls=T(jt),Vr=T(jt),wt=T(),li=T(wt),xt=T(),vt=T(),Go=T(),on=T(Go),cs=T(),O={comment:as,lineComment:T(as),blockComment:T(as),docComment:T(as),name:Vt,variableName:T(Vt),typeName:dc,tagName:T(dc),propertyName:pc,attributeName:T(pc),className:T(Vt),labelName:T(Vt),namespace:T(Vt),macroName:T(Vt),literal:jt,string:ls,docString:T(ls),character:T(ls),attributeValue:T(ls),number:Vr,integer:T(Vr),float:T(Vr),bool:T(jt),regexp:T(jt),escape:T(jt),color:T(jt),url:T(jt),keyword:xt,self:T(xt),null:T(xt),atom:T(xt),unit:T(xt),modifier:T(xt),operatorKeyword:T(xt),controlKeyword:T(xt),definitionKeyword:T(xt),moduleKeyword:T(xt),operator:vt,derefOperator:T(vt),arithmeticOperator:T(vt),logicOperator:T(vt),bitwiseOperator:T(vt),compareOperator:T(vt),updateOperator:T(vt),definitionOperator:T(vt),typeOperator:T(vt),controlOperator:T(vt),punctuation:Go,separator:T(Go),bracket:on,angleBracket:T(on),squareBracket:T(on),paren:T(on),brace:T(on),content:wt,heading:li,heading1:T(li),heading2:T(li),heading3:T(li),heading4:T(li),heading5:T(li),heading6:T(li),contentSeparator:T(wt),list:T(wt),quote:T(wt),emphasis:T(wt),strong:T(wt),link:T(wt),monospace:T(wt),strikethrough:T(wt),inserted:T(),deleted:T(),changed:T(),invalid:T(),meta:cs,documentMeta:T(cs),annotation:T(cs),processingInstruction:T(cs),definition:lt.defineModifier("definition"),constant:lt.defineModifier("constant"),function:lt.defineModifier("function"),standard:lt.defineModifier("standard"),local:lt.defineModifier("local"),special:lt.defineModifier("special")};for(let n in O){let e=O[n];e instanceof lt&&(e.name=n)}Gu([{tag:O.link,class:"tok-link"},{tag:O.heading,class:"tok-heading"},{tag:O.emphasis,class:"tok-emphasis"},{tag:O.strong,class:"tok-strong"},{tag:O.keyword,class:"tok-keyword"},{tag:O.atom,class:"tok-atom"},{tag:O.bool,class:"tok-bool"},{tag:O.url,class:"tok-url"},{tag:O.labelName,class:"tok-labelName"},{tag:O.inserted,class:"tok-inserted"},{tag:O.deleted,class:"tok-deleted"},{tag:O.literal,class:"tok-literal"},{tag:O.string,class:"tok-string"},{tag:O.number,class:"tok-number"},{tag:[O.regexp,O.escape,O.special(O.string)],class:"tok-string2"},{tag:O.variableName,class:"tok-variableName"},{tag:O.local(O.variableName),class:"tok-variableName tok-local"},{tag:O.definition(O.variableName),class:"tok-variableName tok-definition"},{tag:O.special(O.variableName),class:"tok-variableName2"},{tag:O.definition(O.propertyName),class:"tok-propertyName tok-definition"},{tag:O.typeName,class:"tok-typeName"},{tag:O.namespace,class:"tok-namespace"},{tag:O.className,class:"tok-className"},{tag:O.macroName,class:"tok-macroName"},{tag:O.propertyName,class:"tok-propertyName"},{tag:O.operator,class:"tok-operator"},{tag:O.comment,class:"tok-comment"},{tag:O.meta,class:"tok-meta"},{tag:O.invalid,class:"tok-invalid"},{tag:O.punctuation,class:"tok-punctuation"}]);var jr;const $i=new G;function _u(n){return K.define({combine:n?e=>e.concat(n):void 0})}const Za=new G;class mt{constructor(e,t,i=[],s=""){this.data=e,this.name=s,_.prototype.hasOwnProperty("tree")||Object.defineProperty(_.prototype,"tree",{get(){return Ce(this)}}),this.parser=t,this.extension=[si.of(this),_.languageData.of((r,o,a)=>{let l=mc(r,o,a),c=l.type.prop($i);if(!c)return[];let h=r.facet(c),u=l.type.prop(Za);if(u){let f=l.resolve(o-l.from,a);for(let d of u)if(d.test(f,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(i)}isActiveAt(e,t,i=-1){return mc(e,t,i).type.prop($i)==this.data}findRegions(e){let t=e.facet(si);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop($i)==this.data){i.push({from:o,to:o+r.length});return}let a=r.prop(G.mounted);if(a){if(a.tree.prop($i)==this.data){if(a.overlay)for(let l of a.overlay)i.push({from:l.from+o,to:l.to+o});else i.push({from:o,to:o+r.length});return}else if(a.overlay){let l=i.length;if(s(a.tree,a.overlay[0].from+o),i.length>l)return}}for(let l=0;li.isTop?t:void 0)]}),e.name)}configure(e,t){return new Xs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Ce(n){let e=n.field(mt.state,!1);return e?e.tree:ke.empty}class vO{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let an=null;class Bs{constructor(e,t,i=[],s,r,o,a,l){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=a,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new Bs(e,t,[],ke.empty,0,i,[],null)}startParse(){return this.parser.startParse(new vO(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ke.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Oi.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=an;an=this;try{return e()}finally{an=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=gc(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:a}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((c,h,u,f)=>l.push({fromA:c,toA:h,fromB:u,toB:f})),i=Oi.applyChanges(i,l),s=ke.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){a=[];for(let c of this.skipped){let h=e.mapPos(c.from,1),u=e.mapPos(c.to,-1);he.from&&(this.fragments=gc(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Yu{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let l=an;if(l){for(let c of s)l.tempSkipped.push(c);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=o,new ke(et.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return an}}function gc(n,e,t){return Oi.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class ji{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new ji(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Bs.create(e.facet(si).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new ji(i)}}mt.state=Te.define({create:ji.init,update(n,e){for(let t of e.effects)if(t.is(mt.setState))return t.value;return e.startState.facet(si)!=e.state.facet(si)?ji.init(e.state):n.apply(e)}});let Ju=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Ju=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Yr=typeof navigator<"u"&&(!((jr=navigator.scheduling)===null||jr===void 0)&&jr.isInputPending)?()=>navigator.scheduling.isInputPending():null,wO=xe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(mt.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(mt.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Ju(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,l=r.context.work(()=>Yr&&Yr()||Date.now()>o,s+(a?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:mt.setState.of(new ji(r.context))})),this.chunkBudget>0&&!(l&&!a)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>ze(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),si=K.define({combine(n){return n.length?n[0]:null},enables:n=>[mt.state,wO,$.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class kO{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const QO=K.define(),yr=K.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Is(n){let e=n.facet(yr);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Tn(n,e){let t="",i=n.tabSize,s=n.facet(yr)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?PO(n,t,e):null}class Ar{constructor(e,t={}){this.state=e,this.options=t,this.unit=Is(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return _i(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const ef=new G;function PO(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return tf(i,n,t)}function tf(n,e,t){for(let i=n;i;i=i.next){let s=TO(i.node);if(s)return s(Ea.create(e,t,i))}return 0}function CO(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function TO(n){let e=n.type.prop(ef);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(G.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>nf(o,!0,1,void 0,r&&!CO(o)?s.from:void 0)}return n.parent==null?RO:null}function RO(){return 0}class Ea extends Ar{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new Ea(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if($O(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return tf(this.context.next,this.base,this.pos)}}function $O(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function KO(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let a=t.to;;){let l=e.childAfter(a);if(!l||l==i)return null;if(!l.type.isSkipped){if(l.from>=o)return null;let c=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+c}}a=l.to}}function ZO({closing:n,align:e=!0,units:t=1}){return i=>nf(i,e,t,n)}function nf(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,a=i&&r.slice(o,o+i.length)==i||s==n.pos+o,l=e?KO(n):null;return l?a?n.column(l.from):n.column(l.to):n.baseIndent+(a?0:n.unit*t)}const MO=n=>n.baseIndent;function Nr({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}const EO=200;function UO(){return _.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+EO)return n;let r=t.sliceString(s.from,i);if(!e.some(c=>c.test(r)))return n;let{state:o}=n,a=-1,l=[];for(let{head:c}of o.selection.ranges){let h=o.doc.lineAt(c);if(h.from==a)continue;a=h.from;let u=Ma(o,h.from);if(u==null)continue;let f=/^\s*/.exec(h.text)[0],d=Tn(o,u);f!=d&&l.push({from:h.from,to:h.from+f.length,insert:d})}return l.length?[n,{changes:l,sequential:!0}]:n})}const FO=K.define(),sf=new G;function DO(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&a.from=e&&c.to>t&&(r=c)}}return r}function XO(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function qs(n,e,t){for(let i of n.facet(FO)){let s=i(n,e,t);if(s)return s}return LO(n,e,t)}function rf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const br=z.define({map:rf}),Ln=z.define({map:rf});function of(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const xi=Te.define({create(){return B.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((i,s)=>n=Oc(n,i,s)),n=n.map(e.changes);let t=[];for(let i of e.effects)i.is(br)&&!BO(n,i.value.from,i.value.to)?t.push(i.value):i.is(Ln)&&(n=n.update({filter:(s,r)=>i.value.from!=s||i.value.to!=r,filterFrom:i.value.from,filterTo:i.value.to}));if(t.length){let{preparePlaceholder:i}=e.state.facet(cf),s=t.map(r=>(i?B.replace({widget:new YO(i(e.state,r))}):yc).range(r.from,r.to));n=n.update({add:s})}return e.selection&&(n=Oc(n,e.selection.main.head)),n},provide:n=>$.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function Ws(n,e,t){var i;let s=null;return(i=n.field(xi,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function BO(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function af(n,e){return n.field(xi,!1)?e:e.concat(z.appendConfig.of(hf()))}const IO=n=>{for(let e of of(n)){let t=qs(n.state,e.from,e.to);if(t)return n.dispatch({effects:af(n.state,[br.of(t),lf(n,t)])}),!0}return!1},qO=n=>{if(!n.state.field(xi,!1))return!1;let e=[];for(let t of of(n)){let i=Ws(n.state,t.from,t.to);i&&e.push(Ln.of(i),lf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function lf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return $.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}const WO=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(xi,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(Ln.of({from:i,to:s}))}),n.dispatch({effects:t}),!0},VO=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:IO},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:qO},{key:"Ctrl-Alt-[",run:WO},{key:"Ctrl-Alt-]",run:zO}],jO={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},cf=K.define({combine(n){return yt(n,jO)}});function hf(n){return[xi,GO]}function uf(n,e){let{state:t}=n,i=t.facet(cf),s=o=>{let a=n.lineBlockAt(n.posAtDOM(o.target)),l=Ws(n.state,a.from,a.to);l&&n.dispatch({effects:Ln.of(l)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}const yc=B.replace({widget:new class extends Ut{toDOM(n){return uf(n,null)}}});class YO extends Ut{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return uf(e,this.value)}}const NO={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Hr extends Mt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function HO(n={}){let e={...NO,...n},t=new Hr(e,!0),i=new Hr(e,!1),s=xe.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(si)!=o.state.facet(si)||o.startState.field(xi,!1)!=o.state.field(xi,!1)||Ce(o.startState)!=Ce(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let a=new Bt;for(let l of o.viewportLineBlocks){let c=Ws(o.state,l.from,l.to)?i:qs(o.state,l.from,l.to)?t:null;c&&a.add(l.from,l.from,c)}return a.finish()}}),{domEventHandlers:r}=e;return[s,Bu({class:"cm-foldGutter",markers(o){var a;return((a=o.plugin(s))===null||a===void 0?void 0:a.markers)||N.empty},initialSpacer(){return new Hr(e,!1)},domEventHandlers:{...r,click:(o,a,l)=>{if(r.click&&r.click(o,a,l))return!0;let c=Ws(o.state,a.from,a.to);if(c)return o.dispatch({effects:Ln.of(c)}),!0;let h=qs(o.state,a.from,a.to);return h?(o.dispatch({effects:br.of(h)}),!0):!1}}}),hf()]}const GO=$.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class Xn{constructor(e,t){this.specs=e;let i;function s(a){let l=ei.newName();return(i||(i=Object.create(null)))["."+l]=a,l}const r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof mt?a=>a.prop($i)==o.data:o?a=>a==o:void 0,this.style=Gu(e.map(a=>({tag:a.tag,class:a.class||s(Object.assign({},a,{tag:null}))})),{all:r}).style,this.module=i?new ei(i):null,this.themeType=t.themeType}static define(e,t){return new Xn(e,t||{})}}const _o=K.define(),_O=K.define({combine(n){return n.length?[n[0]]:null}});function Gr(n){let e=n.facet(_o);return e.length?e:n.facet(_O)}function JO(n,e){let t=[t0],i;return n instanceof Xn&&(n.module&&t.push($.styleModule.of(n.module)),i=n.themeType),i?t.push(_o.computeN([$.darkTheme],s=>s.facet($.darkTheme)==(i=="dark")?[n]:[])):t.push(_o.of(n)),t}class e0{constructor(e){this.markCache=Object.create(null),this.tree=Ce(e.state),this.decorations=this.buildDeco(e,Gr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Ce(e.state),i=Gr(e.state),s=i!=Gr(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return B.none;let i=new Bt;for(let{from:s,to:r}of e.visibleRanges)bO(this.tree,t,(o,a,l)=>{i.add(o,a,this.markCache[l]||(this.markCache[l]=B.mark({class:l})))},s,r);return i.finish()}}const t0=ri.high(xe.fromClass(e0,{decorations:n=>n.decorations})),i0=Xn.define([{tag:O.meta,color:"#404740"},{tag:O.link,textDecoration:"underline"},{tag:O.heading,textDecoration:"underline",fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strong,fontWeight:"bold"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.keyword,color:"#708"},{tag:[O.atom,O.bool,O.url,O.contentSeparator,O.labelName],color:"#219"},{tag:[O.literal,O.inserted],color:"#164"},{tag:[O.string,O.deleted],color:"#a11"},{tag:[O.regexp,O.escape,O.special(O.string)],color:"#e40"},{tag:O.definition(O.variableName),color:"#00f"},{tag:O.local(O.variableName),color:"#30a"},{tag:[O.typeName,O.namespace],color:"#085"},{tag:O.className,color:"#167"},{tag:[O.special(O.variableName),O.macroName],color:"#256"},{tag:O.definition(O.propertyName),color:"#00c"},{tag:O.comment,color:"#940"},{tag:O.invalid,color:"#f00"}]),n0=$.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ff=1e4,df="()[]{}",pf=K.define({combine(n){return yt(n,{afterCursor:!0,brackets:df,maxScanDistance:ff,renderMatch:o0})}}),s0=B.mark({class:"cm-matchingBracket"}),r0=B.mark({class:"cm-nonmatchingBracket"});function o0(n){let e=[],t=n.matched?s0:r0;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Ac(n){let e=[],t=n.facet(pf);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Rt(n,i.head,-1,t)||i.head>0&&Rt(n,i.head-1,1,t)||t.afterCursor&&(Rt(n,i.head,1,t)||i.headn.decorations}),l0=[a0,n0];function c0(n={}){return[pf.of(n),l0]}const h0=new G;function Jo(n,e,t){let i=n.prop(e<0?G.openedBy:G.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function ea(n){let e=n.type.prop(h0);return e?e(n.node):n}function Rt(n,e,t,i={}){let s=i.maxScanDistance||ff,r=i.brackets||df,o=Ce(n),a=o.resolveInner(e,t);for(let l=a;l;l=l.parent){let c=Jo(l.type,t,r);if(c&&l.from0?e>=h.from&&eh.from&&e<=h.to))return u0(n,e,t,l,h,c,r)}}return f0(n,e,t,o,a.type,s,r)}function u0(n,e,t,i,s,r,o){let a=i.parent,l={from:s.from,to:s.to},c=0,h=a?.cursor();if(h&&(t<0?h.childBefore(i.from):h.childAfter(i.to)))do if(t<0?h.to<=i.from:h.from>=i.to){if(c==0&&r.indexOf(h.type.name)>-1&&h.from0)return null;let c={from:t<0?e-1:e,to:t>0?e+1:e},h=n.doc.iterRange(e,t>0?n.doc.length:0),u=0;for(let f=0;!h.next().done&&f<=r;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=s))if(y%2==0==t>0)u++;else{if(u==1)return{start:c,end:{from:p+m,to:p+m+1},matched:y>>1==l>>1};u--}}t>0&&(f+=d.length)}return h.done?{start:c,matched:!1}:null}const d0=Object.create(null),bc=[et.none],Sc=[],xc=Object.create(null),p0=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])p0[n]=m0(d0,e);function _r(n,e){Sc.indexOf(n)>-1||(Sc.push(n),console.warn(e))}function m0(n,e){let t=[];for(let a of e.split(" ")){let l=[];for(let c of a.split(".")){let h=n[c]||O[c];h?typeof h=="function"?l.length?l=l.map(h):_r(c,`Modifier ${c} used at start of tag`):l.length?_r(c,`Tag ${c} used as modifier`):l=Array.isArray(h)?h:[h]:_r(c,`Unknown highlighting tag ${c}`)}for(let c of l)t.push(c)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(a=>a.id),r=xc[s];if(r)return r.id;let o=xc[s]=et.define({id:bc.length,name:i,props:[Nu({[i]:t})]});return bc.push(o),o.id}fe.RTL,fe.LTR;const g0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Fa(n.state,t.from);return i.line?O0(n):i.block?A0(n):!1};function Ua(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const O0=Ua(x0,0),y0=Ua(mf,0),A0=Ua((n,e)=>mf(n,e,S0(e)),0);function Fa(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ln=50;function b0(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-ln,i),o=n.sliceDoc(s,s+ln),a=/\s*$/.exec(r)[0].length,l=/^\s*/.exec(o)[0].length,c=r.length-a;if(r.slice(c-e.length,c)==e&&o.slice(l,l+t.length)==t)return{open:{pos:i-a,margin:a&&1},close:{pos:s+l,margin:l&&1}};let h,u;s-i<=2*ln?h=u=n.sliceDoc(i,s):(h=n.sliceDoc(i,i+ln),u=n.sliceDoc(s-ln,s));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(u)[0].length,p=u.length-d-t.length;return h.slice(f,f+e.length)==e&&u.slice(p,p+t.length)==t?{open:{pos:i+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(u.charAt(p-1))?1:0}}:null}function S0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function mf(n,e,t=e.selection.ranges){let i=t.map(r=>Fa(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>b0(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,a;os&&(r==o||o>u.from)){s=u.from;let f=/^\s*/.exec(u.text)[0].length,d=f==u.length,p=u.text.slice(f,f+c.length)==c?f:-1;fr.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:a,token:l,indent:c,empty:h,single:u}of i)(u||!h)&&r.push({from:a.from+c,insert:l+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:a,token:l}of i)if(a>=0){let c=o.from+a,h=c+l.length;o.text[h-o.from]==" "&&h++,r.push({from:c,to:h})}return{changes:r}}return null}const ta=Wt.define(),ws=Wt.define(),v0=K.define(),gf=K.define({combine(n){return yt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Da=Te.define({create(){return $t.empty},update(n,e){let t=e.state.facet(gf),i=e.annotation(ta);if(i){let l=_e.fromTransaction(e,i.selection),c=i.side,h=c==0?n.undone:n.done;return l?h=Vs(h,h.length,t.minDepth,l):h=Af(h,e.startState.selection),new $t(c==0?i.rest:h,c==0?h:i.rest)}let s=e.annotation(ws);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(Pe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=_e.fromTransaction(e),o=e.annotation(Pe.time),a=e.annotation(Pe.userEvent);return r?n=n.addChanges(r,o,a,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,a,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new $t(n.done.map(_e.fromJSON),n.undone.map(_e.fromJSON))}});function w0(n={}){return[Da,gf.of(n),$.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?La:e.inputType=="historyRedo"?zs:null;return i?(e.preventDefault(),i(t)):!1}})]}function Sr(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Da,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}const La=Sr(0,!1),zs=Sr(1,!1),k0=Sr(0,!0),Q0=Sr(1,!0);function Of(n){return function(e){let t=e.field(Da,!1);if(!t)return 0;let i=n==0?t.done:t.undone;return i.length-(i.length&&!i[0].changes?1:0)}}const vc=Of(0),wc=Of(1);class _e{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new _e(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new _e(e.changes&&Re.fromJSON(e.changes),[],e.mapped&&Zt.fromJSON(e.mapped),e.startSelection&&A.fromJSON(e.startSelection),e.selectionsAfter.map(A.fromJSON))}static fromTransaction(e,t){let i=ht;for(let s of e.startState.facet(v0)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new _e(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ht)}static selection(e){return new _e(void 0,ht,void 0,void 0,e)}}function Vs(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function P0(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,a)=>{for(let l=0;l=c&&o<=h&&(i=!0)}}),i}function C0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function yf(n,e){return n.length?e.length?n.concat(e):n:e}const ht=[],T0=200;function Af(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-T0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Vs(n,n.length-1,1e9,t.setSelAfter(i)))}else return[_e.selection([e])]}function R0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Jr(n,e){if(!n.length)return n;let t=n.length,i=ht;for(;t;){let s=$0(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[_e.selection(i)]:ht}function $0(n,e,t){let i=yf(n.selectionsAfter.length?n.selectionsAfter.map(a=>a.map(e)):ht,t);if(!n.changes)return _e.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new _e(s,z.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}const K0=/^(input\.type|delete)($|\.)/;class $t{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new $t(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,a=o[o.length-1];return a&&a.changes&&!a.changes.empty&&e.changes&&(!i||K0.test(i))&&(!a.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):xr(t,e))}function Be(n){return n.textDirectionAt(n.state.selection.main.head)==fe.LTR}const Sf=n=>bf(n,!Be(n)),xf=n=>bf(n,Be(n));function vf(n,e){return bt(n,t=>t.empty?n.moveByGroup(t,e):xr(t,e))}const M0=n=>vf(n,!Be(n)),E0=n=>vf(n,Be(n));function U0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function vr(n,e,t){let i=Ce(n).resolveInner(e.head),s=t?G.closedBy:G.openedBy;for(let l=e.head;;){let c=t?i.childAfter(l):i.childBefore(l);if(!c)break;U0(n,c,s)?i=c:l=t?c.to:c.from}let r=i.type.prop(s),o,a;return r&&(o=t?Rt(n,i.from,1):Rt(n,i.to,-1))&&o.matched?a=t?o.end.to:o.end.from:a=t?i.to:i.from,A.cursor(a,t?-1:1)}const F0=n=>bt(n,e=>vr(n.state,e,!Be(n))),D0=n=>bt(n,e=>vr(n.state,e,Be(n)));function wf(n,e){return bt(n,t=>{if(!t.empty)return xr(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const kf=n=>wf(n,!1),Qf=n=>wf(n,!0);function Pf(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):xr(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),a=n.scrollDOM.getBoundingClientRect(),l=a.top+t.marginTop,c=a.bottom-t.marginBottom;o&&o.top>l&&o.bottomCf(n,!1),ia=n=>Cf(n,!0);function oi(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=A.cursor(i.from+r))}return s}const L0=n=>bt(n,e=>oi(n,e,!0)),X0=n=>bt(n,e=>oi(n,e,!1)),B0=n=>bt(n,e=>oi(n,e,!Be(n))),I0=n=>bt(n,e=>oi(n,e,Be(n))),q0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).from,1)),W0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).to,-1));function z0(n,e,t){let i=!1,s=Ji(n.selection,r=>{let o=Rt(n,r.head,-1)||Rt(n,r.head,1)||r.head>0&&Rt(n,r.head-1,1)||r.headz0(n,e);function ft(n,e,t){let i=Ji(n.state.selection,s=>{s.undirectional&&s.head>=s.anchor!=e&&(s=A.range(s.head,s.anchor));let r=t(s);return A.range(s.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return i.eq(n.state.selection)?!1:(n.dispatch(At(n.state,i)),!0)}function Tf(n,e){return ft(n,e,t=>n.moveByChar(t,e))}const Rf=n=>Tf(n,!Be(n)),$f=n=>Tf(n,Be(n));function Kf(n,e){return ft(n,e,t=>n.moveByGroup(t,e))}const j0=n=>Kf(n,!Be(n)),Y0=n=>Kf(n,Be(n)),N0=n=>{let e=!Be(n);return ft(n,e,t=>vr(n.state,t,e))},H0=n=>{let e=Be(n);return ft(n,e,t=>vr(n.state,t,e))};function Zf(n,e){return ft(n,e,t=>n.moveVertically(t,e))}const Mf=n=>Zf(n,!1),Ef=n=>Zf(n,!0);function Uf(n,e){return ft(n,e,t=>n.moveVertically(t,e,Pf(n).height))}const Qc=n=>Uf(n,!1),Pc=n=>Uf(n,!0),G0=n=>ft(n,!0,e=>oi(n,e,!0)),_0=n=>ft(n,!1,e=>oi(n,e,!1)),J0=n=>{let e=!Be(n);return ft(n,e,t=>oi(n,t,e))},ey=n=>{let e=Be(n);return ft(n,e,t=>oi(n,t,e))},ty=n=>ft(n,!1,e=>A.cursor(n.lineBlockAt(e.head).from)),iy=n=>ft(n,!0,e=>A.cursor(n.lineBlockAt(e.head).to)),Cc=({state:n,dispatch:e})=>(e(At(n,{anchor:0})),!0),Tc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.doc.length})),!0),Rc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:0})),!0),$c=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),ny=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),sy=({state:n,dispatch:e})=>{let t=wr(n).map(({from:i,to:s})=>A.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:A.create(t),userEvent:"select"})),!0},ry=({state:n,dispatch:e})=>{let t=Ji(n.selection,i=>{let s=Ce(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:a}=o;if((a.from=i.to||a.to>i.to&&a.from<=i.from)&&o.next)return A.range(a.to,a.from)}return i});return t.eq(n.selection)?!1:(e(At(n,t)),!0)};function Ff(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let a=r;;){let l=n.moveVertically(a,e);if(l.heado.to){s.some(c=>c.head==l.head)||s.push(l);break}else{if(l.head==a.head)break;a=l}}}return s.length==i.ranges.length?!1:(n.dispatch(At(t,A.create(s,s.length-1))),!0)}const oy=n=>Ff(n,!1),ay=n=>Ff(n,!0),ly=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=A.create([t.main]):t.main.empty||(i=A.create([A.cursor(t.main.head)])),i?(e(At(n,i)),!0):!1};function Bn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:a}=r;if(o==a){let l=e(r);lo&&(t="delete.forward",l=hs(n,l,!0)),o=Math.min(o,l),a=Math.max(a,l)}else o=hs(n,o,!1),a=hs(n,a,!0);return o==a?{range:r}:{changes:{from:o,to:a},range:A.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}const Df=(n,e,t)=>Bn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),a,l;if(t&&!e&&s>o.from&&sDf(n,!1,!0),Lf=n=>Df(n,!0,!1),Xf=(n,e)=>Bn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let a=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let l=Ze(r.text,i-r.from,e)+r.from,c=r.text.slice(Math.min(i,l)-r.from,Math.max(i,l)-r.from),h=o(c);if(a!=null&&h!=a)break;(c!=" "||i!=t.head)&&(a=h),i=l}return i}),Bf=n=>Xf(n,!1),cy=n=>Xf(n,!0),hy=n=>Bn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headBn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),fy=n=>Bn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:se.of(["",""])},range:A.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},py=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Ze(r.text,s-r.from,!1)+r.from,a=s==r.to?s+1:Ze(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:a,insert:n.doc.slice(s,a).append(n.doc.slice(o,s))},range:A.cursor(a)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function wr(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function If(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of wr(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),a=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let l of r.ranges)s.push(A.range(Math.min(n.doc.length,l.anchor+a),Math.min(n.doc.length,l.head+a)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let l of r.ranges)s.push(A.range(l.anchor-a,l.head-a))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:A.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const my=({state:n,dispatch:e})=>If(n,e,!1),gy=({state:n,dispatch:e})=>If(n,e,!0);function qf(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of wr(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const Oy=({state:n,dispatch:e})=>qf(n,e,!1),yy=({state:n,dispatch:e})=>qf(n,e,!0),Ay=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(wr(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),a=n.coordsAtPos(s.head,s.assoc||1);a&&(r=o.bottom+n.documentTop-a.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function by(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Ce(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(G.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}const Kc=Wf(!1),Sy=Wf(!0);function Wf(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,a=e.doc.lineAt(r),l=!n&&r==o&&by(e,r);n&&(r=o=(o<=a.to?a:e.doc.lineAt(o)).to);let c=new Ar(e,{simulateBreak:r,simulateDoubleBreak:!!l}),h=Ma(c,r);for(h==null&&(h=_i(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));oa.from&&r{let s=[];for(let o=i.from;o<=i.to;){let a=n.doc.lineAt(o);a.number>t&&(i.empty||i.to>a.from)&&(e(a,s,i),t=a.number),o=a.to+1}let r=n.changes(s);return{changes:s,range:A.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}const xy=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Ar(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=Xa(n,(r,o,a)=>{let l=Ma(i,r.from);if(l==null)return;/\S/.test(r.text)||(l=0);let c=/^\s*/.exec(r.text)[0],h=Tn(n,l);(c!=h||a.fromn.readOnly?!1:(e(n.update(Xa(n,(t,i)=>{i.push({from:t.from,insert:n.facet(yr)})}),{userEvent:"input.indent"})),!0),Vf=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Xa(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=_i(s,n.tabSize),o=0,a=Tn(n,Math.max(0,r-Is(n)));for(;o(n.setTabFocusMode(),!0),wy=[{key:"Ctrl-b",run:Sf,shift:Rf,preventDefault:!0},{key:"Ctrl-f",run:xf,shift:$f},{key:"Ctrl-p",run:kf,shift:Mf},{key:"Ctrl-n",run:Qf,shift:Ef},{key:"Ctrl-a",run:q0,shift:ty},{key:"Ctrl-e",run:W0,shift:iy},{key:"Ctrl-d",run:Lf},{key:"Ctrl-h",run:na},{key:"Ctrl-k",run:hy},{key:"Ctrl-Alt-h",run:Bf},{key:"Ctrl-o",run:dy},{key:"Ctrl-t",run:py},{key:"Ctrl-v",run:ia}],ky=[{key:"ArrowLeft",run:Sf,shift:Rf,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:M0,shift:j0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:B0,shift:J0,preventDefault:!0},{key:"ArrowRight",run:xf,shift:$f,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:E0,shift:Y0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:I0,shift:ey,preventDefault:!0},{key:"ArrowUp",run:kf,shift:Mf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Cc,shift:Rc},{mac:"Ctrl-ArrowUp",run:kc,shift:Qc},{key:"ArrowDown",run:Qf,shift:Ef,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Tc,shift:$c},{mac:"Ctrl-ArrowDown",run:ia,shift:Pc},{key:"PageUp",run:kc,shift:Qc},{key:"PageDown",run:ia,shift:Pc},{key:"Home",run:X0,shift:_0,preventDefault:!0},{key:"Mod-Home",run:Cc,shift:Rc},{key:"End",run:L0,shift:G0,preventDefault:!0},{key:"Mod-End",run:Tc,shift:$c},{key:"Enter",run:Kc,shift:Kc},{key:"Mod-a",run:ny},{key:"Backspace",run:na,shift:na,preventDefault:!0},{key:"Delete",run:Lf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Bf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:cy,preventDefault:!0},{mac:"Mod-Backspace",run:uy,preventDefault:!0},{mac:"Mod-Delete",run:fy,preventDefault:!0}].concat(wy.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Qy=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:F0,shift:N0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:D0,shift:H0},{key:"Alt-ArrowUp",run:my},{key:"Shift-Alt-ArrowUp",run:Oy},{key:"Alt-ArrowDown",run:gy},{key:"Shift-Alt-ArrowDown",run:yy},{key:"Mod-Alt-ArrowUp",run:oy},{key:"Mod-Alt-ArrowDown",run:ay},{key:"Escape",run:ly},{key:"Mod-Enter",run:Sy},{key:"Alt-l",mac:"Ctrl-l",run:sy},{key:"Mod-i",run:ry,preventDefault:!0},{key:"Mod-[",run:Vf},{key:"Mod-]",run:zf},{key:"Mod-Alt-\\",run:xy},{key:"Shift-Mod-k",run:Ay},{key:"Shift-Mod-\\",run:V0},{key:"Mod-/",run:g0},{key:"Alt-A",run:y0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:vy}].concat(ky),Py={key:"Tab",run:zf,shift:Vf};class jf{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Ce(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(Nf(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function Zc(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Cy(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Cy(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function Ty(n,e){return t=>{for(let i=Ce(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}let Mc=class{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}};function yi(n){return n.selection.main.from}function Nf(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const Ba=Wt.define();function Ry(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(a=>{if(a!=s&&t!=i&&n.sliceDoc(a.from+r,a.from+o)!=n.sliceDoc(t,i))return{range:a};let l=n.toText(e);return{changes:{from:a.from+r,to:i==s.from?a.to:a.from+o,insert:l},range:A.cursor(a.from+r+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ec=new WeakMap;function $y(n){if(!Array.isArray(n))return n;let e=Ec.get(n);return e||Ec.set(n,e=Yf(n)),e}const js=z.define(),Rn=z.define();class Ky{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&k<=57||k>=97&&k<=122?2:k>=65&&k<=90?1:0:(S=fa(k))!=S.toLowerCase()?1:S!=S.toUpperCase()?2:0;(!b||w==1&&g||C==0&&w!=0)&&(t[u]==k||i[u]==k&&(f=!0)?o[u++]=b:o.length&&(y=!1)),C=w,b+=Qt(k)}return u==l&&o[0]==0&&y?this.result(-100+(f?-200:0),o,e):d==l&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):a>-1?this.ret(-700-e.length,[a,a+this.pattern.length]):d==l?this.ret(-900-e.length,[p,m]):u==l?this.result(-100+(f?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let a=o+(this.astral?Qt(Ne(i,o)):1);r&&s[r-1]==o?s[r-1]=a:(s[r++]=o,s[r++]=a)}return this.ret(e-i.length,s)}}class Zy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:My,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Uc(e(i),t(i)),optionClass:(e,t)=>i=>Uc(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Uc(n,e){return n?e?n+" "+e:n:e}function My(n,e,t,i,s,r){let o=n.textDirection==fe.RTL,a=o,l=!1,c="top",h,u,f=e.left-s.left,d=s.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(a&&f=m||b>e.top?h=t.bottom-e.top:(c="bottom",h=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${c}: ${h/g}px; max-width: ${u/y}px`,class:"cm-completionInfo-"+(l?o?"left-narrow":"right-narrow":a?"left":"right")}}const Ia=z.define();function Ey(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let a=t.displayLabel||t.label,l=0;for(let c=0;cl&&o.appendChild(document.createTextNode(a.slice(l,h)));let f=o.appendChild(document.createElement("span"));f.appendChild(document.createTextNode(a.slice(h,u))),f.className="cm-completionMatchedText",l=u}return lt.position-i.position).map(t=>t.render)}function eo(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.ceil((n-e)/t);return{from:n-i*t,to:n-(i-1)*t}}class Uy{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,a=e.state.facet(Ke);this.optionContent=Ey(a),this.optionClass=a.optionClass,this.tooltipClass=a.tooltipClass,this.range=eo(r.length,o,a.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:c}=e.state.field(t).open;for(let h=l.target,u;h&&h!=this.dom;h=h.parentNode)if(h.nodeName=="LI"&&(u=/-(\d+)$/.exec(h.id))&&+u[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;h!=null&&(e.dispatch({effects:Ia.of(h)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let c=e.state.field(this.stateField,!1);c&&c.tooltip&&e.state.facet(Ke).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Rn.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:a}=i.open;(!s.open||s.open.options!=r)&&(this.range=eo(r.length,o,e.state.facet(Ke).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),a!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!a)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ke).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:s}=t.options[t.selected],{info:r}=s;if(!r)return;let o=typeof r=="string"?document.createTextNode(r):r(s);if(!o)return;"then"in o?o.then(a=>{a&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(a,s)}).catch(a=>ze(this.view.state,a,"completion info")):(this.addInfoPane(o,s),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&Dy(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=f,typeof c!="string"&&c.header)s.appendChild(c.header(c));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=f}}const h=s.appendChild(document.createElement("li"));h.id=t+"-"+o,h.setAttribute("role","option");let u=this.optionClass(a);u&&(h.className=u);for(let f of this.optionContent){let d=f(a,this.view.state,this.view,l);d&&h.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew Uy(t,n,e)}function Dy(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function Fc(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Ly(n,e){let t=[],i=null,s=null,r=h=>{t.push(h);let{section:u}=h.completion;if(u){i||(i=[]);let f=typeof u=="string"?u:u.name;i.some(d=>d.name==f)||i.push(typeof u=="string"?{name:f}:u)}},o=e.facet(Ke);for(let h of n)if(h.hasResult()){let u=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)r(new Mc(f,h.source,u?u(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),d,p=o.filterStrict?new Zy(f):new Ky(f);for(let m of h.result.options)if(d=p.match(m.label)){let g=m.displayLabel?u?u(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(r(new Mc(m,h.source,g,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:b}=m.section;s||(s=Object.create(null)),s[b]=Math.max(y,s[b]||-1e9)}}}}if(i){let h=Object.create(null),u=0,f=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?s[p.name]-s[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.namef.score-u.score||c(u.completion,f.completion))){let u=h.completion;!l||l.label!=u.label||l.detail!=u.detail||l.type!=null&&u.type!=null&&l.type!=u.type||l.apply!=u.apply||l.boost!=u.boost?a.push(h):Fc(h.completion)>Fc(l)&&(a[a.length-1]=h),l=h.completion}return a}class Ki{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Ki(this.options,Dc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(c=>c.isPending))return s.setDisabled();let a=Ly(e,t);if(!a.length)return s&&e.some(c=>c.isPending)?s.setDisabled():null;let l=t.facet(Ke).selectOnOpen?0:-1;if(s&&s.selected!=l&&s.selected!=-1){let c=s.options[s.selected].completion;for(let h=0;hh.hasResult()?Math.min(c,h.from):c,1e8),create:zy,above:r.aboveCursor},s?s.timestamp:Date.now(),l,!1)}map(e){return new Ki(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Ki(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ys{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Ys(qy,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Ke),r=(i.override||t.languageDataAt("autocomplete",yi(t)).map($y)).map(l=>(this.active.find(h=>h.source==l)||new ut(l,this.active.some(h=>h.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((l,c)=>l==this.active[c])&&(r=this.active);let o=this.open,a=e.effects.some(l=>l.is(qa));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!Xy(r,this.active)||a?o=Ki.build(r,t,this.id,o,i,a):o&&o.disabled&&!r.some(l=>l.isPending)&&(o=null),!o&&r.every(l=>!l.isPending)&&r.some(l=>l.hasResult())&&(r=r.map(l=>l.hasResult()?new ut(l.source,0):l));for(let l of e.effects)l.is(Ia)&&(o=o&&o.setSelected(l.value,this.id));return r==this.active&&o==this.open?this:new Ys(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?By:Iy}}function Xy(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const qy=[];function Hf(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(Ba);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class ut{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Hf(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new ut(s.source,0)),i&4&&s.state==0&&(s=new ut(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(js))s=new ut(s.source,1,r.value);else if(r.is(Rn))s=new ut(s.source,0);else if(r.is(qa))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(yi(e.state))}}class Fi extends ut{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),a=yi(e.state);if(a>o||!s||t&2&&(yi(e.startState)==this.from||at.map(e))}}),He=Te.define({create(){return Ys.start()},update(n,e){return n.update(e)},provide:n=>[gr.from(n,e=>e.tooltip),$.contentAttributes.from(n,e=>e.attrs)]});function Wa(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(He).active.find(s=>s.source==e.source);return i instanceof Fi?(typeof t=="string"?n.dispatch({...Ry(n.state,t,i.from,i.to),annotations:Ba.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const zy=Fy(He,Wa);function us(n,e="option"){return t=>{let i=t.state.field(He,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return a<0?a=e=="page"?0:o-1:a>=o&&(a=e=="page"?o-1:0),t.dispatch({effects:Ia.of(a)}),!0}}const Vy=n=>{let e=n.state.field(He,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(He,!1)?(n.dispatch({effects:js.of(!0)}),!0):!1,jy=n=>{let e=n.state.field(He,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Rn.of(null)}),!0)};class Yy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Hy=1e3,Gy=xe.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(He).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(He),t=n.state.facet(Ke);if(!n.selectionSet&&!n.docChanged&&n.startState.field(He)==e)return;let i=n.transactions.some(r=>{let o=Hf(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;rNy&&Date.now()-o.time>Hy){for(let a of o.context.abortListeners)try{a()}catch(l){ze(this.view.state,l)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(js)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(He);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=yi(e),i=new jf(e,t,n.explicit,this.view),s=new Yy(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:Rn.of(null)}),ze(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ke),i=this.view.state.field(He);for(let s=0;sa.source==r.active.source);if(o&&o.isPending)if(r.done==null){let a=new ut(r.active.source,0);for(let l of r.updates)a=a.update(l,t);a.isPending||e.push(a)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:qa.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(He,!1);if(e&&e.tooltip&&this.view.state.facet(Ke).closeOnBlur){let t=e.open&&Uu(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Rn.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:js.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Jy=ri.highest($.domEventHandlers({keydown(n,e){let t=e.state.field(He,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&Wa(e,i),!1}})),Gf=$.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class eA{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}}class za{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,De.TrackDel),i=e.mapPos(this.to,1,De.TrackDel);return t==null||i==null?null:new za(this.field,t,i)}}class Va{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let l of this.lines){if(i.length){let c=o,h=/^\t*/.exec(l)[0].length;for(let u=0;unew za(l.field,s[l.line]+l.from,s[l.line]+l.to));return{text:i,ranges:a}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let a=r[1]?+r[1]:null,l=r[2]||r[3]||"",c=-1;a===0&&(a=1e9);let h=l.replace(/\\[{}]/g,u=>u[1]);for(let u=0;u=c&&f.field++}for(let u of s)if(u.line==i.length&&u.from>r.index){let f=r[2]?3+(r[1]||"").length:2;u.from-=f,u.to-=f}s.push(new eA(c,i.length,r.index,r.index+h.length)),o=o.slice(0,r.index)+l+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(a,l,c)=>{for(let h of s)h.line==i.length&&h.from>c&&(h.from--,h.to--);return l}),i.push(o)}return new Va(i,s)}}let tA=B.widget({widget:new class extends Ut{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),iA=B.mark({class:"cm-snippetField"});class en{constructor(e,t){this.ranges=e,this.active=t,this.deco=B.set(e.map(i=>(i.from==i.to?tA:iA).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new en(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const In=z.define({map(n,e){return n&&n.map(e)}}),nA=z.define(),$n=Te.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(In))return t.value;if(t.is(nA)&&n)return new en(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>$.decorations.from(n,e=>e?e.deco:B.none)});function ja(n,e){return A.create(n.filter(t=>t.field==e).map(t=>A.range(t.from,t.to)))}function sA(n){let e=Va.parse(n);return(t,i,s,r)=>{let{text:o,ranges:a}=e.instantiate(t.state,s),{main:l}=t.state.selection,c={changes:{from:s,to:r==l.from?l.to:r,insert:se.of(o)},scrollIntoView:!0,annotations:i?[Ba.of(i),Pe.userEvent.of("input.complete")]:void 0};if(a.length&&(c.selection=ja(a,0)),a.some(h=>h.field>0)){let h=new en(a,0),u=c.effects=[In.of(h)];t.state.field($n,!1)===void 0&&u.push(z.appendConfig.of([$n,cA,hA,Gf]))}t.dispatch(t.state.update(c))}}function _f(n){return({state:e,dispatch:t})=>{let i=e.field($n,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:ja(i.ranges,s),effects:In.of(r?null:new en(i.ranges,s)),scrollIntoView:!0})),!0}}const rA=({state:n,dispatch:e})=>n.field($n,!1)?(e(n.update({effects:In.of(null)})),!0):!1,oA=_f(1),aA=_f(-1),lA=[{key:"Tab",run:oA,shift:aA},{key:"Escape",run:rA}],Lc=K.define({combine(n){return n.length?n[0]:lA}}),cA=ri.highest(mr.compute([Lc],n=>n.facet(Lc)));function Ye(n,e){return{...e,apply:sA(n)}}const hA=$.domEventHandlers({mousedown(n,e){let t=e.state.field($n,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:ja(t.ranges,s.field),effects:In.of(t.ranges.some(r=>r.field>s.field)?new en(t.ranges,s.field):null),scrollIntoView:!0}),!0)}}),Kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},mi=z.define({map(n,e){let t=e.mapPos(n,-1,De.TrackAfter);return t??void 0}}),Ya=new class extends Jt{};Ya.startSide=1;Ya.endSide=-1;const Jf=Te.define({create(){return N.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(mi)&&(n=n.update({add:[Ya.range(t.value,t.value+1)]}));return n}});function uA(){return[dA,Jf]}const io="()[]{}<>«»»«[]{}";function ed(n){for(let e=0;e{if((fA?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Qt(Ne(i,0))==1||e!=s.from||t!=s.to)return!1;let r=gA(n.state,i);return r?(n.dispatch(r),!0):!1}),pA=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=td(n,n.selection.main.head).brackets||Kn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let a=OA(n.doc,o.head);for(let l of i)if(l==a&&kr(n.doc,o.head)==ed(Ne(l,0)))return{changes:{from:o.head-l.length,to:o.head+l.length},range:A.cursor(o.head-l.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},mA=[{key:"Backspace",run:pA}];function gA(n,e){let t=td(n,n.selection.main.head),i=t.brackets||Kn.brackets;for(let s of i){let r=ed(Ne(s,0));if(e==s)return r==s?bA(n,s,i.indexOf(s+s+s)>-1,t):yA(n,s,r,t.before||Kn.before);if(e==r&&id(n,n.selection.main.from))return AA(n,s,r)}return null}function id(n,e){let t=!1;return n.field(Jf).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function kr(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Qt(Ne(t,0)))}function OA(n,e){let t=n.sliceString(e-2,e);return Qt(Ne(t,0))==t.length?t:t.slice(1)}function yA(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:mi.of(o.to+e.length),range:A.range(o.anchor+e.length,o.head+e.length)};let a=kr(n.doc,o.head);return!a||/\s/.test(a)||i.indexOf(a)>-1?{changes:{insert:e+t,from:o.head},effects:mi.of(o.head+e.length),range:A.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function AA(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&kr(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:A.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function bA(n,e,t,i){let s=i.stringPrefixes||Kn.stringPrefixes,r=null,o=n.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:e,from:a.to}],effects:mi.of(a.to+e.length),range:A.range(a.anchor+e.length,a.head+e.length)};let l=a.head,c=kr(n.doc,l),h;if(c==e){if(Xc(n,l))return{changes:{insert:e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)};if(id(n,l)){let f=t&&n.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+f.length,insert:f},range:A.cursor(l+f.length)}}}else{if(t&&n.sliceDoc(l-2*e.length,l)==e+e&&(h=Bc(n,l-2*e.length,s))>-1&&Xc(n,h))return{changes:{insert:e+e+e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)};if(n.charCategorizer(l)(c)!=ye.Word&&Bc(n,l,s)>-1&&!SA(n,l,e,s))return{changes:{insert:e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)}}return{range:r=a}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Xc(n,e){let t=Ce(n).resolveInner(e+1);return t.parent&&t.from==e}function SA(n,e,t,i){let s=Ce(n).resolveInner(e,-1),r=i.reduce((o,a)=>Math.max(o,a.length),0);for(let o=0;o<5;o++){let a=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),l=a.indexOf(t);if(!l||l>-1&&i.indexOf(a.slice(0,l))>-1){let h=s.firstChild;for(;h&&h.from==s.from&&h.to-h.from>t.length+l;){if(n.sliceDoc(h.to-t.length,h.to)==t)return!1;h=h.firstChild}return!0}let c=s.to==e&&s.parent;if(!c)break;s=c}return!1}function Bc(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=ye.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=ye.Word)return r}return-1}function xA(n={}){return[Jy,He,Ke.of(n),Gy,vA,Gf]}const nd=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:jy},{key:"ArrowDown",run:us(!0)},{key:"ArrowUp",run:us(!1)},{key:"PageDown",run:us(!0,"page")},{key:"PageUp",run:us(!1,"page")},{key:"Enter",run:Vy}],vA=ri.highest(mr.computeN([Ke],n=>n.facet(Ke).defaultKeymap?[nd]:[]));var Ic={};class Ns{constructor(e,t,i,s,r,o,a,l,c,h=0,u){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=a,this.bufferBase=l,this.curContext=c,this.lookAhead=h,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new Ns(e,[],t,i,i,0,[],0,s?new qc(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(c==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=h):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(s,c)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let a=!1;for(let l=o;l>0&&this.buffer[l-2]>i;l-=4)if(this.buffer[l-1]>=0){a=!0;break}if(a)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let a=o.stateFlag(r,1);!a&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,a?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new Ns(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new wA(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;rl&1&&a==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let a=(o>>19)-r;if(a>1){let l=o&65535,c=this.stack.length-a*3;if(c>=0&&e.getGoto(this.stack[c],l,!1)>=0)return a<<19|65536|l}}else{let a=i(o,r+1);if(a!=null)return a}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class qc{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class wA{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class Hs{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Hs(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Hs(this.stack,this.pos,this.index)}}function dn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let l=o-32;if(l>=46&&(l-=46,a=!0),r+=l,a)break;r*=46}t?t[s++]=r:t=new e(r)}return t}class ks{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Wc=new ks;class kA{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Wc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&ia.to&&(this.chunk2=this.chunk2.slice(0,a.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Wc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}}class Di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;sd(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}Di.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class sa{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?dn(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(sd(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}}sa.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class qn{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function sd(n,e,t,i,s,r){let o=0,a=1<0){let p=n[d];if(l.allows(p)&&(e.token.value==-1||e.token.value==p||QA(p,e.token.value,s,r))){e.acceptToken(p);break}}let h=e.next,u=0,f=n[o+2];if(e.next<0&&f>u&&n[c+f*3-3]==65535){o=n[c+f*3-1];continue e}for(;u>1,p=c+d+(d<<1),m=n[p],g=n[p+1]||65536;if(h=g)u=d+1;else{o=n[p+2],e.advance();continue e}}break}}function zc(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function QA(n,e,t,i){let s=zc(t,i,e);return s<0||zc(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class PA{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Vc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Vc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof ke){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}}class CA{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new ks)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),a=e.curContext?e.curContext.hash:0,l=0;for(let c=0;cu.end+25&&(l=Math.max(u.lookAhead,l)),u.value!=0)){let f=t;if(u.extended>-1&&(t=this.addActions(e,u.extended,u.end,t)),t=this.addActions(e,u.value,u.end,t),!h.extend&&(i=u,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!i&&e.pos==this.stream.end&&(i=new ks,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new ks,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(a>>1)){(a&1)==0?e.value=a>>1:e.extended=a>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new PA(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(a);else{if(this.advanceStack(a,i,e))continue;{s||(s=[],r=[]),s.push(a);let l=this.tokens.getMainToken(a);r.push(l.value,l.end)}}break}}if(!i.length){let o=s&&KA(s);if(o)return nt&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw nt&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return nt&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((a,l)=>l.score-a.score);i.length>o;)i.pop();i.some(a=>a.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&c.buffer.length>500)if((a.score-c.score||a.buffer.length-c.buffer.length)>0)i.splice(l--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,a)=>a.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let c=e.curContext&&e.curContext.tracker.strict,h=c?e.curContext.hash:0;for(let u=this.fragments.nodeAt(s);u;){let f=this.parser.nodeSet.types[u.type.id]==u.type?r.getGoto(e.state,u.type.id):-1;if(f>-1&&u.length&&(!c||(u.prop(G.contextHash)||0)==h))return e.useNode(u,f),nt&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(u.type.id)})`),!0;if(!(u instanceof ke)||u.children.length==0||u.positions[0]>0)break;let d=u.children[0];if(d instanceof ke&&u.positions[0]==0)u=d;else break}}let a=r.stateSlot(e.state,4);if(a>0)return e.reduce(a),nt&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(a&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let c=0;cs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return jc(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(a.deadEnd&&(r||(r=!0,a.restart(),nt&&console.log(h+this.stackID(a)+" (restarted)"),this.advanceFully(a,i))))continue;let u=a.split(),f=h;for(let d=0;d<10&&u.forceReduce()&&(nt&&console.log(f+this.stackID(u)+" (via force-reduce)"),!this.advanceFully(u,i));d++)nt&&(f=this.stackID(u)+" -> ");for(let d of a.recoverByInsert(l))nt&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>a.pos?(c==a.pos&&(c++,l=0),a.recoverByDelete(l,c),nt&&console.log(h+this.stackID(a)+` (via recover-delete ${this.parser.getName(l)})`),jc(a,i)):(!s||s.scoren;class $A{constructor(e){this.start=e.start,this.shift=e.shift||so,this.reduce=e.reduce||so,this.reuse=e.reuse||so,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class Gs extends Yu{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let a=0;ae.topRules[a][1]),s=[];for(let a=0;a=0)r(h,l,a[c++]);else{let u=a[c+-h];for(let f=-h;f>0;f--)r(a[c++],l,u);c++}}}this.nodeSet=new Ta(t.map((a,l)=>et.define({name:l>=this.minRepeatTerm?void 0:a,id:l,props:s[l],top:i.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=Wu;let o=dn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let a=0;atypeof a=="number"?new Di(o,a):a),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new TA(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],a=o&1,l=s[r++];if(a&&i)return l;for(let c=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=Ft(this.data,r+2);else break;s=t(Ft(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ft(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(Gs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(a=>a.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=Yc(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const ZA=316,MA=317,Nc=1,EA=2,UA=3,FA=4,DA=318,LA=320,XA=321,BA=5,IA=6,qA=0,ra=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],rd=125,WA=59,oa=47,zA=42,VA=43,jA=45,YA=60,NA=44,HA=63,GA=46,_A=91,JA=new $A({start:!1,shift(n,e){return e==BA||e==IA||e==LA?n:e==XA},strict:!1}),eb=new qn((n,e)=>{let{next:t}=n;(t==rd||t==-1||e.context)&&n.acceptToken(DA)},{contextual:!0,fallback:!0}),tb=new qn((n,e)=>{let{next:t}=n,i;ra.indexOf(t)>-1||t==oa&&((i=n.peek(1))==oa||i==zA)||t!=rd&&t!=WA&&t!=-1&&!e.context&&n.acceptToken(ZA)},{contextual:!0}),ib=new qn((n,e)=>{n.next==_A&&!e.context&&n.acceptToken(MA)},{contextual:!0}),nb=new qn((n,e)=>{let{next:t}=n;if(t==VA||t==jA){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(Nc);n.acceptToken(i?Nc:EA)}}else t==HA&&n.peek(1)==GA&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(UA))},{contextual:!0});function ro(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}const sb=new qn((n,e)=>{if(n.next!=YA||!e.dialectEnabled(qA)||(n.advance(),n.next==oa))return;let t=0;for(;ra.indexOf(n.next)>-1;)n.advance(),t++;if(ro(n.next,!0)){for(n.advance(),t++;ro(n.next,!1);)n.advance(),t++;for(;ra.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==NA)return;for(let i=0;;i++){if(i==7){if(!ro(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(FA,-t)}),rb=Nu({"get set async static":O.modifier,"for while do if else switch try catch finally return throw break continue default case defer":O.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":O.operatorKeyword,"let var const using function class extends":O.definitionKeyword,"import export from":O.moduleKeyword,"with debugger new":O.keyword,TemplateString:O.special(O.string),super:O.atom,BooleanLiteral:O.bool,this:O.self,null:O.null,Star:O.modifier,VariableName:O.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":O.function(O.variableName),VariableDefinition:O.definition(O.variableName),Label:O.labelName,PropertyName:O.propertyName,PrivatePropertyName:O.special(O.propertyName),"CallExpression/MemberExpression/PropertyName":O.function(O.propertyName),"FunctionDeclaration/VariableDefinition":O.function(O.definition(O.variableName)),"ClassDeclaration/VariableDefinition":O.definition(O.className),"NewExpression/VariableName":O.className,PropertyDefinition:O.definition(O.propertyName),PrivatePropertyDefinition:O.definition(O.special(O.propertyName)),UpdateOp:O.updateOperator,"LineComment Hashbang":O.lineComment,BlockComment:O.blockComment,Number:O.number,String:O.string,Escape:O.escape,ArithOp:O.arithmeticOperator,LogicOp:O.logicOperator,BitOp:O.bitwiseOperator,CompareOp:O.compareOperator,RegExp:O.regexp,Equals:O.definitionOperator,Arrow:O.function(O.punctuation),": Spread":O.punctuation,"( )":O.paren,"[ ]":O.squareBracket,"{ }":O.brace,"InterpolationStart InterpolationEnd":O.special(O.brace),".":O.derefOperator,", ;":O.separator,"@":O.meta,TypeName:O.typeName,TypeDefinition:O.definition(O.typeName),"type enum interface implements namespace module declare":O.definitionKeyword,"abstract global Privacy readonly override":O.modifier,"is keyof unique infer asserts":O.operatorKeyword,JSXAttributeValue:O.attributeValue,JSXText:O.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":O.angleBracket,"JSXIdentifier JSXNameSpacedName":O.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":O.attributeName,"JSXBuiltin/JSXIdentifier":O.standard(O.tagName)}),ob={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},ab={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},lb={__proto__:null,"<":193},cb=Gs.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:JA,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[rb],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[tb,ib,nb,sb,2,3,4,5,6,7,8,9,10,11,12,13,14,eb,new sa("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new sa("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>ob[n]||-1},{term:343,get:n=>ab[n]||-1},{term:95,get:n=>lb[n]||-1}],tokenPrec:15201}),od=[Ye("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),Ye("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),Ye("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),Ye("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),Ye("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),Ye(`try { + \${} +} catch (\${error}) { + \${} +}`,{label:"try",detail:"/ catch block",type:"keyword"}),Ye("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),Ye(`if (\${}) { + \${} +} else { + \${} +}`,{label:"if",detail:"/ else block",type:"keyword"}),Ye(`class \${name} { + constructor(\${params}) { + \${} + } +}`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Hc=new dO,ad=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ld(n,e){let t=Hc.get(e);if(t)return t;let i=[],s=!0;function r(o,a){let l=n.sliceString(o.from,o.to);i.push({label:l,type:a})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let a=fb[o.name];if(a&&a(o,r)||ad.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ld(n,o.node))i.push(a);return!1}}),Hc.set(e,i),i}const Gc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Gc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)ad.has(s.name)&&(i=i.concat(ld(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:Gc}}const Xt=Xs.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Nr({except:/^\s*({|else\b)/}),TryStatement:Nr({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:MO,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:ZO({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Nr({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),sf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":DO,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Xt.configure({dialect:"ts"},"typescript"),mb=Xt.configure({dialect:"jsx",props:[Za.add(n=>n.isTop?[hd]:void 0)]}),gb=Xt.configure({dialect:"jsx ts",props:[Za.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),Ob=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?gb:mb:n.typescript?pb:Xt,t=n.typescript?hb.concat(Ob):od.concat(fd);return new kO(e,[Xt.data.of({autocomplete:Ty(cd,Yf(t))}),Xt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=$.inputHandler.of((n,e,t,i,s)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Xt.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,a=o.changeByRange(l=>{var c;let{head:h}=l,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(n.dispatch([r,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?a=>r(Jc(a)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fa(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,a=!0;;r++){let l=s.charCodeAt(r),c=this.match(l,o,a,this.bufferPos+this.bufferStart,r==s.length-1);if(c)return this.value=c,this;if(r==s.length-1)break;a&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=_s(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let a=new Li(t,e.sliceString(t,i));return oo.set(e,a),a}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=_s(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Li.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Na),!0}catch{return!1}}function _s(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const vb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=jg(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let a=e.doc.lineAt(e.selection.main.head),[,l,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:a.number;if(c&&u){let g=d/100;l&&(g=g*(l=="-"?-1:1)+a.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else c&&l&&(d=d*(l=="-"?-1:1)+a.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,$.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},wb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,wb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[$b,Rb]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const Rb=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return B.none;let l=t.wordAt(s.head);if(!l)return B.none;o=t.charCategorizer(s.head),r=t.sliceDoc(l.from,l.to)}else{let l=s.to-s.from;if(l200)return B.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(eh(o,t,s.from,s.to)&&Tb(o,t,s.from,s.to)))return B.none}else if(r=t.sliceDoc(s.from,s.to),!r)return B.none}let a=[];for(let l of n.visibleRanges){let c=new Yi(t.doc,r,l.from,l.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(s.empty&&h<=s.from&&u>=s.to?a.push(Cb.range(h,u)):(h>=s.to||u<=s.from)&&a.push(Pb.range(h,u)),a.length>e.maxMatches))return B.none}}return B.set(a)}},{decorations:n=>n.decorations}),$b=$.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(s=>n.wordAt(s.head)||A.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,a=new Yi(n.doc,e,i[i.length-1].to);;)if(a.next(),a.done){if(o)return null;a=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(l=>l.from==a.value.from))continue;if(r){let l=n.wordAt(a.value.from);if(!l||l.from!=a.value.from||l.to!=a.value.to)continue}return a.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=Zb(n,i);return s?(e(n.update({selection:n.selection.addRange(A.range(s.from,s.to),!1),effects:$.scrollIntoView(s.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>$.scrollIntoView(e)})}});class gd{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> + \${} +`:`<${n}${i} />`}const ah=Object.entries($e.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:SS(n,e)}));function xS(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function vS(n,e){const t=$e.components[n];return t?Object.entries({...$e.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,s])=>({label:i,type:"property",detail:s.required?`${s.type} · required`:s.type,info:s.deprecated?`Deprecated: ${s.deprecated}`:s.documentation,apply:`${i}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`})):[]}function wS(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=$e.components[e[1]]?.properties?.[e[2]]??$e.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function kS(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=wS(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:ah,validFor:/^[A-Za-z]*$/};const s=xS(e);if(s&&/(?:\s|^)\w*$/.test(s.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),a=new Set([...s.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(l=>l[1]));return{from:o?.from??n.pos,options:vS(s.name,a),validFor:/^[A-Za-z][\w]*$/}}const r=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(r){const o=r.text.slice(0,r.text.indexOf(".")+1),a=Object.entries($e.functions).filter(([l])=>l.startsWith(o));return a.length?{from:r.from+o.length,options:a.map(([l,c])=>({label:l.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:ah,validFor:/^[A-Za-z]*$/}:null}function lh(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const s=lh(t,"JSXIdentifier")[0];s&&e.push({name:n.doc.sliceString(s.from,s.to),from:s.from,to:s.to,attributes:lh(t,"JSXAttribute").map(r=>{const o=r.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=$e.components[t.name];if(!i)continue;const s=new Set([...Object.keys($e.globalProperties),...Object.keys(i.properties??{})]),r=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){s.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const a=i.properties?.[o.name]??$e.globalProperties[o.name];a?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${a.deprecated}`})}for(const[o,a]of Object.entries(i.properties??{}))if(a.required&&!r.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),r.has(o)){for(const l of a.requires??[])r.has(l)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${l}” property.`});for(const l of a.conflicts??[])r.has(l)&&o cannot combine “${o}” with “${l}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>r.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function QS(n,e){const t=Md(n.state).find(s=>e>=s.from&&e<=s.to);if(!t)return null;const i=$e.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const s=document.createElement("div");s.className="studio-hover";const r=document.createElement("strong");r.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,s.append(r,o),{dom:s}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function PS(n,e){return $.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const CS=Xn.define([{tag:[O.keyword,O.controlKeyword,O.moduleKeyword,O.operatorKeyword,O.bool,O.null],color:"#FF7AB2"},{tag:[O.string,O.special(O.string)],color:"#FF8170"},{tag:[O.number,O.regexp],color:"#D9C97C"},{tag:[O.comment,O.lineComment,O.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[O.tagName,O.typeName,O.className],color:"#5DD8FF"},{tag:O.attributeName,color:"#B281EB"},{tag:[O.propertyName,O.function(O.variableName),O.function(O.propertyName)],color:"#67B7A4"},{tag:O.definition(O.variableName),color:"#4EB0CC"},{tag:[O.variableName,O.operator,O.punctuation,O.bracket],color:"#E8E8ED"},{tag:O.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[PS(e?ch.dark:ch.light,e),JO(e?CS:i0)]}const TS=Xt.parser.configure({dialect:"jsx"}),RS=new Map(Object.keys($e.components).map(n=>[n.toLowerCase(),n])),$S=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),KS=512*1024,ZS=512,MS=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,s)=>{const r={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(r,s))return r[s];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(s)){const o=s[1].toLowerCase()==="x"?parseInt(s.slice(2),16):Number(s.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function vi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>KS)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=TS.parse(n);let i=!1;if(t.iterate({enter:r=>{r.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function s(r,o,a){(a>MS||e.nodes.length>=ZS)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const l=ci(r),c=l[0],h=l.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=RS.get(f.toLowerCase()),p=$e.components[d],m={...$e.globalProperties,...p?.properties??{}},g=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=g?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&g&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(r.from),parentID:o,tag:f,component:d??null,from:r.from,to:r.to,openingEnd:c.to,insertAt:c.to-(g?1:2),contentFrom:c.to,contentTo:g?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:a};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const w=ci(S),U=hi(n,w[0]),F=w[2],V=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):V,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=g?l.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(s(S,b.id,a+1).id);if(b.structure=!b.locked&&g&&$S.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(w=>w.id===S).locked),!b.locked&&d==="Text"&&g&&k.length===1){const S=k[0],w=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(w)?Fd(w):S.name==="JSXEscape"?co(w.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(r){if(r.name!=="CallExpression")return;const o=ci(r.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const a=ci(o[1]).filter(l=>!["(",")"].includes(l.name));if(a.length===1&&a[0].name==="JSXElement")return e.roots.push(s(a[0],null,0).id),!1}})}catch(r){return{...e,nodes:[],roots:[],issue:r.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function ha(n){return!n?.component||n.locked?{}:{...$e.globalProperties,...$e.components[n.component]?.properties??{}}}function ES(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(l=>l.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let s=[],r=i.from;if(t.type==="property"){const l=ha(i),c=Object.hasOwn(l,t.name)?l[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=$e.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),s=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;s=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),s=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")s=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:r};s=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],r=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const l={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(l,t.kind)||de("Unsupported new layer."),s=[{from:i.contentTo,to:i.contentTo,insert:l[t.kind]}],r=i.contentTo}else de("Unsupported layout operation.");s.sort((l,c)=>l.from-c.from);let o=e;for(const l of[...s].reverse())o=o.slice(0,l.from)+l.insert+o.slice(l.to);return vi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:s,selectedFrom:r}}const Dd=Xt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Hi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:$e.globalProperties.font.values},bodyFont:{values:$e.globalProperties.font.values},fontDesign:{values:$e.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),ms={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},sr=Object.freeze({Meadow:Object.freeze({...ms,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...ms,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...ms,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...ms,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Ld(n,e){Object.hasOwn(Hi,n)||Qe("Unknown theme token.");const t=Hi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function el(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Hi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Ld(e,n[e]);return n}function Xd(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),el(e.tokens),e}function US(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Xd(t),t}function rr(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],s=[];if(t.iterate({enter(l){l.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(l.name)&&n.slice(l.from,l.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(l.from,l.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(l.name)&&(l.name==="VariableDefinition"?i:s).push(l.node)}}),!i.length&&!s.length){const l=vi(n);e.canInitialize=!l.issue&&l.roots.length===1&&!l.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;l.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froml.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const r=i[0].parent,o=Ci(r);(r.name!=="VariableDeclaration"||r.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(l=>l.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const a={};for(const l of Ci(o[3])){if(["{","}",","].includes(l.name))continue;const c=Ci(l),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(l.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(a,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Ld(u,f),a[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}el(a);for(const l of s){const c=l.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==l.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Hi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=a}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),el(t),{changes:Object.keys(Hi).filter(s=>t[s]!==n.tokens[s]).map(s=>({...n.ranges[s],insert:JSON.stringify(t[s])})).sort((s,r)=>s.from-r.from)}}function FS(n,e="Meadow"){(!rr(n).canInitialize||!Object.hasOwn(sr,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=vi(n),s=i.nodes[0],r=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;r.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(s,c,c,!0);s.structure&&o(s,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let a=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")a=c.to;else break;r.push({from:a,to:a,insert:` +const widgetTheme = ${JSON.stringify(sr[e],null,2)}; +`}),r.sort((c,h)=>c.from-h.from);let l=n;for(const c of[...r].reverse())l=l.slice(0,c.from)+c.insert+l.slice(c.to);return(!rr(l).tokens||vi(l).issue)&&Qe("This layout cannot be themed automatically. Your source was preserved."),{changes:r}}function Bd(n){if(!Array.isArray(n)||n.length>4096)return[];const e=new Map,t=new Set;for(const i of n){if(typeof i!="string"||new TextEncoder().encode(i).length>1024||/[\\\u0000-\u001f\u007f-\u009f]/.test(i))continue;const s=i.split("/");if(s.length!==2||s[0]!=="image"||!s[1]||new TextEncoder().encode(s[1]).length>255||s[1]!==s[1].trim()||s[1].includes("..")||!/\.(png|jpe?g|webp)$/i.test(s[1]))continue;const r=i.normalize("NFC").toLowerCase();e.has(r)&&e.get(r)!==i&&t.add(r),e.set(r,i)}return[...e].filter(([i])=>!t.has(i)).map(([,i])=>i).sort().slice(0,256)}const tl=z.define(),or=Te.define({create:()=>[],update(n,e){for(const t of e.effects)t.is(tl)&&(n=Bd(t.value));return n}});function il(n,e){n.state.field(or,!1)!==void 0&&n.dispatch({effects:tl.of(e)})}const Id=Object.freeze({bloom:Object.freeze({name:"Bloom mark",description:"A small four-petal flower",kind:"icon"}),leaf:Object.freeze({name:"Leaf mark",description:"A tilted leaf and stem",kind:"icon"}),pebble:Object.freeze({name:"Pebble friend",description:"A quiet, round-eared companion",kind:"pet"})}),uo=`/* +ScriptWidget original geometric assets 1: Bloom mark, Leaf mark, Pebble friend. +Source: https://github.com/everettjf/scriptwidget (Editor/editorfe/src/visualAssets.js) +SPDX-License-Identifier: MIT +Copyright (c) 2021-2022 everettjf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +`;function DS(n,e){const t=i=>e?`{widgetTheme.${i}}`:JSON.stringify(sr.Meadow[i]);if(n==="bloom")return``;if(n==="leaf")return``;if(n==="pebble")return``;throw new Error("Choose an original asset from the catalog.")}function LS(n,e,{id:t,kind:i,path:s},r=[]){if(n.source!==e||n.issue)throw new Error("Layout changed. Select the container again.");const o=n.nodes.find(f=>f.id===t);if(!o?.structure)throw new Error("Select a stack/grid with literal JSX children in Layout or Assets.");let a;if(i==="photo"){if(!Bd(r).includes(s))throw new Error("This image is no longer in the package resource list. Refresh images.");a=``}else{if(!Object.hasOwn(Id,i))throw new Error("Choose an original asset from the catalog.");a=DS(i,!!rr(e).tokens)}const l=[{from:o.contentTo,to:o.contentTo,insert:a}];let c=o.contentTo;if(i!=="photo"&&!e.includes(uo)){const f=e.startsWith("#!")?e.indexOf(` +`)+1:0;l.push({from:f,to:f,insert:uo}),c+=uo.length}l.sort((f,d)=>f.from-d.from);let h=e;for(const f of[...l].reverse())h=h.slice(0,f.from)+f.insert+h.slice(f.to);if(vi(h).issue)throw new Error("This asset would exceed the supported layout limits. Your source was preserved.");return{changes:l,selectedFrom:c}}const XS=n=>["string","number","number|string","date|number","boolean","enum","color","url","action-id","storage-key"].includes(n.type);function X(n,e,t){const i=document.createElement(n);return e&&(i.className=e),t!==void 0&&(i.textContent=t),i}function BS(n,e){const t=X("section","sw-layout"),i=X("div","sw-layout-header"),s=X("div","sw-layout-body");t.setAttribute("aria-label","Visual layout editor");let r=!1,o="layout",a=null,l=null,c="",h=null,u=!1,f=0;const d=String(Math.random()),p=(Q,D)=>P=>{if(u||!t.contains(Q)){P.preventDefault();return}return D(P)},m=(Q,D,P)=>Q.addEventListener(D,p(Q,P)),g=(Q,D,P=!1)=>{const j=X("button","sw-layout-button",Q);return j.type="button",j.disabled=P,m(j,"click",D),j},y=g("Layout",()=>{r=o==="layout"?!r:!0,o="layout",Y(),n.requestMeasure()});y.classList.add("sw-layout-toggle"),y.setAttribute("aria-expanded","false");const b=X("span","sw-layout-hint","Select layers and edit literal JSX"),x=g("Undo",()=>La(n)),C=g("Redo",()=>zs(n)),k=g("Theme",()=>{r=o==="theme"?!r:!0,o="theme",Y(),n.requestMeasure()});k.setAttribute("aria-expanded","false");const S=g("Assets",()=>{r=o==="assets"?!r:!0,o="assets",Y(),n.requestMeasure()});S.setAttribute("aria-expanded","false"),i.append(y,k,S,b,x,C),t.append(i,s),s.hidden=x.hidden=C.hidden=!0;const w=X("p","sw-layout-error");w.setAttribute("role","alert"),w.hidden=!0,t.append(w);function U(){a=vi(n.state.doc.toString());const Q=X("div","sw-layout-inspector sw-theme-inspector");if(s.replaceChildren(Q),Q.append(X("div","sw-layout-title","Widget assets")),Q.append(X("p","sw-layout-notice","Insert editable original JSX or a package image. Originals follow connected theme colors; pet artwork is static. Import photos with the app's existing image tools or Web Studio's Add image.")),a.issue){Q.append(X("p","sw-layout-notice",a.issue));return}const D=a.nodes.filter(I=>I.structure),P=X("select");P.setAttribute("aria-label","Asset destination");for(const I of D){const H=X("option","",`${I.tag} · line ${n.state.doc.lineAt(I.from).number}`);H.value=I.id,P.append(H)}D.some(I=>I.id===l)?P.value=l:l=P.value,m(P,"change",()=>{l=P.value}),Q.append(P);const j=n.state.readOnly||!D.length;D.length||Q.append(X("p","sw-layout-notice","Add a stack/grid with literal JSX children in Code to insert assets."));function ae(I,H){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const ce=LS(a,n.state.doc.toString(),{id:P.value,kind:I,path:H},n.state.field(or));l=P.value,w.hidden=!0,n.dispatch({changes:ce.changes,selection:{anchor:ce.selectedFrom},annotations:ws.of("full"),userEvent:"input.asset",scrollIntoView:!0})}catch(ce){w.textContent=ce.message,w.hidden=!1}}for(const[I,H]of Object.entries(Id)){const ce=X("div","sw-layout-actions");ce.append(g(`Insert ${H.name}`,()=>ae(I),j),X("span","",H.description)),Q.append(ce)}Q.append(X("div","sw-layout-title","Package images"));const J=n.state.field(or),ee=X("select");ee.setAttribute("aria-label","Package image");for(const I of J){const H=X("option","",I);H.value=I,ee.append(H)}ee.disabled=!J.length,Q.append(ee,g("Insert package image",()=>ae("photo",ee.value),j||!J.length)),J.length||Q.append(X("p","sw-layout-notice","No supported images in image/. Add a PNG, JPEG or WebP to the package, then refresh or reopen the editor.")),e.refreshResources&&Q.append(g("Refresh images",async()=>{const I=++f,H=n.state.doc,ce=()=>!u&&I===f&&n.state.doc===H;try{const q=await e.refreshResources();ce()&&(w.hidden=!0,il(n,q))}catch{ce()&&(w.textContent="Images could not be refreshed. Reopen this document and try again.",w.hidden=!1)}})),Q.append(X("p","sw-layout-notice","Bloom mark, Leaf mark and Pebble friend: original ScriptWidget geometry, MIT licensed. Package photos retain their own rights. See the Studio assets documentation."))}function F(Q,D){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const P=n.state.doc.toString();if(P!==D)throw new Error("Source changed. Reopen Theme before editing.");const j=Q(P);w.hidden=!0,j.changes.length&&n.dispatch({changes:j.changes,annotations:ws.of("full"),userEvent:"input.theme"})}catch(P){w.textContent=P.message,w.hidden=!1}}function V(){const Q=n.state.doc.toString(),D=rr(Q),P=n.state.readOnly,j=X("div","sw-layout-inspector sw-theme-inspector");if(s.replaceChildren(j),j.append(X("div","sw-layout-title","Widget theme")),j.append(X("p","sw-layout-notice","Saved as ordinary JavaScript with your widget. Dynamic values stay in Code. Applying a theme changes the connected colors, fonts and spacing.")),D.issue){j.append(X("p","sw-layout-notice",D.issue));return}if(!D.tokens){j.append(g("Connect layout to Meadow theme",()=>F(ee=>FS(ee),Q),P||!D.canInitialize)),D.canInitialize||j.append(X("p","sw-layout-notice","Use a literal top-level $render layout, or define the documented widgetTheme object in Code."));return}const ae=X("div","sw-layout-actions");for(const[ee,I]of Object.entries(sr))ae.append(g(ee,()=>F(H=>ho(D,H,I),Q),P));j.append(ae);for(const[ee,I]of Object.entries(Hi)){const H=X("form","sw-layout-form"),ce=X("label","",ee),q=X(I.values?"select":"input");if(I.values)for(const re of I.values){const Me=X("option","",re);Me.value=re,q.append(Me)}I.type==="number"&&(q.type="number",q.min="0",q.max=String(I.maximum),q.step="any"),q.value=String(D.tokens[ee]),q.setAttribute("aria-label",`Theme ${ee}`),q.disabled=P;const te=g(`Apply ${ee}`,()=>{},P);te.type="submit",H.append(ce,q,te),m(H,"submit",re=>{re.preventDefault();const Me=I.type==="number"?q.value.trim()?Number(q.value):NaN:q.value;F(Oe=>ho(D,Oe,{...D.tokens,[ee]:Me}),Q)}),j.append(H)}const J=X("textarea");J.rows=5,J.setAttribute("aria-label","Reusable theme JSON"),J.value=US(D.tokens),j.append(X("label","","Copy this JSON to reuse a theme, or paste a version 1 theme and import it."),J,g("Import theme JSON",()=>F(ee=>ho(D,ee,Xd(J.value).tokens),Q),P))}function E(Q,D=a?.source){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");if(D!==n.state.doc.toString())throw new Error("Source changed during this operation. Select the layer again.");const P=ES(a,n.state.doc.toString(),Q);if(w.hidden=!0,!P.changes.length)return;n.dispatch({changes:P.changes,selection:{anchor:P.selectedFrom},annotations:ws.of("full"),userEvent:"input.layout",scrollIntoView:!0})}catch(P){w.textContent=P.message,w.hidden=!1}}function M(Q){u||(l=Q.id,c="",n.dispatch({selection:{anchor:Q.from,head:Q.to},scrollIntoView:!0,userEvent:"select.layout"}),Y())}function Y(){if(y.setAttribute("aria-expanded",String(r&&o==="layout")),k.setAttribute("aria-expanded",String(r&&o==="theme")),S.setAttribute("aria-expanded",String(r&&o==="assets")),s.hidden=!r,x.hidden=C.hidden=!r,b.hidden=r,x.disabled=n.state.readOnly||vc(n.state)===0,C.disabled=n.state.readOnly||wc(n.state)===0,!r)return;if(o==="assets"){U();return}if(o==="theme"){V();return}if(a=vi(n.state.doc.toString()),s.replaceChildren(),a.issue){s.append(X("p","sw-layout-notice",a.issue));return}const Q=n.state.selection.main.from,D=a.nodes.filter(q=>q.from<=Q&&Qq.id===l&&q.from<=Q&&Q<=q.to)??D??a.nodes[0];l=P.id;const j=X("div","sw-layout-layers");j.setAttribute("role","tree"),j.setAttribute("aria-label","Layout layers");const ae=n.state.readOnly,J=q=>{const te=q.text??q.properties.find(re=>re.name==="text"&&re.editable&&typeof re.value=="string")?.value;return`<${q.tag}>${te?` · ${te.slice(0,32)}`:""}${q.locked?" · locked":""}`};for(const[q,te]of a.nodes.entries()){const re=a.nodes.find(ie=>ie.id===te.parentID),Me=!ae&&!te.locked&&re?.structure,Oe=g(J(te),()=>M(te));Oe.classList.add("sw-layout-layer"),Oe.dataset.layerId=te.id,Oe.style.paddingInlineStart=`${8+te.depth*14}px`,Oe.setAttribute("role","treeitem"),Oe.setAttribute("aria-level",String(te.depth+1)),Oe.setAttribute("aria-selected",String(te.id===P.id)),Oe.tabIndex=te.id===P.id?0:-1,Oe.draggable=!!Me,m(Oe,"keydown",ie=>{let ve;ie.key==="ArrowUp"&&(ve=a.nodes[Math.max(0,q-1)]),ie.key==="ArrowDown"&&(ve=a.nodes[Math.min(a.nodes.length-1,q+1)]),ie.key==="ArrowLeft"&&(ve=re),ie.key==="ArrowRight"&&(ve=a.nodes.find(Ie=>Ie.id===te.children[0])),ie.key==="Home"&&(ve=a.nodes[0]),ie.key==="End"&&(ve=a.nodes.at(-1)),ve&&(ie.preventDefault(),ie.stopPropagation(),M(ve),ee().find(Ie=>Ie.dataset.layerId===ve.id)?.focus())}),m(Oe,"dragstart",ie=>{if(!Me){ie.preventDefault();return}h={id:te.id,source:a.source},ie.dataTransfer.setData("application/x-scriptwidget-layer",d),ie.dataTransfer.effectAllowed="move"}),m(Oe,"dragover",ie=>{h&&re?.structure&&te.id!==h.id&&(ie.preventDefault(),ie.dataTransfer.dropEffect="move")}),m(Oe,"drop",ie=>{if(!h||ie.dataTransfer.getData("application/x-scriptwidget-layer")!==d||!re?.structure)return;ie.preventDefault();const ve=h;h=null,E({type:"move",id:ve.id,parentID:re.id,index:re.children.filter(Ie=>Ie!==ve.id).indexOf(te.id)},ve.source)}),m(Oe,"dragend",()=>{h=null}),j.append(Oe)}function ee(){return[...t.querySelectorAll(".sw-layout-layer")]}const I=X("div","sw-layout-inspector"),H=X("div","sw-layout-title",`<${P.tag}>`);if(I.append(H),(ae||P.locked)&&I.append(X("p","sw-layout-notice",ae?"This document is read only.":P.reason)),!ae&&!P.locked){let Oe=function(){c=re.value;const oe=ha(P)[c],Ae=P.properties.find(tt=>tt.name===c);if(Me.replaceChildren(),te.onsubmit=tt=>tt.preventDefault(),Ae&&!Ae.editable){Me.append(X("span","sw-layout-notice","Dynamic value: edit it in Code. Connected widgetTheme tokens can be changed in Theme."));return}const le=X(oe.values||oe.type==="boolean"?"select":"input");le.setAttribute("aria-label","Layout property value");for(const tt of oe.values??(oe.type==="boolean"?[!0,!1]:[])){const ai=X("option","",String(tt));ai.value=String(tt),le.append(ai)}le.value=Ae?String(Ae.value):oe.values?.[0]??(oe.type==="boolean"?"true":"");const qe=g("Apply",()=>{});qe.type="submit",Me.append(le,qe,g("Remove",()=>E({type:"property",id:P.id,name:c,remove:!0}),!Ae||oe.required)),te.onsubmit=p(te,tt=>{tt.preventDefault();const ai=oe.type==="boolean"?le.value==="true":oe.type==="number"?le.value.trim()?Number(le.value):NaN:le.value;E({type:"property",id:P.id,name:c,value:ai})})};if(P.textEditable){const oe=X("form","sw-layout-form"),Ae=X("label","","Text"),le=X("input");le.value=P.text,le.setAttribute("aria-label","Layer text");const qe=g("Apply text",()=>{});qe.type="submit",oe.append(Ae,le,qe),m(oe,"submit",tt=>{tt.preventDefault(),E({type:"text",id:P.id,value:le.value})}),I.append(oe)}const q=Object.entries(ha(P)).filter(([,oe])=>XS(oe)),te=X("form","sw-layout-form"),re=X("select");re.setAttribute("aria-label","Layout property");for(const[oe]of q){const Ae=X("option","",oe);Ae.value=oe,re.append(Ae)}q.some(([oe])=>oe===c)||(c=P.structure?"alignment":"color"),re.value=c,re.value||(re.selectedIndex=0,c=re.value);const Me=X("div","sw-layout-property");te.append(re,Me),m(re,"change",Oe),Oe(),I.append(te);const ie=a.nodes.find(oe=>oe.id===P.parentID),ve=ie?.children.indexOf(P.id)??-1,Ie=X("div","sw-layout-actions");if(Ie.append(g("Move up",()=>E({type:"move",id:P.id,parentID:ie.id,index:ve-1}),!ie?.structure||ve<=0),g("Move down",()=>E({type:"move",id:P.id,parentID:ie.id,index:ve+1}),!ie?.structure||ve>=ie.children.length-1),g("Delete layer",()=>E({type:"remove",id:P.id}),!ie?.structure)),I.append(Ie),ie?.structure){const oe=a.nodes.filter(le=>le.structure&&!(le.from>=P.from&&le.to<=P.to)),Ae=X("select");Ae.setAttribute("aria-label","Move layer into container");for(const le of oe){const qe=X("option","",`${le.tag} · line ${n.state.doc.lineAt(le.from).number}`);qe.value=le.id,Ae.append(qe)}I.append(Ae,g("Move inside",()=>{const le=a.nodes.find(qe=>qe.id===Ae.value);E({type:"move",id:P.id,parentID:le.id,index:le.children.filter(qe=>qe!==P.id).length})},!oe.length))}if(P.structure){const oe=X("div","sw-layout-actions");for(const[Ae,le]of[["text","Add text"],["stack","Add stack"],["spacer","Add spacer"],["icon","Add icon"]])oe.append(g(le,()=>E({type:"add",id:P.id,kind:Ae})));I.append(oe)}}const ce=P.properties.filter(q=>!q.editable).map(q=>q.name);ce.length&&I.append(X("p","sw-layout-notice",`Preserved in Code: ${ce.join(", ")}`)),!P.structure&&P.children.length&&I.append(X("p","sw-layout-notice","This child structure stays in Code. Reordering is available on literal stack/grid children.")),s.append(j,I)}return{dom:t,top:!0,update(Q){if(!r)return;const D=n.state.selection.main.from,P=a?.nodes.filter(ae=>ae.from<=D&&Dae.effects.some(J=>J.is(tl)));(Q.docChanged||j||Q.startState.readOnly!==n.state.readOnly||Q.selectionSet&&P!==l)&&(Q.docChanged&&o!=="assets"&&(l=null),Y()),x.disabled=n.state.readOnly||vc(n.state)===0,C.disabled=n.state.readOnly||wc(n.state)===0},destroy(){u=!0}}}const IS=$.baseTheme({".sw-layout":{fontFamily:"system-ui, sans-serif",fontSize:"12px",backgroundColor:"#f6f7fa",color:"#272a34",borderBottom:"1px solid #dce0e9"},"&dark .sw-layout":{backgroundColor:"#252830",color:"#eceef5",borderColor:"#414552"},".sw-layout-header":{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px",padding:"6px 10px"},".sw-layout-toggle":{fontWeight:"600"},".sw-layout-hint":{opacity:"0.65",fontSize:"11px"},".sw-layout-button":{fontFamily:"inherit",fontSize:"11px",color:"inherit",backgroundColor:"transparent",border:"1px solid #a0a5b655",borderRadius:"6px",padding:"4px 8px",cursor:"pointer",whiteSpace:"nowrap"},".sw-layout-button:disabled":{opacity:"0.4",cursor:"default"},".sw-layout-body":{display:"grid",gridTemplateColumns:"minmax(120px, 1fr) minmax(180px, 1.6fr)",maxHeight:"280px",overflow:"auto",borderTop:"1px solid #a0a5b633"},".sw-layout-body[hidden]":{display:"none"},".sw-layout-layers":{padding:"6px 2px",overflow:"auto",borderRight:"1px solid #a0a5b633"},".sw-layout-layer":{display:"block",border:0,borderRadius:"4px",width:"100%",textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",margin:"1px 0",paddingBlock:"6px"},'.sw-layout-layer[aria-selected="true"]':{backgroundColor:"#4085f52b",color:"inherit"},".sw-layout-inspector":{padding:"8px 10px",display:"flex",alignItems:"start",flexDirection:"column",gap:"8px",minWidth:0},".sw-theme-inspector":{gridColumn:"1 / -1"},".sw-theme-inspector textarea":{boxSizing:"border-box",width:"100%",fontFamily:"monospace",backgroundColor:"transparent",color:"inherit",border:"1px solid #a0a5b666",borderRadius:"5px"},".sw-layout-title":{fontWeight:"600"},".sw-layout-form":{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"5px",width:"100%"},".sw-layout-property,.sw-layout-actions":{display:"flex",flexWrap:"wrap",gap:"5px",alignItems:"center"},".sw-layout input,.sw-layout select":{fontFamily:"inherit",fontSize:"12px",minWidth:0,maxWidth:"100%",padding:"4px 6px",border:"1px solid #a0a5b666",borderRadius:"5px",backgroundColor:"transparent",color:"inherit"},".sw-layout-notice":{margin:"8px",lineHeight:"1.5",fontSize:"11px",opacity:"0.7"},".sw-layout-body > .sw-layout-notice":{gridColumn:"1 / -1"},".sw-layout-error":{margin:"0 10px 6px",color:"#b32636",fontSize:"12px"},"&dark .sw-layout-error":{color:"#ff99a4"},".sw-layout button:focus-visible,.sw-layout input:focus-visible,.sw-layout select:focus-visible":{outline:"2px solid #4085f5",outlineOffset:"1px"},"@media (max-width: 480px)":{".sw-layout-body":{gridTemplateColumns:"minmax(90px, 1fr) minmax(150px, 1.6fr)"},".sw-layout-hint":{display:"none"}}});function qS(n={}){return[IS,or,Vi.of(e=>BS(e,n))]}const qd="scriptwidget.studio.document-state.v1.";function Wd(n,e,t){if(!n||!e)return!1;try{return n.setItem(`${qd}${e}`,JSON.stringify({anchor:Number(t.anchor)||0,head:Number(t.head)||0,scrollTop:Number(t.scrollTop)||0})),!0}catch{return!1}}function WS(n,e,t){if(!n||!e)return null;try{const i=JSON.parse(n.getItem(`${qd}${e}`));if(!i||typeof i!="object")return null;const s=r=>Math.max(0,Math.min(Number(r)||0,t));return{anchor:s(i.anchor),head:s(i.head),scrollTop:Math.max(0,Number(i.scrollTop)||0)}}catch{return null}}const zS="scriptwidget.web-studio.draft.v1:";function nl(n){return`${zS}${n}`}function VS(n,e){if(!e)return null;try{const t=JSON.parse(n.getItem(nl(e))||"null");return t&&typeof t.content=="string"&&typeof t.baseRevision=="string"?t:null}catch{return null}}function hh(n,e,t,i,s=Date.now()){if(!e||typeof i!="string")return null;const r={documentID:e,content:t,baseRevision:i,updatedAt:s};return n.setItem(nl(e),JSON.stringify(r)),r}function fo(n,e){e&&n.removeItem(nl(e))}function jS(n,e,t,i){const s=VS(n,e);return!s||s.content===t?null:{...s,serverContent:t,serverRevision:i,isStale:s.baseRevision!==i}}function YS(){return{connection:"connecting",save:"idle",preview:"idle",conflict:null}}function NS(n,e){switch(e.type){case"CONNECTED":return{...n,connection:"connected"};case"OFFLINE":return{...n,connection:"offline",save:n.save==="saving"?"draft":n.save};case"DISCONNECTED":return{...n,connection:"disconnected"};case"EDITED":return{...n,save:"draft",conflict:null};case"SAVING":return{...n,save:"saving"};case"SAVED":return{...n,save:"saved",preview:e.preview||"requested",conflict:null};case"SAVE_FAILED":return{...n,save:"error"};case"CONFLICT":return{...n,save:"conflict",conflict:e.conflict};default:return n}}class HS{constructor(e){this.send=e,this.epoch=0,this.context=null,this.inFlight=null,this.needsFlush=!1}open({documentID:e,packageID:t,path:i,revision:s,content:r}){return this.epoch+=1,this.context={documentID:e,packageID:t,path:i,revision:s,content:r,generation:0,savedGeneration:0},this.needsFlush=!1,this.snapshot()}edit(e){return this.context?(this.context.content=e,this.context.generation+=1,this.snapshot()):null}rebase(e){return this.context&&(this.context.revision=e),this.snapshot()}get isDirty(){return!!(this.context&&this.context.generation!==this.context.savedGeneration)}snapshot(){return this.context?{...this.context,dirty:this.isDirty}:null}async flush(){if(!this.context||!this.isDirty)return{skipped:!0,snapshot:this.snapshot()};if(this.inFlight)return this.needsFlush=!0,this.inFlight.then(()=>this.isDirty?this.flush():{skipped:!0,snapshot:this.snapshot()});const e=this.epoch,t={...this.context};this.needsFlush=!1,this.inFlight=this.send({documentID:t.documentID,packageID:t.packageID,path:t.path,content:t.content,baseRevision:t.revision}).then(s=>this.epoch!==e||this.context?.documentID!==t.documentID?{ignored:!0,result:s,snapshot:this.snapshot()}:(this.context.revision=s.revision,this.context.savedGeneration=t.generation,{result:s,snapshot:this.snapshot()})).finally(()=>{this.inFlight=null});const i=await this.inFlight;return this.needsFlush&&this.isDirty?this.flush():i}}function uh(n){return["draft","saving","error","conflict"].includes(n)}class GS extends Error{constructor(e,t,i={}){super(e),this.name="StudioAPIError",this.status=t,this.body=i}}class _S{constructor({fetchImpl:e=globalThis.fetch,token:t=()=>"",onUnauthorized:i=()=>{}}={}){if(typeof e!="function")throw new TypeError("A fetch implementation is required");this.fetchImpl=e,this.token=t,this.onUnauthorized=i}async request(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t)),s=await i.json().catch(()=>({}));return this.validate(i,e,s),s}async requestBlob(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t));if(!i.ok){const s=await i.json().catch(()=>({}));this.validate(i,e,s)}return i.blob()}authorizedOptions(e){return{...e,headers:{"Content-Type":"application/json","X-Studio-Token":this.token(),...e.headers||{}}}}validate(e,t,i){if(!e.ok){const s=new GS(i.message||`Request failed (${e.status})`,e.status,i);throw e.status===401&&t!=="/api/v1/pair"&&this.onUnauthorized(s),s}}}const sl=/^https?:$/.test(window.location.protocol),JS=document.querySelector(sl?"#editor":"#native-editor"),rl=new Gi,ar=new Gi;let qt=null,me=null,Et=null,at=0,wi=0,ua=!1,Mn=null,fh=null;const dh=document.querySelector("#save-status");let zd=null;function En(n,e="idle"){dh.textContent=n,dh.dataset.state=e}function e1(){window.clearTimeout(fh),fh=window.setTimeout(()=>{const n=W.state.selection.main;Wd(window.localStorage,me,{anchor:n.anchor,head:n.head,scrollTop:W.scrollDOM.scrollTop})},180)}function Vd(){return window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function ol(){window.clearTimeout(Mn),En("Saving…","saving"),Mn=window.setTimeout(()=>{const n=W.state.doc.toString(),e=at,t=me,i=Et,s=wi;nn(qt,Ue.documentSave,{content:n,version:e},t,(r={})=>{sl||t!==me||i!==Et||s!==wi||e!==at||En(r.result==="ok"||r.result==="unavailable"?"Saved":"Save failed",r.result==="failed"?"error":"saved")},i)},700)}function t1(n){if((n.selectionSet||n.viewportChanged||n.docChanged)&&e1(),!n.docChanged||ua)return;at+=1,zd?.documentChanged();const e=[];n.changes.iterChanges((t,i,s,r,o)=>{e.push({from:t,to:i,insert:o.toString(),newFrom:s,newTo:r})}),nn(qt,Ue.documentChanged,{changes:e,version:at},me,void 0,Et),ol()}const jd=[nO(),oO(),xg(),w0(),qS({refreshResources:()=>new Promise((n,e)=>{const t=me,i=wi,s=Et,r=window.setTimeout(()=>e(new Error("Resource refresh timed out")),5e3);nn(qt,Ue.documentResources,{},t,(o={})=>{window.clearTimeout(r),t!==me||i!==wi||o.result!=="ok"||o.documentID!==t||!Array.isArray(o.resources)?e(new Error("Document resources are unavailable")):n(o.resources)},s)})}),HO(),hg(),gg(),_.allowMultipleSelections.of(!0),UO(),c0(),uA(),xA({override:[kS],activateOnTyping:!0}),Mg(),Fg(),Cg(),Qb(),fS(),iS(Ed,{delay:350}),Eu(QS),yb({jsx:!0}),mr.of([Py,...mA,...Qy,...jb,...Z0,...VO,...nd]),rl.of(_.readOnly.of(!1)),ar.of(Ud(Vd())),$.updateListener.of(t1),$.contentAttributes.of({autocapitalize:"off",autocomplete:"off",spellcheck:"false"})],W=new $({state:_.create({doc:"",extensions:jd}),parent:JS});function _t(n,e=me,t=0,i=!1){window.clearTimeout(Mn),wi+=1;const s=W.state.selection.main;Wd(window.localStorage,me,{anchor:s.anchor,head:s.head,scrollTop:W.scrollDOM.scrollTop}),ua=!0;const r=e!==me;me=e,at=t;const o=WS(window.localStorage,me,(n??"").length),a=o?{anchor:o.anchor,head:o.head}:{anchor:0};if(r){const l=ar.get(W.state),c=W.state.readOnly;let h=_.create({doc:n??"",extensions:jd,selection:a});h=h.update({effects:[ar.reconfigure(l),rl.reconfigure(_.readOnly.of(c))]}).state,W.setState(h)}else W.dispatch({changes:{from:0,to:W.state.doc.length,insert:n??""},selection:a,scrollIntoView:!0});o&&window.requestAnimationFrame(()=>{W.scrollDOM.scrollTop=o.scrollTop}),ua=!1,i&&nn(qt,Ue.documentChanged,{content:W.state.doc.toString(),version:at},me,void 0,Et),En("Saved","saved")}function ph(n){if(W.state.readOnly)return!1;const e=W.state.selection.main;return W.dispatch({changes:{from:e.from,to:e.to,insert:n},selection:{anchor:e.from+n.length},userEvent:"input"}),W.focus(),!0}async function lr(){if(W.state.readOnly)return!1;const n=W.state.doc.toString(),e=wi,t=at,i=()=>!W.state.readOnly&&e===wi&&t===at&&n===W.state.doc.toString();try{const[{format:s},{default:r},{default:o}]=await Promise.all([Cr(()=>import("./standalone-Cayz_KD-.js"),[],import.meta.url),Cr(()=>import("./babel-BktJt1uC.js"),[],import.meta.url),Cr(()=>import("./estree-DFfjoHvx.js"),[],import.meta.url)]),a=await s(n,{parser:"babel",plugins:[r,o],semi:!0,singleQuote:!0,trailingComma:"es5"});return i()?(_t(a,me,at+1,!0),ol(),!0):!1}catch(s){return i()&&nn(qt,"diagnostics.publish",{message:String(s),severity:"error"},me,void 0,Et),!1}}function Xi(n){W.dispatch({effects:rl.reconfigure(_.readOnly.of(!!n))})}function cr(n){const e=n==="dark"||n==="light"?n:Vd();document.documentElement.dataset.theme=e,W.dispatch({effects:ar.reconfigure(Ud(e))})}function i1(n=[]){const e=n.map(t=>({from:Math.max(0,Math.min(t.from??0,W.state.doc.length)),to:Math.max(0,Math.min(t.to??t.from??0,W.state.doc.length)),severity:t.severity??"error",message:t.message??"Unknown error"}));W.dispatch(vd(W.state,e))}function rt(n,e){qt.registerHandler(n,async(t={},i=()=>{})=>{try{if(Et!==null&&n!==Ue.documentOpen&&n!==Ue.editorSetTheme&&(t.documentID!==me||t.sessionID!==Et))throw new Error("The editor session changed.");i({result:"ok",...await e(t)})}catch(s){i({result:"failed",message:String(s)})}})}pS(n=>{qt=n,rt(Ue.documentOpen,({payload:e={},documentID:t,sessionID:i=null})=>(Et=i,_t(e.content,t,e.version??0),il(W,e.resources??[]),Xi(e.readOnly),e.dirty&&(En("Restored unsaved edits","editing"),e.readOnly||ol()),{protocolVersion:Zd})),rt(Ue.documentReplace,({payload:e={},documentID:t})=>{if(W.state.readOnly||e.expectedContent!==void 0&&e.expectedContent!==W.state.doc.toString())throw new Error("The file changed or is read only.");return _t(e.content,t,e.version??at,!0),{}}),rt(Ue.documentSetReadOnly,({payload:e={}})=>(Xi(e.readOnly),{readOnly:!!e.readOnly})),rt(Ue.editorInsert,({payload:e={}})=>({inserted:ph(e.content??"")})),rt(Ue.editorFormat,async()=>({formatted:await lr()})),rt(Ue.editorSetTheme,({payload:e={}})=>(cr(e.theme),{})),rt(Ue.editorGetState,()=>({content:W.state.doc.toString(),version:at,documentID:me,sessionID:Et,selection:{from:W.state.selection.main.from,to:W.state.selection.main.to}})),rt(Ue.diagnosticsPublish,({payload:e={}})=>(i1(e.items),{})),rt("editor_setValue",({value:e})=>(_t(e),{})),rt("editor_insertValue",({value:e})=>({inserted:ph(e??"")})),rt("editor_getValue",()=>({value:W.state.doc.toString()})),rt("editor_setReadonly",({readonly:e})=>(Xi(e),{readonly:!!e})),rt("editor_formatCode",async()=>({formatted:await lr()})),mS(qt)});sl&&(document.querySelector("#native-editor").hidden=!0,document.querySelector("#web-studio").hidden=!1,n1());async function n1(){const n=document.querySelector("#pair-dialog"),e=document.querySelector("#pair-form"),t=document.querySelector("#pair-error"),i=document.querySelector("#package-select"),s=document.querySelector("#file-select"),r=document.querySelector("#connection-status"),o=document.querySelector("#disconnect-button"),a=document.querySelector("#studio-grid"),l=document.querySelector(".editor-column"),c=document.querySelector("#recovery-banner"),h=document.querySelector("#conflict-banner"),u=document.querySelector("#command-dialog"),f=document.querySelector("#command-search"),d=document.querySelector("#command-list"),p=document.querySelector("#compare-dialog");let m=window.sessionStorage.getItem("scriptwidget.web-studio.token")||"",g=[],y=null,b=null,x=null,C=0,k=null,S="",w="",U=null,F=YS(),V="",E="",M=null;function Y(v="Session ended. Enter the new code shown on your device."){m="",window.sessionStorage.removeItem("scriptwidget.web-studio.token"),o.hidden=!0,Q({type:"DISCONNECTED"}),r.textContent=v,Xi(!0),n.open||n.showModal()}function Q(v){F=NS(F,v);const Z={connecting:"Connecting",connected:"Connected",offline:"Offline",disconnected:"Disconnected"},L={idle:"Ready",draft:"Draft saved locally",saving:"Saving…",saved:"Saved",error:"Save failed",conflict:"Conflict"};r.dataset.state=F.connection,document.querySelector("#status-connection").textContent=Z[F.connection]||F.connection,En(L[F.save]||F.save,F.save),document.querySelector("#dirty-indicator").hidden=!["draft","saving","error","conflict"].includes(F.save),document.querySelector("#status-preview").textContent=F.preview==="requested"?"Preview requested":"Preview idle",document.querySelector("#preview-detail").textContent=F.preview==="requested"?"Requested on device":"Not requested"}const D=new _S({token:()=>m,onUnauthorized:()=>Y()}),P=(v,Z)=>D.request(v,Z);M=new HS(({packageID:v,path:Z,content:L,baseRevision:ne})=>P("/api/v1/document",{method:"PUT",body:JSON.stringify({package:v,path:Z,content:L,baseRevision:ne})}));async function j(v){m=(await P("/api/v1/pair",{method:"POST",body:JSON.stringify({code:v})})).token,window.sessionStorage.setItem("scriptwidget.web-studio.token",m),o.hidden=!1,Q({type:"CONNECTED"}),ae()}function ae(){window.clearInterval(y),y=window.setInterval(async()=>{if(m)try{const v=await P("/api/v1/session");if(!navigator.onLine)return;q(v),Q({type:"CONNECTED"})}catch(v){v.status!==401&&(r.textContent=`Interrupted · ${v.message}`,Q({type:"OFFLINE"}))}},5e3)}async function J(){if(g=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...g.map(Z=>new Option(Z.name,Z.id))),!g.length){r.textContent="No editable widgets",Xi(!0);return}await ee()}async function ee(){const v=g.find(ne=>ne.id===i.value),Z=v?.files||[];s.replaceChildren(...Z.map(ne=>new Option(ne,ne)));const L=Z.includes(v?.entry)?v.entry:Z[0];L&&(s.value=L),await H()}async function I(v=""){g=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...g.map(ge=>new Option(ge.name,ge.id))),V&&(i.value=V);const L=g.find(ge=>ge.id===i.value),ne=L?.files||[];s.replaceChildren(...ne.map(ge=>new Option(ge,ge))),s.value=ne.includes(v)?v:ne.includes(E)?E:L?.entry||ne[0]}async function H(){if(!i.value||!s.value)return;const v=new URLSearchParams({package:i.value,path:s.value}),Z=await P(`/api/v1/document?${v}`),L=`${i.value}/${s.value}`;V=i.value,E=s.value,S=Z.revision,w=Z.content,U=null,h.hidden=!0,_t(Z.content,L,0),il(W,g.find(ge=>ge.id===V)?.files??[]),M.open({documentID:L,packageID:V,path:E,revision:Z.revision,content:Z.content}),Xi(!!Z.readOnly),ce(Z);const ne=jS(window.localStorage,L,Z.content,Z.revision);c.hidden=!ne,c._draft=ne,document.querySelector("#recovery-message").textContent=ne?.isStale?"The device version also changed. Review before saving.":"Restore it or keep the device version.",r.textContent="Connected",Q({type:"CONNECTED"}),o.hidden=!1,Oe(),ae(),Me()}function ce(v){document.querySelector("#breadcrumb-package").textContent=v.packageName||i.value,document.querySelector("#breadcrumb-file").textContent=s.value,document.querySelector("#editor-tab-name").textContent=s.value,document.querySelector("#revision-detail").textContent=S?S.slice(0,8):"—",document.querySelector("#access-detail").textContent=v.readOnly?"Read only":"Editable"}function q(v){v.device&&(document.querySelector("#device-name").textContent=v.device.name||v.device.model,document.querySelector("#device-system").textContent=`${v.device.model} · ${v.device.system}`),v.preview?.package&&(document.querySelector("#preview-target").textContent=v.preview.package),v.preview?.snapshotSequence&&te()}async function te(){try{const v=await D.requestBlob("/api/v1/preview"),Z=URL.createObjectURL(v),L=document.querySelector("#device-preview"),ne=k;k=Z,L.onload=()=>{ne&&URL.revokeObjectURL(ne)},L.src=Z,L.hidden=!1,document.querySelector("#preview-detail").textContent="Rendered on device"}catch{}}function re(v){const Z=document.querySelector("#console-list"),L=document.createElement("li");for(L.className=v.level||"info",L.textContent=v.message||"",Z.append(L);Z.children.length>200;)Z.firstChild.remove();Z.scrollTop=Z.scrollHeight}function Me(){window.clearTimeout(x);const v=async()=>{if(m)try{const Z=await P(`/api/v1/events?after=${C}`);C=Z.nextSequence??C;for(const L of Z.events||[])L.type==="console"&&re(L.payload||{}),L.type==="preview.snapshot"&&te(),L.type==="preview.requested"&&(document.querySelector("#status-preview").textContent="Preview requested",document.querySelector("#preview-detail").textContent="Requested on device"),L.type==="files.changed"&&L.payload?.package===V&&I(E).catch(Ie);Q({type:"CONNECTED"})}catch(Z){Z.status!==401&&Q({type:"OFFLINE"})}finally{m&&(x=window.setTimeout(v,1e3))}};v()}function Oe(){const v=Ed(W);document.querySelector("#problems-list").replaceChildren(...v.map(L=>{const ne=W.state.doc.lineAt(L.from),ge=document.createElement("li");ge.className=`problem-item ${L.severity}`;const it=document.createElement("button");return it.type="button",it.innerHTML=`${L.severity==="error"?"●":"▲"}Ln ${ne.number}`,it.children[1].textContent=L.message,it.addEventListener("click",()=>{W.dispatch({selection:{anchor:L.from},scrollIntoView:!0}),W.focus()}),ge.append(it),ge})),document.querySelector("#problems-count").textContent=String(v.length),document.querySelector("#status-problem-count").textContent=String(v.length),document.querySelector("#problems-summary").textContent=v.length?`${v.filter(L=>L.severity==="error").length} errors, ${v.filter(L=>L.severity!=="error").length} warnings`:"No problems detected"}async function ie(v,Z,L=null){M.snapshot()?.content!==v&&M.edit(v),L&&M.rebase(L),Q({type:"SAVING"});try{const ne=await M.flush();if(ne.ignored){Z({result:"ok",ignored:!0});return}if(ne.skipped){Q({type:"SAVED"}),Z({result:"ok",skipped:!0});return}const ge=ne.result||{},it=M.snapshot();S=it?.revision||S,w=it?.content||v,fo(window.localStorage,me),U=null,h.hidden=!0,document.querySelector("#revision-detail").textContent=S?.slice(0,8)||"—",Q({type:"SAVED",preview:ge.preview?.state}),Z({result:"ok",...ge})}catch(ne){ne.status===409?(U=ne.body,h.hidden=!1,Q({type:"CONFLICT",conflict:U})):Q({type:"SAVE_FAILED"}),Z({result:"failed",message:ne.message})}}qt={registerHandler(){},callHandler(v,Z,L=()=>{}){if(v===Ue.documentSave)ie(Z.payload.content,L);else if(v===Ue.documentResources){const ne=me,ge=V;P("/api/v1/packages").then(it=>{if(ne!==me||Z.documentID!==me||ge!==V){L({result:"failed"});return}L({result:"ok",documentID:ne,resources:(it.packages??[]).find(zn=>zn.id===ge)?.files??[]})}).catch(()=>L({result:"failed"}))}else L({result:"ok"})}},zd={documentChanged(){const v=W.state.doc.toString();M.edit(v),hh(window.localStorage,me,v,M.snapshot()?.revision||S),Q({type:"EDITED"}),window.clearTimeout(b),b=window.setTimeout(Oe,380)}};async function ve(v,Z){if(!uh(F.save)){await v();return}try{if(window.clearTimeout(Mn),await ie(W.state.doc.toString(),()=>{}),!M.isDirty&&F.save!=="conflict"){await v();return}}catch{}window.confirm("This document has changes that are not saved on the device. A browser draft is available. Switch anyway?")?await v():Z()}i.addEventListener("change",()=>{const v=i.value;i.value=V,ve(async()=>{i.value=v,await ee()},()=>{i.value=V}).catch(Ie)}),s.addEventListener("change",()=>{const v=s.value;s.value=E,ve(async()=>{s.value=v,await H()},()=>{s.value=E}).catch(Ie)});function Ie(v){r.textContent=v.message||String(v),Q({type:"SAVE_FAILED"})}e.addEventListener("submit",async v=>{v.preventDefault(),t.textContent="";try{await j(document.querySelector("#pair-code").value),n.close(),await J()}catch(Z){t.textContent=Z.message}}),o.addEventListener("click",async()=>{try{await P("/api/v1/session",{method:"DELETE"})}catch{}Y("Disconnected. Start a new session with the code on your device.")}),document.querySelector("#new-file").addEventListener("click",async()=>{const v=window.prompt("New package-relative text file","source/helper.js")?.trim();if(v)try{await P("/api/v1/document",{method:"POST",body:JSON.stringify({package:V,path:v})}),await I(v),await H()}catch(Z){Ie(Z)}}),document.querySelector("#delete-file").addEventListener("click",async()=>{const v=g.find(Z=>Z.id===V);if(!E||E===v?.entry){window.alert("The widget entry file cannot be deleted.");return}if(window.confirm(`Delete ${E}? This cannot be undone.`))try{const Z=new URLSearchParams({package:V,path:E});await P(`/api/v1/document?${Z}`,{method:"DELETE"}),E="",await I(),await H()}catch(Z){Ie(Z)}}),document.querySelector("#clear-console").addEventListener("click",()=>document.querySelector("#console-list").replaceChildren()),document.querySelector("#restore-draft").addEventListener("click",()=>{const v=c._draft;v&&(_t(v.content,v.documentID,at+1),c.hidden=!0,hh(window.localStorage,me,v.content,S),Q({type:"EDITED"}),Oe())}),document.querySelector("#discard-draft").addEventListener("click",()=>{fo(window.localStorage,me),c.hidden=!0}),document.querySelector("#reload-server").addEventListener("click",()=>{U&&(fo(window.localStorage,me),S=U.currentRevision,w=U.currentContent,_t(w,me,at+1),M.open({documentID:me,packageID:V,path:E,revision:S,content:w}),U=null,h.hidden=!0,Q({type:"SAVED"}),Oe())}),document.querySelector("#keep-local").addEventListener("click",()=>{U&&ie(W.state.doc.toString(),()=>{},U.currentRevision)}),document.querySelector("#compare-conflict").addEventListener("click",()=>{document.querySelector("#compare-local").textContent=W.state.doc.toString(),document.querySelector("#compare-server").textContent=U?.currentContent||w,p.showModal()}),p.querySelector("button").addEventListener("click",()=>p.close());function oe(){const v=l.classList.toggle("problems-collapsed");document.querySelector("#problems-toggle").setAttribute("aria-expanded",String(!v))}function Ae(v){a.classList.toggle(`show-${v}`)}document.querySelector("#problems-toggle").addEventListener("click",oe),document.querySelector("#status-problems").addEventListener("click",()=>{l.classList.remove("problems-collapsed")}),document.querySelector("#explorer-button").addEventListener("click",()=>Ae("explorer")),document.querySelector("#inspector-button").addEventListener("click",()=>Ae("inspector")),document.querySelectorAll("[data-close-panel]").forEach(v=>v.addEventListener("click",()=>a.classList.remove(`show-${v.dataset.closePanel}`)));const le=[{name:"Save Document",keys:"⌘S",run:()=>{window.clearTimeout(Mn),ie(W.state.doc.toString(),()=>{})}},{name:"Format Document",keys:"⇧⌥F",run:lr},{name:"Toggle Problems",keys:"⌘J",run:oe},{name:"Toggle Explorer",keys:"⌘⇧E",run:()=>Ae("explorer")},{name:"Toggle Inspector",keys:"",run:()=>Ae("inspector")},{name:"Use Light Theme",keys:"",run:()=>cr("light")},{name:"Use Dark Theme",keys:"",run:()=>cr("dark")}];function qe(v=""){const Z=le.filter(L=>L.name.toLowerCase().includes(v.toLowerCase()));d.replaceChildren(...Z.map(L=>{const ne=document.createElement("li"),ge=document.createElement("button");ge.type="button",ge.className="command";const it=document.createElement("span");it.textContent=L.name;const zn=document.createElement("kbd");return zn.textContent=L.keys,ge.append(it,zn),ge.addEventListener("click",()=>{u.close(),L.run()}),ne.append(ge),ne}))}function tt(){qe(),u.showModal(),f.value="",f.focus()}document.querySelector("#command-button").addEventListener("click",tt),f.addEventListener("input",()=>qe(f.value)),document.addEventListener("keydown",v=>{const Z=v.metaKey||v.ctrlKey;Z&&v.shiftKey&&v.key.toLowerCase()==="p"?(v.preventDefault(),tt()):Z&&v.key.toLowerCase()==="s"?(v.preventDefault(),le[0].run()):Z&&v.key.toLowerCase()==="j"?(v.preventDefault(),oe()):Z&&v.shiftKey&&v.key.toLowerCase()==="e"?(v.preventDefault(),Ae("explorer")):v.shiftKey&&v.altKey&&v.key.toLowerCase()==="f"&&(v.preventDefault(),lr())}),W.dom.addEventListener("keyup",ai),W.dom.addEventListener("mouseup",ai);function ai(){const v=W.state.selection.main.head,Z=W.state.doc.lineAt(v);document.querySelector("#cursor-position").textContent=`Ln ${Z.number}, Col ${v-Z.from+1}`}window.addEventListener("offline",()=>{r.textContent="Computer is offline",Q({type:"OFFLINE"})}),window.addEventListener("online",()=>{m&&P("/api/v1/session").then(v=>(q(v),Q({type:"CONNECTED"}),J())).catch(Ie)}),window.addEventListener("beforeunload",v=>{uh(F.save)&&(v.preventDefault(),v.returnValue="")});try{await J()}catch{Y("Pair with the code shown on your device.")}}window.matchMedia?.("(prefers-color-scheme: dark)").addEventListener("change",()=>cr("system"));window.webkit||_t(`// ScriptWidget Studio +const widget = ( + + + +); +`); diff --git a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html index f08a8fe2..3bc96711 100644 --- a/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html +++ b/iOS/ScriptWidget/View/CodeEditor/MirrorEditor/StudioEditor.bundle/index.html @@ -5,7 +5,7 @@ ScriptWidget Web Studio - + diff --git a/iOS/ScriptWidgetWidget/Info.plist b/iOS/ScriptWidgetWidget/Info.plist index 8d493edb..75ec5a51 100644 --- a/iOS/ScriptWidgetWidget/Info.plist +++ b/iOS/ScriptWidgetWidget/Info.plist @@ -56,5 +56,11 @@ Larabiefont Free.ttf Apple ][.ttf + NSContactsUsageDescription + Select contacts to share with your chosen widgets. + NSHomeKitUsageDescription + Read selected home accessories and run selected controls or scenes from widgets. + NSAlarmKitUsageDescription + Schedule alarms and timers you explicitly request from a widget. diff --git a/iOS/ScriptWidgetWidget/LiveActivity/ScriptWidgetAlarmLiveActivity.swift b/iOS/ScriptWidgetWidget/LiveActivity/ScriptWidgetAlarmLiveActivity.swift new file mode 100644 index 00000000..a70db60e --- /dev/null +++ b/iOS/ScriptWidgetWidget/LiveActivity/ScriptWidgetAlarmLiveActivity.swift @@ -0,0 +1,42 @@ +import SwiftUI +import WidgetKit +import AlarmKit + +/// AlarmKit countdown UI uses native dates; it never evaluates widget scripts +/// or queries external data while rendering a Live Activity. +@available(iOSApplicationExtension 26.0, *) +struct ScriptWidgetAlarmLiveActivity: Widget { + var body: some WidgetConfiguration { + ActivityConfiguration(for: AlarmAttributes.self) { context in + VStack(alignment: .leading, spacing: 8) { + Label("ScriptWidget Timer", systemImage: "timer").font(.caption).foregroundStyle(.secondary) + Text(context.attributes.presentation.alert.title).font(.headline) + time(context.state.mode).font(.largeTitle.monospacedDigit()) + } + .padding() + .activityBackgroundTint(.black) + .activitySystemActionForegroundColor(.white) + } dynamicIsland: { context in + DynamicIsland { + DynamicIslandExpandedRegion(.leading) { Image(systemName: "timer").foregroundStyle(.teal) } + DynamicIslandExpandedRegion(.center) { Text(context.attributes.presentation.alert.title).lineLimit(1) } + DynamicIslandExpandedRegion(.bottom) { time(context.state.mode).font(.title.monospacedDigit()) } + } compactLeading: { + Image(systemName: "timer").foregroundStyle(.teal) + } compactTrailing: { + time(context.state.mode).monospacedDigit().frame(maxWidth: 64) + } minimal: { + Image(systemName: "timer") + } + } + } + @ViewBuilder + private func time(_ mode: AlarmPresentationState.Mode) -> some View { + switch mode { + case .countdown(let value): Text(timerInterval: value.startDate...max(value.startDate, value.fireDate), countsDown: true) + case .paused: Text("Paused") + case .alert: Text("Time’s up") + @unknown default: Text("Timer") + } + } +} diff --git a/iOS/ScriptWidgetWidget/ScriptWidgetMain.swift b/iOS/ScriptWidgetWidget/ScriptWidgetMain.swift index 36241a3c..3c91c056 100644 --- a/iOS/ScriptWidgetWidget/ScriptWidgetMain.swift +++ b/iOS/ScriptWidgetWidget/ScriptWidgetMain.swift @@ -46,6 +46,7 @@ struct ScriptWidgets: WidgetBundle { var body: some Widget { ScriptWidgetMainWidget() ScriptLiveActivityWidget() + if #available(iOSApplicationExtension 26.0, *) { ScriptWidgetAlarmLiveActivity() } ScriptWidgetButtonControlWidget() ScriptWidgetControlWidget() } diff --git a/iOS/ScriptWidgetWidget/ScriptWidgetWidget.entitlements b/iOS/ScriptWidgetWidget/ScriptWidgetWidget.entitlements index b5675d24..2950fa1e 100644 --- a/iOS/ScriptWidgetWidget/ScriptWidgetWidget.entitlements +++ b/iOS/ScriptWidgetWidget/ScriptWidgetWidget.entitlements @@ -27,5 +27,7 @@ group.everettjf.scriptwidget + com.apple.developer.homekit + diff --git a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj index 05bc0971..acd30a79 100644 --- a/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj +++ b/macOS/ScriptWidgetMac.xcodeproj/project.pbxproj @@ -91,6 +91,7 @@ A621B963FD9840DB82F74813 /* ScriptWidgetRuntimeLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 124FAA64786342F5A3432631 /* ScriptWidgetRuntimeLocation.swift */; }; A990D65181507F3AA8EB7951 /* ScriptWidgetElementTagExtras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DAACB8F5182390731F6DFE7 /* ScriptWidgetElementTagExtras.swift */; }; C43EFB088718FE26BF9B393F /* PackageCacheTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CF0C59766F5837DEC033FB9 /* PackageCacheTests.swift */; }; + DD4971B1EBB047D7A8B6AA34 /* SystemServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F8E682016AD45E7A899E9A6 /* SystemServiceTests.swift */; }; D1995C9429536BB800D1BD94 /* MineGaugeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C5729536BB800D1BD94 /* MineGaugeView.swift */; }; D1995C9529536BB800D1BD94 /* MineGaugeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C5729536BB800D1BD94 /* MineGaugeView.swift */; }; D1995C9629536BB800D1BD94 /* ScriptWidgetElementColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C5829536BB800D1BD94 /* ScriptWidgetElementColor.swift */; }; @@ -175,8 +176,28 @@ D1995CE529536BB800D1BD94 /* ScriptWidgetRuntimeFetch.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8A29536BB800D1BD94 /* ScriptWidgetRuntimeFetch.swift */; }; D1995CE629536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8B29536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift */; }; 2848A73946D449769C0CD55F /* ScriptWidgetRuntimeCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06F6759273EF4F709A101EA6 /* ScriptWidgetRuntimeCloudJSON.swift */; }; + 0B66058AFF5D468293210F09 /* ScriptWidgetRuntimeHome.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06580CB379D48EDA122214A /* ScriptWidgetRuntimeHome.swift */; }; + 475BF3577F8043A78DC4A0A6 /* ScriptWidgetRuntimeContacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DCF2DB7D61A41DAAFAF0573 /* ScriptWidgetRuntimeContacts.swift */; }; + 85E36B7D4A444AD5BAD89EBA /* ScriptWidgetRuntimeDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B4FB15F3744FEE88CAE788 /* ScriptWidgetRuntimeDocuments.swift */; }; + 198AB87CFA224B3DB68AEAC9 /* ScriptWidgetRuntimeAlarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = A127D754AED148F0BA45B9D6 /* ScriptWidgetRuntimeAlarms.swift */; }; + 9383F4BEDE8E4022959F8A45 /* ScriptWidgetRuntimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4C812353D3490BB2D30429 /* ScriptWidgetRuntimeWeather.swift */; }; + F184017F8DA4436797FC2F41 /* ScriptWidgetRuntimeMaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC36F2C183B41BE91E03EBC /* ScriptWidgetRuntimeMaps.swift */; }; + B12F091859EC436DABC8C8C7 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0BA60773C8A46EAB7B90001 /* ScriptWidgetRuntimeHealthHistory.swift */; }; + 14BE2B9A71254A699CCA7AB5 /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6598107944B540E9ACD548E6 /* ScriptWidgetRuntimeCalendarWrites.swift */; }; + 7A9A3DF0BF3E4CBEACFB7C2E /* ScriptWidgetRuntimeNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28FC797570D4EF18F352DC8 /* ScriptWidgetRuntimeNotifications.swift */; }; + 06FFA3E8D5B04EFEB162B378 /* ScriptWidgetRuntimeSystemServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85434CD26E2745F3ABAAF731 /* ScriptWidgetRuntimeSystemServices.swift */; }; D1995CE729536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8B29536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift */; }; 005E0FFB61C747FB9D148955 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06F6759273EF4F709A101EA6 /* ScriptWidgetRuntimeCloudJSON.swift */; }; + ED10B15491EE4CDFBB175205 /* ScriptWidgetRuntimeHome.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06580CB379D48EDA122214A /* ScriptWidgetRuntimeHome.swift */; }; + 9645A5F773C74E478719C366 /* ScriptWidgetRuntimeContacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DCF2DB7D61A41DAAFAF0573 /* ScriptWidgetRuntimeContacts.swift */; }; + F4415D7C41D74F548A88D81F /* ScriptWidgetRuntimeDocuments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74B4FB15F3744FEE88CAE788 /* ScriptWidgetRuntimeDocuments.swift */; }; + C575AE472D4E4356A5143350 /* ScriptWidgetRuntimeAlarms.swift in Sources */ = {isa = PBXBuildFile; fileRef = A127D754AED148F0BA45B9D6 /* ScriptWidgetRuntimeAlarms.swift */; }; + A0A86A24C5C949C0AF743608 /* ScriptWidgetRuntimeWeather.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4C812353D3490BB2D30429 /* ScriptWidgetRuntimeWeather.swift */; }; + FF4F63F4478C419D9A9D1DF9 /* ScriptWidgetRuntimeMaps.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC36F2C183B41BE91E03EBC /* ScriptWidgetRuntimeMaps.swift */; }; + E0F2CE2AF2064CD5B66369CD /* ScriptWidgetRuntimeHealthHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0BA60773C8A46EAB7B90001 /* ScriptWidgetRuntimeHealthHistory.swift */; }; + 9B207930D97748EBB593C33D /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6598107944B540E9ACD548E6 /* ScriptWidgetRuntimeCalendarWrites.swift */; }; + 0B0C94EBB37E4764A51AD7DF /* ScriptWidgetRuntimeNotifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28FC797570D4EF18F352DC8 /* ScriptWidgetRuntimeNotifications.swift */; }; + 770D1ED6C3444D8AB975BB1D /* ScriptWidgetRuntimeSystemServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85434CD26E2745F3ABAAF731 /* ScriptWidgetRuntimeSystemServices.swift */; }; D1995CE829536BB800D1BD94 /* ScriptWidgetRuntimePromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8C29536BB800D1BD94 /* ScriptWidgetRuntimePromise.swift */; }; D1995CE929536BB800D1BD94 /* ScriptWidgetRuntimePromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8C29536BB800D1BD94 /* ScriptWidgetRuntimePromise.swift */; }; D1995CEA29536BB800D1BD94 /* ScriptWidgetRuntimeConsole.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1995C8D29536BB800D1BD94 /* ScriptWidgetRuntimeConsole.swift */; }; @@ -267,6 +288,7 @@ F7F9A50928F64529981556FE /* ScriptWidgetCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9469B308A04CF7BC84E549 /* ScriptWidgetCloudJSON.swift */; }; 1A12140C0C8248BDB21EF14F /* ScriptWidgetRecordsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10538215ECFD4FADA216F872 /* ScriptWidgetRecordsView.swift */; }; 466E709555B74AAD834094B4 /* ScriptWidgetCloudJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5C35C0CEF344629F7D4B6B /* ScriptWidgetCloudJSONView.swift */; }; + 2BD5540F422248D1872E98DD /* ScriptWidgetSystemAccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB7CA52FDC44FCCB4833C76 /* ScriptWidgetSystemAccessView.swift */; }; 2F12113B8920446580D6B39E /* ScriptWidgetStorageUpgradeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF563C68CB1F4834876CF479 /* ScriptWidgetStorageUpgradeView.swift */; }; 36FDE008D662491489635EA7 /* ScriptWidgetRecordStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98FE968018D484D8FBCDC17 /* ScriptWidgetRecordStore.swift */; }; 3D87692664A44C799D7182CA /* ScriptWidgetCloudJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A9469B308A04CF7BC84E549 /* ScriptWidgetCloudJSON.swift */; }; @@ -319,6 +341,7 @@ 5CBD28F52391D2A6FD860DE8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.0.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; 77AA76CA4DC3B9BF781E4FD2 /* ScriptWidgetRuntimeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ScriptWidgetRuntimeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 7CF0C59766F5837DEC033FB9 /* PackageCacheTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PackageCacheTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/PackageCacheTests.swift; sourceTree = ""; }; + 8F8E682016AD45E7A899E9A6 /* SystemServiceTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SystemServiceTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/SystemServiceTests.swift; sourceTree = ""; }; 8445DB90E4A34EB19697BAEB /* ReloadWidgetAppIntent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReloadWidgetAppIntent.swift; sourceTree = ""; }; 8A078A98942A275CF9F25103 /* RuntimeUnitTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RuntimeUnitTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/RuntimeUnitTests.swift; sourceTree = ""; }; A268224FAE0BE130C6D0BAC0 /* ServiceAccessPolicyTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServiceAccessPolicyTests.swift; path = ../Tests/ScriptWidgetRuntimeTests/ServiceAccessPolicyTests.swift; sourceTree = ""; }; @@ -414,6 +437,16 @@ D1995C8A29536BB800D1BD94 /* ScriptWidgetRuntimeFetch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeFetch.swift; sourceTree = ""; }; D1995C8B29536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeFile.swift; sourceTree = ""; }; 06F6759273EF4F709A101EA6 /* ScriptWidgetRuntimeCloudJSON.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCloudJSON.swift; sourceTree = ""; }; + A06580CB379D48EDA122214A /* ScriptWidgetRuntimeHome.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHome.swift; sourceTree = ""; }; + 0DCF2DB7D61A41DAAFAF0573 /* ScriptWidgetRuntimeContacts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeContacts.swift; sourceTree = ""; }; + 74B4FB15F3744FEE88CAE788 /* ScriptWidgetRuntimeDocuments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeDocuments.swift; sourceTree = ""; }; + A127D754AED148F0BA45B9D6 /* ScriptWidgetRuntimeAlarms.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeAlarms.swift; sourceTree = ""; }; + 5C4C812353D3490BB2D30429 /* ScriptWidgetRuntimeWeather.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeWeather.swift; sourceTree = ""; }; + DBC36F2C183B41BE91E03EBC /* ScriptWidgetRuntimeMaps.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeMaps.swift; sourceTree = ""; }; + E0BA60773C8A46EAB7B90001 /* ScriptWidgetRuntimeHealthHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeHealthHistory.swift; sourceTree = ""; }; + 6598107944B540E9ACD548E6 /* ScriptWidgetRuntimeCalendarWrites.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeCalendarWrites.swift; sourceTree = ""; }; + A28FC797570D4EF18F352DC8 /* ScriptWidgetRuntimeNotifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeNotifications.swift; sourceTree = ""; }; + 85434CD26E2745F3ABAAF731 /* ScriptWidgetRuntimeSystemServices.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeSystemServices.swift; sourceTree = ""; }; D1995C8C29536BB800D1BD94 /* ScriptWidgetRuntimePromise.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimePromise.swift; sourceTree = ""; }; D1995C8D29536BB800D1BD94 /* ScriptWidgetRuntimeConsole.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeConsole.swift; sourceTree = ""; }; D1995C8E29536BB800D1BD94 /* ScriptWidgetRuntimeDevice.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRuntimeDevice.swift; sourceTree = ""; }; @@ -484,6 +517,7 @@ 8A9469B308A04CF7BC84E549 /* ScriptWidgetCloudJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetCloudJSON.swift; sourceTree = ""; }; 10538215ECFD4FADA216F872 /* ScriptWidgetRecordsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetRecordsView.swift; sourceTree = ""; }; FF5C35C0CEF344629F7D4B6B /* ScriptWidgetCloudJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetCloudJSONView.swift; sourceTree = ""; }; + 2FB7CA52FDC44FCCB4833C76 /* ScriptWidgetSystemAccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetSystemAccessView.swift; sourceTree = ""; }; FF563C68CB1F4834876CF479 /* ScriptWidgetStorageUpgradeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageUpgradeView.swift; sourceTree = ""; }; B9D4AE7B65A246F08085C382 /* ScriptWidgetStorageNamespaces.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageNamespaces.swift; sourceTree = ""; }; 64423A310BE1421199E81550 /* ScriptWidgetStorageFiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScriptWidgetStorageFiles.swift; sourceTree = ""; }; @@ -635,6 +669,7 @@ 1492D936BBC23E9D0195DE26 /* RuntimeExecutionTests.swift */, A43E23B1BB04A5AC18DEC1B1 /* BrowserPreviewParityTests.swift */, 7CF0C59766F5837DEC033FB9 /* PackageCacheTests.swift */, + 8F8E682016AD45E7A899E9A6 /* SystemServiceTests.swift */, ); name = Tests; sourceTree = SOURCE_ROOT; @@ -804,6 +839,16 @@ D1995C8A29536BB800D1BD94 /* ScriptWidgetRuntimeFetch.swift */, D1995C8B29536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift */, 06F6759273EF4F709A101EA6 /* ScriptWidgetRuntimeCloudJSON.swift */, + A06580CB379D48EDA122214A /* ScriptWidgetRuntimeHome.swift */, + 0DCF2DB7D61A41DAAFAF0573 /* ScriptWidgetRuntimeContacts.swift */, + 74B4FB15F3744FEE88CAE788 /* ScriptWidgetRuntimeDocuments.swift */, + A127D754AED148F0BA45B9D6 /* ScriptWidgetRuntimeAlarms.swift */, + 5C4C812353D3490BB2D30429 /* ScriptWidgetRuntimeWeather.swift */, + DBC36F2C183B41BE91E03EBC /* ScriptWidgetRuntimeMaps.swift */, + E0BA60773C8A46EAB7B90001 /* ScriptWidgetRuntimeHealthHistory.swift */, + 6598107944B540E9ACD548E6 /* ScriptWidgetRuntimeCalendarWrites.swift */, + A28FC797570D4EF18F352DC8 /* ScriptWidgetRuntimeNotifications.swift */, + 85434CD26E2745F3ABAAF731 /* ScriptWidgetRuntimeSystemServices.swift */, 8E3B593386F820DCF99C631E /* ScriptWidgetRuntimeSystem.swift */, CD9F1F298DF5C4FAED8AAD43 /* ScriptWidgetRuntimeHealth.swift */, 1F219B313B36BE844638FBC2 /* ScriptWidgetRuntimeCalendar.swift */, @@ -859,6 +904,7 @@ 8A9469B308A04CF7BC84E549 /* ScriptWidgetCloudJSON.swift */, 10538215ECFD4FADA216F872 /* ScriptWidgetRecordsView.swift */, FF5C35C0CEF344629F7D4B6B /* ScriptWidgetCloudJSONView.swift */, + 2FB7CA52FDC44FCCB4833C76 /* ScriptWidgetSystemAccessView.swift */, FF563C68CB1F4834876CF479 /* ScriptWidgetStorageUpgradeView.swift */, D1995CF629536BC700D1BD94 /* ScriptModel.swift */, D1A0000000E0000000001000 /* ScriptMetadata.swift */, @@ -1264,6 +1310,7 @@ files = ( A10633E3A2F1C708E2078A33 /* AIGenerationTests.swift in Sources */, C43EFB088718FE26BF9B393F /* PackageCacheTests.swift in Sources */, + DD4971B1EBB047D7A8B6AA34 /* SystemServiceTests.swift in Sources */, EBAE7DF1351F9A6ECE2E2AE2 /* RuntimeExecutionTests.swift in Sources */, CD29AE3DAA240E9D6FF92EA4 /* BrowserPreviewParityTests.swift in Sources */, 7B77915046C30834D191319E /* RuntimeUnitTests.swift in Sources */, @@ -1391,6 +1438,16 @@ D1995CB829536BB800D1BD94 /* ScriptWidgetAttributeText.swift in Sources */, D1995CE629536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift in Sources */, 2848A73946D449769C0CD55F /* ScriptWidgetRuntimeCloudJSON.swift in Sources */, + 0B66058AFF5D468293210F09 /* ScriptWidgetRuntimeHome.swift in Sources */, + 475BF3577F8043A78DC4A0A6 /* ScriptWidgetRuntimeContacts.swift in Sources */, + 85E36B7D4A444AD5BAD89EBA /* ScriptWidgetRuntimeDocuments.swift in Sources */, + 198AB87CFA224B3DB68AEAC9 /* ScriptWidgetRuntimeAlarms.swift in Sources */, + 9383F4BEDE8E4022959F8A45 /* ScriptWidgetRuntimeWeather.swift in Sources */, + F184017F8DA4436797FC2F41 /* ScriptWidgetRuntimeMaps.swift in Sources */, + B12F091859EC436DABC8C8C7 /* ScriptWidgetRuntimeHealthHistory.swift in Sources */, + 14BE2B9A71254A699CCA7AB5 /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */, + 7A9A3DF0BF3E4CBEACFB7C2E /* ScriptWidgetRuntimeNotifications.swift in Sources */, + 06FFA3E8D5B04EFEB162B378 /* ScriptWidgetRuntimeSystemServices.swift in Sources */, 2748BECB1506585B128418DC /* ScriptWidgetRuntimeSystem.swift in Sources */, 75F45276F84EA01B91EC0CEC /* ScriptWidgetRuntimeHealth.swift in Sources */, 404165AC81E77E3021CBD919 /* ScriptWidgetRuntimeCalendar.swift in Sources */, @@ -1414,6 +1471,7 @@ F7F9A50928F64529981556FE /* ScriptWidgetCloudJSON.swift in Sources */, 1A12140C0C8248BDB21EF14F /* ScriptWidgetRecordsView.swift in Sources */, 466E709555B74AAD834094B4 /* ScriptWidgetCloudJSONView.swift in Sources */, + 2BD5540F422248D1872E98DD /* ScriptWidgetSystemAccessView.swift in Sources */, 2F12113B8920446580D6B39E /* ScriptWidgetStorageUpgradeView.swift in Sources */, 65BB9B8C3E605B9CDA324E9C /* ScriptWidgetElementTagExtras.swift in Sources */, F29118C02791DC5300B860B0 /* WidgetRowView.swift in Sources */, @@ -1464,6 +1522,16 @@ D1995CB929536BB800D1BD94 /* ScriptWidgetAttributeText.swift in Sources */, D1995CE729536BB800D1BD94 /* ScriptWidgetRuntimeFile.swift in Sources */, 005E0FFB61C747FB9D148955 /* ScriptWidgetRuntimeCloudJSON.swift in Sources */, + ED10B15491EE4CDFBB175205 /* ScriptWidgetRuntimeHome.swift in Sources */, + 9645A5F773C74E478719C366 /* ScriptWidgetRuntimeContacts.swift in Sources */, + F4415D7C41D74F548A88D81F /* ScriptWidgetRuntimeDocuments.swift in Sources */, + C575AE472D4E4356A5143350 /* ScriptWidgetRuntimeAlarms.swift in Sources */, + A0A86A24C5C949C0AF743608 /* ScriptWidgetRuntimeWeather.swift in Sources */, + FF4F63F4478C419D9A9D1DF9 /* ScriptWidgetRuntimeMaps.swift in Sources */, + E0F2CE2AF2064CD5B66369CD /* ScriptWidgetRuntimeHealthHistory.swift in Sources */, + 9B207930D97748EBB593C33D /* ScriptWidgetRuntimeCalendarWrites.swift in Sources */, + 0B0C94EBB37E4764A51AD7DF /* ScriptWidgetRuntimeNotifications.swift in Sources */, + 770D1ED6C3444D8AB975BB1D /* ScriptWidgetRuntimeSystemServices.swift in Sources */, 855878C6168D59CE4C6CB13C /* ScriptWidgetRuntimeSystem.swift in Sources */, 1C24B164B4EBE88815490627 /* ScriptWidgetRuntimeHealth.swift in Sources */, 2E70438FD53BEA7361410166 /* ScriptWidgetRuntimeCalendar.swift in Sources */, diff --git a/macOS/ScriptWidgetMac/App/ScriptWidgetMacApp.swift b/macOS/ScriptWidgetMac/App/ScriptWidgetMacApp.swift index e241b80b..0f9b3e9f 100644 --- a/macOS/ScriptWidgetMac/App/ScriptWidgetMacApp.swift +++ b/macOS/ScriptWidgetMac/App/ScriptWidgetMacApp.swift @@ -32,6 +32,7 @@ struct ScriptWidgetMacApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate; init() { + ScriptWidgetSystemServices.startLifecycle() #if DEBUG ScriptWidgetCutoverProcessProbe.runIfRequested() #endif diff --git a/macOS/ScriptWidgetMac/Info.plist b/macOS/ScriptWidgetMac/Info.plist index 3090b9d2..69f7e63e 100644 --- a/macOS/ScriptWidgetMac/Info.plist +++ b/macOS/ScriptWidgetMac/Info.plist @@ -68,5 +68,11 @@ ATSApplicationFontsPath . + NSContactsUsageDescription + Select contacts to share with your chosen widgets. + NSHomeKitUsageDescription + Read selected home accessories and run selected controls or scenes from widgets. + NSAlarmKitUsageDescription + Schedule alarms and timers you explicitly request from a widget. diff --git a/macOS/ScriptWidgetMac/Sidebar/SidebarView.swift b/macOS/ScriptWidgetMac/Sidebar/SidebarView.swift index be78dd68..2cf627b4 100644 --- a/macOS/ScriptWidgetMac/Sidebar/SidebarView.swift +++ b/macOS/ScriptWidgetMac/Sidebar/SidebarView.swift @@ -24,6 +24,7 @@ struct SidebarView: View { @State private var searchText = "" @State private var selectedRecordItem: ScriptModel? @State private var selectedCloudItem: ScriptModel? + @State private var selectedSystemItem: ScriptModel? // rename @State private var renameCurrentName = "" @@ -38,6 +39,7 @@ struct SidebarView: View { var body: some View { content .frame(minWidth: 230, idealWidth: 260, maxWidth: 320) + .sheet(item: $selectedSystemItem) { item in ScriptWidgetSystemAccessView(package: item.package) } .sheet(item: $selectedCloudItem) { item in ScriptWidgetCloudJSONView(package: item.package) } .sheet(item: $selectedRecordItem) { item in ScriptWidgetRecordsView(package: item.package) } .sheet(isPresented: $renameShowingSheet) { @@ -143,6 +145,9 @@ struct SidebarView: View { .padding(.vertical, 2) } .contextMenu(menuItems: { + if ScriptWidgetSystemAccessView.supports(item.package) { + Button("System Access", systemImage: "hand.raised") { selectedSystemItem = item } + } if item.package.readManifest()?.permissions.contains(.icloud) == true { Button("iCloud Data", systemImage: "icloud") { selectedCloudItem = item } } diff --git a/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-BaJfekQk.js b/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-BaJfekQk.js deleted file mode 100644 index 0f976695..00000000 --- a/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-BaJfekQk.js +++ /dev/null @@ -1,59 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();const Yd="modulepreload",Nd=function(n,e){return new URL(n,e).href},la={},Cs=function(e,t,i){let r=Promise.resolve();if(t&&t.length>0){let c=function(h){return Promise.all(h.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),a=l?.nonce||l?.getAttribute("nonce");r=c(t.map(h=>{if(h=Nd(h,i),h in la)return;la[h]=!0;const u=h.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(i)for(let p=o.length-1;p>=0;p--){const m=o[p];if(m.href===h&&(!u||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${h}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Yd,u||(d.as="script"),d.crossOrigin="",d.href=h,a&&d.setAttribute("nonce",a),document.head.appendChild(d),u)return new Promise((p,m)=>{d.addEventListener("load",p),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&s(l.reason);return e().catch(s)})};let po=[],mh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=mh[i])e=i+1;else return!0;if(e==t)return!1}}function aa(n){return n>=127462&&n<=127487}const ca=8205;function Hd(n,e,t=!0,i=!0){return(t?Oh:_d)(n,e,i)}function Oh(n,e,t){if(e==n.length)return e;e&&gh(n.charCodeAt(e))&&yh(n.charCodeAt(e-1))&&e--;let i=Ts(n,e);for(e+=ha(i);e=0&&aa(Ts(n,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function _d(n,e,t){for(;e>1;){let i=Oh(n,e-2,t);if(i=56320&&n<57344}function yh(n){return n>=55296&&n<56320}function ha(n){return n<65536?1:2}class re{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Bi(this,e,t);let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),kt.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Bi(this,e,t);let i=[];return this.decompose(e,t,i,0),kt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new pn(this),s=new pn(e);for(let o=t,l=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(l+=r.value.length,r.done||l>=i)return!0}}iter(e=1){return new pn(this,e)}iterRange(e,t=this.length){return new Ah(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?re.empty:e.length<=32?new ve(e):kt.from(ve.split(e,[]))}}class ve extends re{constructor(e,t=Jd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.text[s],l=r+o.length;if((t?i:l)>=e)return new ep(r,l,i,o);r=l+1,i++}}decompose(e,t,i,r){let s=e<=0&&t>=this.length?this:new ve(ua(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=i.pop(),l=Or(s.text,o.text.slice(),0,s.length);if(l.length<=32)i.push(new ve(l,o.length+s.length));else{let a=l.length>>1;i.push(new ve(l.slice(0,a)),new ve(l.slice(a)))}}else i.push(s)}replace(e,t,i){if(!(i instanceof ve))return super.replace(e,t,i);[e,t]=Bi(this,e,t);let r=Or(this.text,Or(i.text,ua(this.text,0,e)),t),s=this.length+i.length-(t-e);return r.length<=32?new ve(r,s):kt.from(ve.split(r,[]),s)}sliceString(e,t=this.length,i=` -`){[e,t]=Bi(this,e,t);let r="";for(let s=0,o=0;s<=t&&oe&&o&&(r+=i),es&&(r+=l.slice(Math.max(0,e-s),t-s)),s=a+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let s of e)i.push(s),r+=s.length+1,i.length==32&&(t.push(new ve(i,r)),i=[],r=-1);return r>-1&&t.push(new ve(i,r)),t}}class kt extends re{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.children[s],l=r+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,r);r=l+1,i=a+1}}decompose(e,t,i,r){for(let s=0,o=0;o<=t&&s=o){let c=r&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!c?i.push(l):l.decompose(e-o,t-o,i,c)}o=a+1}}replace(e,t,i){if([e,t]=Bi(this,e,t),i.lines=s&&t<=l){let a=o.replace(e-s,t-s,i),c=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>c>>6){let h=this.children.slice();return h[r]=a,new kt(h,this.length-(t-e)+i.length)}return super.replace(s,l,a)}s=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=Bi(this,e,t);let r="";for(let s=0,o=0;se&&s&&(r+=i),eo&&(r+=l.sliceString(e-o,t-o,i)),o=a+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof kt))return 0;let i=0,[r,s,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==l)return i;let a=this.children[r],c=e.children[s];if(a!=c)return i+a.scanIdentical(c,t);i+=a.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new ve(d,t)}let r=Math.max(32,i>>5),s=r<<1,o=r>>1,l=[],a=0,c=-1,h=[];function u(d){let p;if(d.lines>s&&d instanceof kt)for(let m of d.children)u(m);else d.lines>o&&(a>o||!a)?(f(),l.push(d)):d instanceof ve&&a&&(p=h[h.length-1])instanceof ve&&d.lines+p.lines<=32?(a+=d.lines,c+=d.length+1,h[h.length-1]=new ve(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>r&&f(),a+=d.lines,c+=d.length+1,h.push(d))}function f(){a!=0&&(l.push(h.length==1?h[0]:kt.from(h,c)),c=-1,a=h.length=0)}for(let d of e)u(d);return f(),l.length==1?l[0]:new kt(l,t)}}re.empty=new ve([""],0);function Jd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Or(n,e,t=0,i=1e9){for(let r=0,s=0,o=!0;s=t&&(a>i&&(l=l.slice(0,i-r)),r0?1:(e instanceof ve?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],s=this.offsets[i],o=s>>1,l=r instanceof ve?r.text.length:r.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(r instanceof ve){let a=r.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=r.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof ve?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Ah{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new pn(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class bh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(re.prototype[Symbol.iterator]=function(){return this.iter()},pn.prototype[Symbol.iterator]=Ah.prototype[Symbol.iterator]=bh.prototype[Symbol.iterator]=function(){return this});class ep{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}}function Bi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Ze(n,e,t=!0,i=!0){return Hd(n,e,t,i)}function tp(n){return n>=56320&&n<57344}function ip(n){return n>=55296&&n<56320}function Ne(n,e){let t=n.charCodeAt(e);if(!ip(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return tp(i)?(t-55296<<10)+(i-56320)+65536:t}function fl(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Qt(n){return n<65536?1:2}const mo=/\r\n?|\n/;var De=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(De||(De={}));class Zt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=l}else{if(i!=De.Simple&&c>=e&&(i==De.TrackDel&&re||i==De.TrackBefore&&re))return null;if(c>e||c==e&&t<0&&!l)return e==r||t<0?s:s+a;s+=a}r=c}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let i=0,r=0;i=0&&r<=t&&l>=e)return rt?"cover":!0;r=l}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new Zt(e)}static create(e){return new Zt(e)}}class $e extends Zt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Oo(this,(t,i,r,s,o)=>e=e.replace(r,r+(i-t),o),!1),e}mapDesc(e,t=!1){return go(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,s=0;r=0){t[r]=l,t[r+1]=o;let a=r>>1;for(;i.length0&&Gt(i,t,s.text),s.forward(h),l+=h}let c=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let r=[],s=[],o=0,l=null;function a(h=!1){if(!h&&!r.length)return;of||u<0||f>t)throw new RangeError(`Invalid change range ${u} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?re.of(d.split(i||mo)):d:re.empty,m=p.length;if(u==f&&m==0)return;uo&&Le(r,u-o,-1),Le(r,f-u,m),Gt(s,r,p),o=f}}return c(e),a(!l),l}static empty(e){return new $e(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let r=0;rl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;i.length=0&&t<=0&&t==n[r+1]?n[r]+=e:r>=0&&e==0&&n[r]==0?n[r+1]+=t:i?(n[r]+=e,n[r+1]+=t):n.push(e,t)}function Gt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(r,c,s,h,u),r=c,s=h}}}function go(n,e,t,i=!1){let r=[],s=i?[]:null,o=new Sn(n),l=new Sn(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let c=Math.min(o.len,l.len);Le(r,c,-1),o.forward(c),l.forward(c)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let c=0,h=o.len;for(;h;)if(l.ins==-1){let u=Math.min(h,l.len);c+=u,h-=u,l.forward(u)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>c),s.forward2(a),o.forward(a)}}}}class Sn{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?re.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?re.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Yt{constructor(e,t,i,r){this.from=e,this.to=t,this.flags=i,this.goalColumn=r}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new Yt(i,r,this.flags,this.goalColumn)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return A.range(e,t,void 0,void 0,i);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return A.range(this.anchor,r,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return A.range(e.anchor,e.head)}static create(e,t,i,r){return new Yt(e,t,i,r)}}class A{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:A.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new A(e.ranges.map(t=>Yt.fromJSON(t)),e.main)}static single(e,t=e){return new A([A.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,r=0;rr.from-s.from),t=e.indexOf(i);for(let r=1;rs.head?A.range(a,l):A.range(l,a))}}return new A(e,t)}}function xh(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let dl=0;class K{constructor(e,t,i,r,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=dl++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new K(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:pl),!!e.static,e.enables)}of(e){return new gr([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new gr(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new gr(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function pl(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class gr{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=dl++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,l=this.type==2,a=!1,c=!1,h=[];for(let u of this.dependencies)u=="doc"?a=!0:u=="selection"?c=!0:(((t=e[u.id])!==null&&t!==void 0?t:1)&1)==0&&h.push(e[u.id]);return{create(u){return u.values[o]=i(u),1},update(u,f){if(a&&f.docChanged||c&&(f.docChanged||f.selection)||yo(u,h)){let d=i(u);if(l?!fa(d,u.values[o],r):!r(d,u.values[o]))return u.values[o]=d,1}return 0},reconfigure:(u,f)=>{let d,p=f.config.address[s];if(p!=null){let m=Cr(f,p);if(this.dependencies.every(O=>O instanceof K?f.facet(O)===u.facet(O):O instanceof Te?f.field(O,!1)==u.field(O,!1):!0)||(l?fa(d=i(u),m,r):r(d=i(u),m)))return u.values[o]=m,0}else d=i(u);return u.values[o]=d,1}}}get extension(){return this}}function fa(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),r=t.map(a=>a.type),s=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let c=[];for(let h=0;hi===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(jn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let s=i.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(i.values[t]=o,1)},reconfigure:(i,r)=>{let s=i.facet(jn),o=r.facet(jn),l;return(l=s.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,jn.of({field:this,create:e})]}get extension(){return this}}const fi={lowest:4,low:3,default:2,high:1,highest:0};function rn(n){return e=>new wh(e,n)}const si={highest:rn(fi.highest),high:rn(fi.high),default:rn(fi.default),low:rn(fi.low),lowest:rn(fi.lowest)};class wh{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Hi{of(e){return new Ao(this,e)}reconfigure(e){return Hi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Ao{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class Pr{constructor(e,t,i,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let r=[],s=Object.create(null),o=new Map;for(let f of rp(e,t,o))f instanceof Te?r.push(f):(s[f.facet.id]||(s[f.facet.id]=[])).push(f);let l=Object.create(null),a=[],c=[];for(let f of r)l[f.id]=c.length<<1,c.push(d=>f.slot(d));let h=i?.config.facets;for(let f in s){let d=s[f],p=d[0].facet,m=h&&h[f]||[];if(d.every(O=>O.type==0))if(l[p.id]=a.length<<1|1,pl(m,d))a.push(i.facet(p));else{let O=p.combine(d.map(y=>y.value));a.push(i&&p.compare(O,i.facet(p))?i.facet(p):O)}else{for(let O of d)O.type==0?(l[O.id]=a.length<<1|1,a.push(O.value)):(l[O.id]=c.length<<1,c.push(y=>O.dynamicSlot(y)));l[p.id]=c.length<<1,c.push(O=>np(O,p,d))}}let u=c.map(f=>f(l));return new Pr(e,o,u,l,a,s)}}function rp(n,e,t){let i=[[],[],[],[],[]],r=new Map;function s(o,l){let a=r.get(o);if(a!=null){if(a<=l)return;let c=i[a].indexOf(o);c>-1&&i[a].splice(c,1),o instanceof Ao&&t.delete(o.compartment)}if(r.set(o,l),Array.isArray(o))for(let c of o)s(c,l);else if(o instanceof Ao){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let c=e.get(o.compartment)||o.inner;t.set(o.compartment,c),s(c,l)}else if(o instanceof wh)s(o.inner,o.prec);else if(o instanceof Te)i[l].push(o),o.provides&&s(o.provides,l);else if(o instanceof gr)i[l].push(o),o.facet.extensions&&s(o.facet.extensions,fi.default);else{let c=o.extension;if(!c)throw new Error(`Unrecognized extension value in extension set (${o}).`);if(c==o)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(c,l)}}return s(n,fi.default),i.reduce((o,l)=>o.concat(l))}function mn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let r=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|r}function Cr(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const vh=K.define(),bo=K.define({combine:n=>n.some(e=>e),static:!0}),kh=K.define({combine:n=>n.length?n[0]:void 0,static:!0}),Qh=K.define(),Ph=K.define(),Ch=K.define(),Th=K.define({combine:n=>n.length?n[0]:!1});class zt{constructor(e,t){this.type=e,this.value=t}static define(){return new sp}}class sp{of(e){return new zt(this,e)}}class op{constructor(e){this.map=e}of(e){return new W(this,e)}}class W{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new W(this.type,t)}is(e){return this.type==e}static define(e={}){return new op(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let s=r.map(t);s&&i.push(s)}return i}}W.reconfigure=W.define();W.appendConfig=W.define();class Pe{constructor(e,t,i,r,s,o){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,i&&xh(i,t.newLength),s.some(l=>l.type==Pe.time)||(this.annotations=s.concat(Pe.time.of(Date.now())))}static create(e,t,i,r,s,o){return new Pe(e,t,i,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Pe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Pe.time=zt.define();Pe.userEvent=zt.define();Pe.addToHistory=zt.define();Pe.remote=zt.define();function lp(n,e){let t=[];for(let i=0,r=0;;){let s,o;if(i=n[i]))s=n[i++],o=n[i++];else if(r=0;r--){let s=i[r](n);s instanceof Pe?n=s:Array.isArray(s)&&s.length==1&&s[0]instanceof Pe?n=s[0]:n=Rh(e,Zi(s),!1)}return n}function cp(n){let e=n.startState,t=e.facet(Ch),i=n;for(let r=t.length-1;r>=0;r--){let s=t[r](n);s&&Object.keys(s).length&&(i=$h(i,So(e,s,n.changes.newLength),!0))}return i==n?n:Pe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const hp=[];function Zi(n){return n==null?hp:Array.isArray(n)?n:[n]}var ye=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(ye||(ye={}));const up=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let xo;try{xo=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function fp(n){if(xo)return xo.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||up.test(t)))return!0}return!1}function dp(n){return e=>{if(!/\S/.test(e))return ye.Space;if(fp(e))return ye.Word;for(let t=0;t-1)return ye.Word;return ye.Other}}class _{constructor(e,t,i,r,s,o){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let l=0;lr.set(c,a)),t=null),r.set(l.value.compartment,l.value.extension)):l.is(W.reconfigure)?(t=null,i=l.value):l.is(W.appendConfig)&&(t=null,i=Zi(i).concat(l.value));let s;t?s=e.startState.values.slice():(t=Pr.resolve(i,r,this),s=new _(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,c)=>c.reconfigure(a,this),null).values);let o=e.startState.facet(bo)?e.newSelection:e.newSelection.asSingle();new _(t,e.newDoc,o,s,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:A.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),s=[i.range],o=Zi(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return _.create({doc:e.doc,selection:A.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Pr.resolve(e.extensions||[],new Map),i=e.doc instanceof re?e.doc:re.of((e.doc||"").split(t.staticFacet(_.lineSeparator)||mo)),r=e.selection?e.selection instanceof A?e.selection:A.single(e.selection.anchor,e.selection.head):A.single(0);return xh(r,i.length),t.staticFacet(bo)||(r=r.asSingle()),new _(t,i,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(_.tabSize)}get lineBreak(){return this.facet(_.lineSeparator)||` -`}get readOnly(){return this.facet(Th)}phrase(e,...t){for(let i of this.facet(_.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?i:t[s-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let s of this.facet(vh))for(let o of s(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return dp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=Ze(t,o,!1);if(s(t.slice(a,o))!=ye.Word)break;o=a}for(;ln.length?n[0]:4});_.lineSeparator=kh;_.readOnly=Th;_.phrases=K.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(r=>n[r]==e[r])}});_.languageData=vh;_.changeFilter=Qh;_.transactionFilter=Ph;_.transactionExtender=Ch;Hi.reconfigure=W.define();function yt(n,e,t={}){let i={};for(let r of n)for(let s of Object.keys(r)){let o=r[s],l=i[s];if(l===void 0)i[s]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,s))i[s]=t[s](l,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}class Jt{eq(e){return this==e}range(e,t=e){return wo.create(e,t,this)}}Jt.prototype.startSide=Jt.prototype.endSide=0;Jt.prototype.point=!1;Jt.prototype.mapMode=De.TrackDel;function ml(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let wo=class Kh{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Kh(e,t,i)}};function vo(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Ol{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let s=i?this.to:this.from;for(let o=r,l=s.length;;){if(o==l)return o;let a=o+l>>1,c=s[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return c>=0?o:l;c>=0?l=a:o=a+1}}between(e,t,i,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,s);sd||f==d&&c.startSide>0&&c.endSide<=0)continue;(d-f||c.endSide-c.startSide)<0||(o<0&&(o=f),c.point&&(l=Math.max(l,d-f)),i.push(c),r.push(f-o),s.push(d-o))}return{mapped:i.length?new Ol(r,s,i,l):null,pos:o}}}class N{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new N(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(vo)),this.isEmpty)return t.length?N.of(t):this;let l=new Zh(this,null,-1).goto(0),a=0,c=[],h=new Bt;for(;l.value||a=0){let u=t[a++];h.addInner(u.from,u.to,u.value)||c.push(u)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||sl.to||s=s&&e<=s+o.length&&o.between(s,e-s,t-s,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return xn.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return xn.from(e).goto(t)}static compare(e,t,i,r,s=-1){let o=e.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=s),l=t.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=s),a=da(o,l,i),c=new sn(o,a,s),h=new sn(l,a,s);i.iterGaps((u,f,d)=>pa(c,u,h,f,d,r)),i.empty&&i.length==0&&pa(c,0,h,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=999999999);let s=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let l=da(s,o),a=new sn(s,l,0).goto(i),c=new sn(o,l,0).goto(i);for(;;){if(a.to!=c.to||!ko(a.active,c.active)||a.point&&(!c.point||!ml(a.point,c.point)))return!1;if(a.to>r)return!0;a.next(),c.next()}}static spans(e,t,i,r,s=-1){let o=new sn(e,null,s).goto(t),l=t,a=o.openStart;for(;;){let c=Math.min(o.to,i);if(o.point){let h=o.activeForPoint(o.to),u=o.pointFroml&&(r.span(l,c,o.active,a),a=o.openEnd(c));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Bt;for(let r of e instanceof wo?[e]:t?pp(e):e)i.add(r.from,r.to,r.value);return i.finish()}static join(e){if(!e.length)return N.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let r=e[i];r!=N.empty;r=r.nextLayer)t=new N(r.chunkPos,r.chunk,t,Math.max(r.maxPoint,t.maxPoint));return t}}N.empty=new N([],[],null,-1);function pp(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(vo);e=i}return n}N.empty.nextLayer=N.empty;class Bt{finishChunk(e){this.chunks.push(new Ol(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Bt)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(N.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=N.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function da(n,e,t){let i=new Map;for(let s of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&r.push(new Zh(o,t,i,s));return r.length==1?r[0]:new xn(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)$s(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)$s(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),$s(this.heap,0)}}}function $s(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let r=n[i];if(i+1=0&&(r=n[i+1],i++),t.compare(r)<0)break;n[i]=t,n[e]=r,e=i}}class sn{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=xn.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Vn(this.active,e),Vn(this.activeTo,e),Vn(this.activeRank,e),this.minActive=ma(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:s}=this.cursor;for(;t0;)t++;Yn(this.active,t,i),Yn(this.activeTo,t,r),Yn(this.activeRank,t,s),e&&Yn(e,t,this.cursor.from),this.minActive=ma(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&Vn(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[r]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function pa(n,e,t,i,r,s){n.goto(e),t.goto(i);let o=i+r,l=i,a=i-e,c=!!s.boundChange;for(let h=!1;;){let u=n.to+a-t.to,f=u||n.endSide-t.endSide,d=f<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&ml(n.point,t.point)&&ko(n.activeForPoint(n.to),t.activeForPoint(t.to))||s.comparePoint(l,p,n.point,t.point),h=!1):(h&&s.boundChange(l),p>l&&!ko(n.active,t.active)&&s.compareRange(l,p,n.active,t.active),c&&po)break;l=d,f<=0&&n.next(),f>=0&&t.next()}}function ko(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function ma(n,e){let t=-1,i=1e9;for(let r=0;r=e)return r;if(r==n.length)break;s+=n.charCodeAt(r)==9?t-s%t:1,r=Ze(n,r)}return i===!0?-1:n.length}const Po="ͼ",Oa=typeof Symbol>"u"?"__"+Po:Symbol.for(Po),Co=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),ga=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class ei{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,l,a,c){let h=[],u=/^@(\w+)\b/.exec(o[0]),f=u&&u[1]=="keyframes";if(u&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map(O=>m.replace(/&/,O))).reduce((m,O)=>m.concat(O)),p,a);else if(p&&typeof p=="object"){if(!u)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&a.push((i&&!u&&!c?o.map(i):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=ga[Oa]||1;return ga[Oa]=e+1,Po+e.toString(36)}static mount(e,t,i){let r=e[Co],s=i&&i.nonce;r?s&&r.setNonce(s):r=new mp(e,s),r.mount(Array.isArray(t)?t:[t],e)}}let ya=new Map;class mp{constructor(e,t){let i=e.ownerDocument||e,r=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let s=ya.get(i);if(s)return e[Co]=s;this.sheet=new r.CSSStyleSheet,ya.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Co]=this}mount(e,t){let i=this.sheet,r=0,s=0;for(let o=0;o-1&&(this.modules.splice(a,1),s--,a=-1),a==-1){if(this.modules.splice(s++,0,l),i)for(let c=0;c",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},Aa=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),Op=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),gp=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),ba=typeof navigator<"u"&&/Mac/.test(navigator.platform),yp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Ap=Aa&&(ba||+Aa[1]<57)||gp&&ba;for(var Fe=0;Fe<10;Fe++)ti[48+Fe]=ti[96+Fe]=String(Fe);for(var Fe=1;Fe<=24;Fe++)ti[Fe+111]="F"+Fe;for(var Fe=65;Fe<=90;Fe++)ti[Fe]=String.fromCharCode(Fe+32),wn[Fe]=String.fromCharCode(Fe);for(var Rs in ti)wn.hasOwnProperty(Rs)||(wn[Rs]=ti[Rs]);function bp(n){var e=Ap&&(n.ctrlKey||n.altKey||n.metaKey)||(Op||yp)&&n.shiftKey&&n.key&&n.key.length==1,t=!e&&n.key||(n.shiftKey?wn:ti)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function he(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var r=t[i];typeof r=="string"?n.setAttribute(i,r):r!=null&&(n[i]=r)}e++}for(;e2);var $={mac:wa||/Mac/.test(ze.platform),windows:/Win/.test(ze.platform),linux:/Linux|X11/.test(ze.platform),ie:hs,ie_version:Eh?To.documentMode||6:Ro?+Ro[1]:$o?+$o[1]:0,gecko:Sa,gecko_version:Sa?+(/Firefox\/(\d+)/.exec(ze.userAgent)||[0,0])[1]:0,chrome:!!Ks,chrome_version:Ks?+Ks[1]:0,ios:wa,android:/Android\b/.test(ze.userAgent),webkit:xa,webkit_version:xa?+(/\bAppleWebKit\/(\d+)/.exec(ze.userAgent)||[0,0])[1]:0,safari:Ko,safari_version:Ko?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ze.userAgent)||[0,0])[1]:0,tabSize:To.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function gl(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const Tr=Object.create(null);function yl(n,e,t){if(n==e)return!0;n||(n=Tr),e||(e=Tr);let i=Object.keys(n),r=Object.keys(e);if(i.length-0!=r.length-0)return!1;for(let s of i)if(s!=t&&(r.indexOf(s)==-1||n[s]!==e[s]))return!1;return!0}function Sp(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function va(n,e,t){let i=!1;if(e)for(let r in e)t&&r in t||(i=!0,r=="style"?n.style.cssText="":n.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(i=!0,r=="style"?n.style.cssText=t[r]:n.setAttribute(r,t[r]));return i}function xp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Ai(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:s,end:o}=Uh(e,t);i=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new Ai(e,i,r,t,e.widget||null,!0)}static line(e){return new Fn(e)}static set(e,t=!1){return N.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}B.none=N.empty;class Un extends B{constructor(e){let{start:t,end:i}=Uh(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?gl(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Tr}eq(e){return this==e||e instanceof Un&&this.tagName==e.tagName&&yl(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Un.prototype.point=!1;class Fn extends B{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Fn&&this.spec.class==e.spec.class&&yl(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Fn.prototype.mapMode=De.TrackBefore;Fn.prototype.point=!0;class Ai extends B{constructor(e,t,i,r,s,o){super(t,i,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?De.TrackBefore:De.TrackAfter:De.TrackDel}get type(){return this.startSide!=this.endSide?Xe.WidgetRange:this.startSide<=0?Xe.WidgetBefore:Xe.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Ai&&wp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Ai.prototype.point=!0;function Uh(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function wp(n,e){return n==e||!!(n&&e&&n.compare(e))}function Mi(n,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=n?t[r]=Math.max(t[r],e):t.push(n,e)}class vn extends Jt{constructor(e,t,i){super(),this.tagName=e,this.attributes=t,this.rank=i}eq(e){return e==this||e instanceof vn&&this.tagName==e.tagName&&yl(this.attributes,e.attributes)}static create(e){return new vn(e.tagName,e.attributes||Tr,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return N.of(e,t)}}vn.prototype.startSide=vn.prototype.endSide=-1;function kn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Zo(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function On(n,e){if(!e.anchorNode)return!1;try{return Zo(n,e.anchorNode)}catch{return!1}}function yr(n){return n.nodeType==3?Qn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function gn(n,e,t,i){return t?ka(n,e,t,i,-1)||ka(n,e,t,i,1):!1}function ii(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function $r(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function ka(n,e,t,i,r){for(;;){if(n==t&&e==i)return!0;if(e==(r<0?0:qt(n))){if(n.nodeName=="DIV")return!1;let s=n.parentNode;if(!s||s.nodeType!=1)return!1;e=ii(n)+(r<0?0:1),n=s}else if(n.nodeType==1){if(n=n.childNodes[e+(r<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=r<0?qt(n):0}else return!1}}function qt(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Rr(n,e){let{left:t,right:i}=n;if(t==i)return n;let r=e?t:i;return{left:r,right:r,top:n.top,bottom:n.bottom}}function vp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function Fh(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function kp(n,e,t,i,r,s,o,l){let a=n.ownerDocument,c=a.defaultView||window;for(let h=n,u=!1;h&&!u;)if(h.nodeType==1){let f,d=h==a.body,p=1,m=1;if(d)f=vp(c);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(u=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let b=h.getBoundingClientRect();({scaleX:p,scaleY:m}=Fh(h,b)),f={left:b.left,right:b.left+h.clientWidth*p,top:b.top,bottom:b.top+h.clientHeight*m}}let O=0,y=0;if(r=="nearest")e.top0&&e.bottom>f.bottom+y&&(y=e.bottom-f.bottom+o)):e.bottom>f.bottom-o&&(y=e.bottom-f.bottom+o,t<0&&e.top-y0&&e.right>f.right+O&&(O=e.right-f.right+s)):e.right>f.right-s&&(O=e.right-f.right+s,t<0&&e.leftf.bottom||e.leftf.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),h=h.assignedSlot||h.parentNode}else if(h.nodeType==11)h=h.host;else break}function Dh(n,e=!0){let t=n.ownerDocument,i=null,r=null;for(let s=n.parentNode;s&&!(s==t.body||(!e||i)&&r);)if(s.nodeType==1)!r&&s.scrollHeight>s.clientHeight&&(r=s),e&&!i&&s.scrollWidth>s.clientWidth&&(i=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:i,y:r}}class Qp{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?qt(t):0),i,Math.min(e.focusOffset,i?qt(i):0))}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}}function Xh(n){let e=[];for(let t=n;t;t=t.nodeType==11?t.host:t.parentNode)t.nodeType==1&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function Lh(n,e=!0){for(let{node:t,left:i,top:r}of n)e&&t.scrollTop!=r&&(t.scrollTop=r),t.scrollLeft!=i&&(t.scrollLeft=i)}let ui=null;$.safari&&$.safari_version>=26&&(ui=!1);function Bh(n){if(n.setActive)return n.setActive();if(ui)return n.focus(ui);let e=Xh(n);n.focus(ui==null?{get preventScroll(){return ui={preventScroll:!0},!0}}:void 0),ui||(ui=!1,Lh(e))}let Qa;function Qn(n,e,t=e){let i=Qa||(Qa=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function Ei(n,e,t,i){let r={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:r.altKey,ctrlKey:r.ctrlKey,shiftKey:r.shiftKey,metaKey:r.metaKey}=i);let s=new KeyboardEvent("keydown",r);s.synthetic=!0,n.dispatchEvent(s);let o=new KeyboardEvent("keyup",r);return o.synthetic=!0,n.dispatchEvent(o),s.defaultPrevented||o.defaultPrevented}function Pp(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function Cp(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,qt(t));;)if(i){if(t.nodeType!=1)return!1;let r=t.childNodes[i-1];r.contentEditable=="false"?i--:(t=r,i=qt(t))}else{if(t==n)return!0;i=ii(t),t=t.parentNode}}function qh(n){return n instanceof Window?n.pageYOffset>Math.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function Ih(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=qt(t)}else if(t.parentNode&&!$r(t))i=ii(t),t=t.parentNode;else return null}}function zh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(s<0||(r!=0?r<0?l.fromt:e[s].level>l.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}}function Vh(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(St[m+1]==-d){let O=St[m+2],y=O&2?r:O&4?O&1?s:r:0;y&&(ue[u]=ue[St[m]]=y),l=m;break}}else{if(St.length==189)break;St[l++]=u,St[l++]=f,St[l++]=a}else if((p=ue[u])==2||p==1){let m=p==r;a=m?0:1;for(let O=l-3;O>=0;O-=3){let y=St[O+2];if(y&2)break;if(m)St[O+2]|=2;else{if(y&4)break;St[O+2]|=4}}}}}function Mp(n,e,t,i){for(let r=0,s=i;r<=t.length;r++){let o=r?t[r-1].to:n,l=ra;)p==O&&(p=t[--m].from,O=m?t[m-1].to:n),ue[--p]=d;a=h}else s=c,a++}}}function Eo(n,e,t,i,r,s,o){let l=i%2?2:1;if(i%2==r%2)for(let a=e,c=0;aa&&o.push(new Ct(a,m.from,d));let O=m.direction==bi!=!(d%2);Uo(n,O?i+1:i,r,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(h?ue[p]!=l:ue[p]==l))break;p++}f?Eo(n,a,p,i+1,r,f,o):ae;){let h=!0,u=!1;if(!c||a>s[c-1].to){let m=ue[a-1];m!=l&&(h=!1,u=m==16)}let f=!h&&l==1?[]:null,d=h?i:i+1,p=a;e:for(;;)if(c&&p==s[c-1].to){if(u)break e;let m=s[--c];if(!h)for(let O=m.from,y=c;;){if(O==e)break e;if(y&&s[y-1].to==O)O=s[--y].from;else{if(ue[O-1]==l)break e;break}}if(f)f.push(m);else{m.toue.length;)ue[ue.length]=256;let i=[],r=e==bi?0:1;return Uo(n,r,r,t,0,n.length,i),i}function Yh(n){return[new Ct(0,n,0)]}let Nh="";function Up(n,e,t,i,r){var s;let o=i.head-n.from,l=Ct.find(e,o,(s=i.bidiLevel)!==null&&s!==void 0?s:-1,i.assoc),a=e[l],c=a.side(r,t);if(o==c){let f=l+=r?1:-1;if(f<0||f>=e.length)return null;a=e[l=f],o=a.side(!r,t),c=a.side(r,t)}let h=Ze(n.text,o,a.forward(r,t));(ha.to)&&(h=c),Nh=n.text.slice(Math.min(o,h),Math.max(o,h));let u=l==(r?e.length-1:0)?null:e[l+(r?1:-1)];return u&&h==c&&u.level+(r?0:1)n.some(e=>e)}),nu=K.define({combine:n=>n.some(e=>e)}),ru=K.define();class Ui{constructor(e,t,i,r,s,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=s,this.isSnapshot=o}map(e){return e.empty?this:new Ui(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Ui(A.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Nn=W.define({map:(n,e)=>n.map(e)}),su=W.define();function We(n,e,t){let i=n.facet(Jh);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const Dt=K.define({combine:n=>n.length?n[0]:!0});let Dp=0;const Ti=K.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(us.of(c=>{let h=c.plugin(l);return h?o(h):B.none})),s&&a.push(s(l)),a})}static fromClass(e,t){return xe.define((i,r)=>new e(i,r),t)}}class Zs{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(We(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){We(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){We(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const ou=K.define(),xl=K.define(),us=K.define(),lu=K.define(),wl=K.define(),Dn=K.define(),au=K.define();function Pa(n,e){let t=n.state.facet(au);if(!t.length)return t;let i=t.map(s=>s instanceof Function?s(n):s),r=[];return N.spans(i,e.from,e.to,{point(){},span(s,o,l,a){let c=s-e.from,h=o-e.from,u=r;for(let f=l.length-1;f>=0;f--,a--){let d=l[f].spec.bidiIsolate,p;if(d==null&&(d=Fp(e.text,c,h)),a>0&&u.length&&(p=u[u.length-1]).to==c&&p.direction==d)p.to=h,u=p.inner;else{let m={from:c,to:h,direction:d,inner:[]};u.push(m),u=m.inner}}}}),r}const cu=K.define();function vl(n){let e=0,t=0,i=0,r=0;for(let s of n.state.facet(cu)){let o=s(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(r=Math.max(r,o.bottom)))}return{left:e,right:t,top:i,bottom:r}}const hn=K.define();class ct{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new ct(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toAr.push(new ct(s,o,l,a))),this.changedRanges=r}static create(e,t,i){return new Kr(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const Xp=[];class Se{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Xp}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Sp(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let r of this.children){if(r==e)return i;i+=r.length+r.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,i){return null}domPosFor(e,t){let i=ii(this.dom),r=this.length?e>0:t>0;return new pt(this.parent.dom,i+(r?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof ds)return e;return null}static get(e){return e.cmTile}}class fs extends Se{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,r,s=e?.node==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,r=i?i.nextSibling:t.firstChild,s&&r!=l.dom&&(s.written=!0),l.dom.parentNode==t)for(;r&&r!=l.dom;)r=Ca(r);else t.insertBefore(l.dom,r);i=l.dom}for(r=i?i.nextSibling:t.firstChild,s&&r&&(s.written=!0);r;)r=Ca(r);this.length=o}}function Ca(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class ds extends fs{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Se.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,r=0,s=0;;)if(r==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&s++,r=t.pop()}else{let o=i.children[r++];if(o instanceof Xt)t.push(r),i=o,r=0;else{let l=s+o.length,a=e(o,s);if(a!==void 0)return a;s=l+o.breakAfter}}}resolveBlock(e,t){let i,r=-1,s,o=-1;if(this.blockTiles((l,a)=>{let c=a+l.length;if(e>=a&&e<=c){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!s||!l.isWidget()&&s.isWidget())&&(s=l,o=e-a)}}),!i&&!s)throw new Error("No tile at position "+e);return i&&t<0||!s?{tile:i,offset:r}:{tile:s,offset:o}}}class Xt extends fs{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new Xt(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class qi extends fs{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let r=new qi(t||document.createElement("div"),e);return(!t||!i)&&(r.flags|=4),r}get domAttrs(){return this.attrs}resolveInline(e,t,i){let r=null,s=-1,o=null,l=-1;function a(h,u){for(let f=0,d=0;f=u&&(p.isComposite()?a(p,u-d):(!o||o.isHidden&&(t>0&&!(o.flags&32)||i&&Bp(o,p)))&&(m>u||p.flags&32&&t<=1)?(o=p,l=u-d):(d=-1)&&(r=p,s=u-d)),d=m}}a(this,e);let c=(t<0?r:o)||r||o;return c?{tile:c,offset:c==r?s:l}:null}coordsIn(e,t,i){let r=this.resolveInline(e,t,!0);return r?r.tile.coordsIn(Math.max(0,r.offset),t,i):Lp(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:r,offset:s}=i;if(this.dom.contains(r.dom))return r.isText()?new pt(r.dom,Math.min(r.dom.nodeValue.length,s)):r.domPosFor(s,r.flags&16?1:r.flags&32?-1:t);let o=i.tile.parent,l=!1;for(let a of o.children){if(l)return new pt(a.dom,0);a==i.tile&&(l=!0)}}return new pt(this.dom,0)}}function Lp(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=yr(e);return t[t.length-1]||null}function Bp(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.topr&&(e=r);let s=e,o=e,l=0;e==0&&t<0||e==r&&t>=0?$.chrome||$.gecko||(e?(s--,l=1):o=0)?0:a.length-1];return $.safari&&!l&&c.width==0&&(c=Array.prototype.find.call(a,h=>h.width)||c),i==null?c:Rr(c,(l?l>0:t<0)==i)}static of(e,t){let i=new pi(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class Si extends Se{constructor(e,t,i,r){super(e,t,r),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;if(i)return Rr(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),o=null;if(!s.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?s.length-1:0;o=s[a],!(e>0?a==0:a==s.length-1||o.top0==i)}}class qp{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:r,index:s,beforeBreak:o,parents:l}=this;for(;e||t>0;)if(r.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(s==r.children.length){if(!e&&!l.length)break;i&&i.leave(r),o=!!r.breakAfter,{tile:r,index:s}=l.pop(),s++}else{let a=r.children[s],c=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],c=r.lastChild;if(c instanceof He&&c.mark.eq(a.mark))c.dom!=a.dom&&c.setDOM(Ms(a.dom)),r=c;else{if(this.cache.reused.get(a)){let u=Se.get(a.dom);u&&u.setDOM(Ms(a.dom))}let h=He.of(a.mark,a.dom);r.append(h),r=h}this.cache.reused.set(a,2)}let s=Se.get(e.text);s&&this.cache.reused.set(s,2);let o=new pi(e.text,e.text.nodeValue);o.flags|=8,this.pos=e.range.toB,r.append(o)}addInlineWidget(e,t,i){let r=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);r||this.flushBuffer();let s=this.ensureMarks(t,i);!r&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=hu);let r=qi.start(e,t||((i=this.cache.find(qi))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=r)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let r=this.curLine;for(let s=e.length-1;s>=0;s--){let o=e[s],l;if(t>0&&(l=r.lastChild)&&l instanceof He&&l.mark.eq(o))r=l,t--;else{let a=He.of(o,(i=this.cache.find(He,c=>c.mark.eq(o)))===null||i===void 0?void 0:i.dom);r.append(a),r=a,t=0}}return r}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Ta(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!($.ios&&Ta(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Es,0,32)||new Si(Es.toDOM(),0,Es,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,i=new Ip(e.from,e.to,e.value,t),r=this.wrappers.length;for(;r>0&&(this.wrappers[r-1].rank-i.rank||this.wrappers[r-1].to-i.to)<0;)r--;this.wrappers.splice(r,0,i)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let r=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Zr,void 0,1);return i&&(i.flags=t),i||new Zr(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class Wp{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:r,lineBreak:s,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=r;let l=this.textOff=Math.min(e,r.length);return s?null:r.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Mr=[Si,qi,pi,He,Zr,Xt,ds];for(let n=0;n[]),this.index=Mr.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let r=e.bucket,s=this.buckets[r],o=this.index[r];for(let l=0;l{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let r=0,s=0,o=0;;){let l=or){let c=a-r;this.preserve(c,!o,!l),r=a,s+=c}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let c=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof He&&r.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?r.length&&(r.length=s=0):o instanceof He&&(r.shift(),s=Math.min(s,r.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,r=this.builder,s=-1,o=N.spans(this.decorations,e,t,{point:(l,a,c,h,u,f)=>{if(c instanceof Ai){if(this.disallowBlockEffectsFor[f]){if(c.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=h.length,u>h.length)r.continueWidget(a-l);else{let d=c.widget||(c.block?Ii.block:Ii.inline),p=Yp(c),m=this.cache.findWidget(d,a-l,p)||Si.of(d,this.view,a-l,p);c.block?(c.startSide>0&&r.addLineStartIfNotCovered(i),r.addBlockWidget(m)):(r.ensureLine(i),r.addInlineWidget(m,h,u))}i=null}else i=Np(i,c);a>l&&this.text.skip(a-l)},span:(l,a,c,h)=>{for(let u=l;u-1&&(this.openWidget=o>s),this.openWidget||r.addLineStartIfNotCovered(i),this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let r=e.parentNode;;r=r.parentNode){let s=Se.get(r);if(r==this.view.contentDOM)break;s instanceof He?t.push(s):s?.isLine()?i=s:s instanceof Xt||(r.nodeName=="DIV"&&!i&&r!=this.view.contentDOM?i=new qi(r,hu):i||t.push(He.of(new Un({tagName:r.nodeName.toLowerCase(),attributes:xp(r)}),r)))}return{line:i,marks:t}}}function Ta(n,e){let t=i=>{for(let r of i.children)if((e?r.isText():r.length)||t(r))return!0;return!1};return t(n)}function Yp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const hu={class:"cm-line"};function Np(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&gl(t,n),i&&(n.class+=" "+i)),n}function Gp(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof He&&e.push(i.mark)}return e}function Ms(n){let e=Se.get(n);return e&&e.setDOM(n.cloneNode()),n}class Ii extends Ut{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}Ii.inline=new Ii("span");Ii.block=new Ii("div");const Es=new class extends Ut{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class $a{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=B.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new ds(e,e.contentDOM),this.updateInner([new ct(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:u})=>uthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let r=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!sm(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let s=r>-1?_p(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){let{from:h,to:u}=this.hasComposition;i=new ct(h,u,e.changes.mapPos(h,-1),e.changes.mapPos(u,1)).addToSet(i.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,($.ie||$.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=tm(o,this.decorations,e.changes);a.length&&(i=ct.extendWithRanges(i,a));let c=nm(l,this.blockWrappers,e.changes);return c.length&&(i=ct.extendWithRanges(i,c)),s&&!i.some(h=>h.fromA<=s.range.fromA&&h.toA>=s.range.toA)&&(i=s.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Vp(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Se.get(t.text)&&l.cache.reused.set(Se.get(t.text),2),this.tile=l.run(e,t),Do(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=$.chrome||$.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||i.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let r=[];if(this.view.viewport.from||this.view.viewport.to-1)&&On(i,this.view.observer.selectionRange)&&!(r&&i.contains(r));if(!(s||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,c,h;if(a.empty?h=c=this.inlineDOMNearPos(a.anchor,a.assoc||1):(h=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),c=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),$.gecko&&a.empty&&!this.hasComposition&&Hp(c)){let f=document.createTextNode("");this.view.observer.ignore(()=>c.node.insertBefore(f,c.node.childNodes[c.offset]||null)),c=h=new pt(f,0),l=!0}let u=this.view.observer.selectionRange;(l||!u.focusNode||(!gn(c.node,c.offset,u.anchorNode,u.anchorOffset)||!gn(h.node,h.offset,u.focusNode,u.focusOffset))&&!this.suppressWidgetCursorChange(u,a))&&(this.view.observer.ignore(()=>{$.android&&$.chrome&&i.contains(u.focusNode)&&rm(u.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=kn(this.view.root);if(f)if(a.empty){if($.gecko){let d=Jp(c.node,c.offset);if(d&&d!=3){let p=(d==1?Ih:zh)(c.node,c.offset);p&&(c=new pt(p.node,p.offset))}}f.collapse(c.node,c.offset),a.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=a.bidiLevel)}else if(f.extend){f.collapse(c.node,c.offset);try{f.extend(h.node,h.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([c,h]=[h,c]),d.setEnd(h.node,h.offset),d.setStart(c.node,c.offset),f.removeAllRanges(),f.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(c,h)),this.impreciseAnchor=c.precise?null:new pt(u.anchorNode,u.anchorOffset),this.impreciseHead=h.precise?null:new pt(u.focusNode,u.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&gn(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=kn(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),c=this.coordsAt(t.head,1);if(!a||!c||a.bottom>c.top)return;let h=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let u=e.observer.selectionRange;e.docView.posFromDOM(u.anchorNode,u.anchorOffset)!=t.from&&i.collapse(r,s)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let r=i.posAtStart;if(i.isComposite()){let s;if(e==i.dom)s=i.dom.childNodes[t];else{let o=qt(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?s=e:s=e.nextSibling}if(s==i.dom.firstChild)return r;for(;s&&!Se.get(s);)s=s.nextSibling;if(!s)return r+i.length;for(let o=0,l=r;;o++){let a=i.children[o];if(a.dom==s)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?r+t:r+(t?i.length:0):r}domAtPos(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(r,t):i.domIn(r,t)}inlineDOMNearPos(e,t){let i,r=-1,s=!1,o,l=-1,a=!1;return this.tile.blockTiles((c,h)=>{if(c.isWidget()){if(c.flags&32&&h>=e)return!0;c.flags&16&&(s=!0)}else{let u=h+c.length;if(h<=e&&(i=c,r=e-h,s=u=e&&!o&&(o=c,l=e-h,a=h>e),h>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(s&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(r,t):o.domIn(l,t))}coordsAt(e,t,i){let{tile:r,offset:s}=this.tile.resolveBlock(e,t);return r.isWidget()?r.widget instanceof Us?null:r.coordsInWidget(s,t,!0):r.coordsIn(s,t,i)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function r(s,o){if(s.isComposite())for(let l of s.children){if(l.length>=o){let a=r(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(s.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==fe.LTR,c=0,h=(u,f,d)=>{for(let p=0;pr);p++){let m=u.children[p],O=f+m.length,y=m.dom.getBoundingClientRect(),{height:b}=y;if(d&&!p&&(c+=y.top-d.top),m instanceof Xt)O>i&&h(m,f,y);else if(f>=i&&(c>0&&t.push(-c),t.push(b+c),c=0,o)){let x=m.dom.lastChild,C=x?yr(x):[];if(C.length){let k=C[C.length-1],S=a?k.right-y.left:y.right-k.left;S>l&&(l=S,this.minWidth=s,this.minWidthFrom=f,this.minWidthTo=O)}}d&&p==u.children.length-1&&(c+=d.bottom-y.bottom),f=O+m.breakAfter}};return h(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?fe.RTL:fe.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let c of o.children){if(!c.isText()||/[^ -~]/.test(c.text))return;let h=yr(c.dom);if(h.length!=1)return;l+=h[0].width,a=h[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,r,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=yr(t.firstChild)[0];i=t.getBoundingClientRect().height,r=o&&o.width?o.width/27:7,s=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:r,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(B.replace({widget:new Us(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!s)break;i=s.to+1}return B.set(e)}updateDeco(){let e=1,t=this.view.state.facet(us).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),i=!1,r=this.view.state.facet(wl).map((s,o)=>{let l=typeof s=="function";return l&&(i=!0),l?s(this.view):s});for(r.length&&(this.dynamicDecorationMap[e++]=i,t.push(N.join(r))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(ru))try{if(c(this.view,e.range,e))return!0}catch(h){We(this.view.state,h,"scroll handler")}let{range:t}=e,i=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),r;if(!i)return;!t.empty&&(r=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,r.left),top:Math.min(i.top,r.top),right:Math.max(i.right,r.right),bottom:Math.max(i.bottom,r.bottom)});let s=vl(this.view),o={left:i.left-s.left,top:i.top-s.top,right:i.right+s.right,bottom:i.bottom+s.bottom},{offsetWidth:l,offsetHeight:a}=this.view.scrollDOM;if(kp(this.view.scrollDOM,o,t.head1&&(i.top>window.visualViewport.offsetTop+window.visualViewport.height||i.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Do(this.tile)}}function Do(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Do(i,e)}}function Hp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function uu(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=Ih(t.focusNode,t.focusOffset),r=zh(t.focusNode,t.focusOffset),s=i||r;if(r&&i&&r.node!=i.node){let l=Se.get(r.node);if(!l||l.isText()&&l.text!=r.node.nodeValue)s=r;else if(n.docView.lastCompositionAfterCursor){let a=Se.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(s=r)}}if(n.docView.lastCompositionAfterCursor=s!=i,!s)return null;let o=e-s.offset;return{from:o,to:o+s.node.nodeValue.length,node:s.node}}function _p(n,e,t){let i=uu(n,t);if(!i)return null;let{node:r,from:s,to:o}=i,l=r.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new ct(a.mapPos(s),a.mapPos(o),s,o),text:r}}function Jp(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class Us extends Ut{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function om(n,e,t=1){let i=n.charCategorizer(e),r=n.doc.lineAt(e),s=e-r.from;if(r.length==0)return A.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,l=s;t<0?o=Ze(r.text,s,!1):l=Ze(r.text,s);let a=i(r.text.slice(o,l));for(;o>0;){let c=Ze(r.text,o,!1);if(i(r.text.slice(c,o))!=a)break;o=c}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((r-t.top-(n.defaultLineHeight-l)*.5)/l);s+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Qo(o,s,n.state.tabSize)}function Xo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let r;for(let s of i.type){if(s.from>e)break;if(!(s.toe)return s;(!r||s.type==Xe.Text&&(r.type!=s.type||(t<0?s.frome)))&&(r=s)}}return r||i}return i}function am(n,e,t,i){let r=Xo(n,e.head,e.assoc||-1),s=!i||r.type!=Xe.Text||!(n.lineWrapping||r.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(r.from),a=n.posAtCoords({x:t==(l==fe.LTR)?o.right-1:o.left+1,y:(s.top+s.bottom)/2});if(a!=null)return A.cursor(a,t?-1:1)}return A.cursor(t?r.to:r.from,t?-1:1)}function Ra(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=n.bidiSpans(r),o=n.textDirectionAt(r.from);for(let l=e,a=null;;){let c=Up(r,s,o,l,t),h=Nh;if(!c){if(r.number==(t?n.state.doc.lines:1))return l;h=` -`,r=n.state.doc.line(r.number+(t?1:-1)),s=n.bidiSpans(r),c=n.visualLineSide(r,!t)}if(a){if(!a(h))return l}else{if(!i)return c;a=i(h)}l=c}}function cm(n,e,t){let i=n.state.charCategorizer(e),r=i(t);return s=>{let o=i(s);return r==ye.Space&&(r=o),r==o}}function hm(n,e,t,i){let r=e.head,s=t?1:-1;if(r==(t?n.state.doc.length:0))return A.cursor(r,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),c=n.coordsAtPos(r,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),h=n.documentTop;if(c)o==null&&(o=c.left-a.left),l=s<0?c.top:c.bottom;else{let p=n.viewState.lineBlockAt(r);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(r-p.from))),l=(s<0?p.top:p.bottom)+h}let u=a.left+o,f=n.viewState.heightOracle.textHeight>>1,d=i??f;for(let p=0;;p+=f){let m=l+(d+p)*s,O=Lo(n,{x:u,y:m},!1,s);if(t?m>a.bottom:ml:b{if(e>s&&er(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:A.cursor(i,in.viewState.docHeight)return new Pt(n.state.doc.length,-1);if(c=n.elementAtHeight(a),i==null)break;if(c.type==Xe.Text){if(i<0?c.ton.viewport.to)break;let f=n.docView.coordsAt(i<0?c.from:c.to,i>0?-1:1);if(f&&(i<0?f.top<=a+s:f.bottom>=a+s))break}let u=n.viewState.heightOracle.textHeight/2;a=i>0?c.bottom+u:c.top-u}if(n.viewport.from>=c.to||n.viewport.to<=c.from){if(t)return null;if(c.type==Xe.Text){let u=lm(n,r,c,o,l);return new Pt(u,u==c.from?1:-1)}}if(c.type!=Xe.Text)return a<(c.top+c.bottom)/2?new Pt(c.from,1):new Pt(c.to,-1);let h=n.docView.lineAt(c.from,2);return(!h||h.length!=c.length)&&(h=n.docView.lineAt(c.from,-2)),new um(n,o,l,n.textDirectionAt(c.from)).scanTile(h,c.from)}class um{constructor(e,t,i,r){this.view=e,this.x=t,this.y=i,this.baseDir=r,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+r.from>1;t:if(o.has(m)){for(let b=1;b=s&&(x-=p),!o.has(x)){m=x;break t}}break e}o.add(m);let O=t(m),y=0;if(O)for(let b=0;b1))if(x.bottomthis.y)(!c||c.top>x.top)&&(c=x),y=-1;else{let C=x.left>this.x?this.x-x.left:x.right(p+p+m)/3)return this.y=a.bottom-1,this.scan(e,t,!0);if(c&&c.top<(p+m+m)/3)return this.y=c.top+1,this.scan(e,t,!0)}let d=(l?this.dirAt(e[h],1):this.baseDir)==fe.LTR;return{i:h,after:this.x>(f.left+f.right)/2==d}}scanText(e,t){let i=[];for(let s=0;s{let o=i[s]-t,l=i[s+1]-t;return Qn(e.dom,o,l).getClientRects()});return r.after?new Pt(i[r.i+1],-1):new Pt(i[r.i],1)}scanTile(e,t){if(!e.length)return new Pt(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:Qn(a.dom,0,a.length)).getClientRects()}),s=e.children[r.i],o=i[r.i];return s.isText()?this.scanText(s,o):s.isComposite()?this.scanTile(s,o):r.after?new Pt(i[r.i+1],-1):new Pt(o,1)}}const ki="￿";class fm{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(_.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ki}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r);let s=this.text.length;this.readNode(r);let o=Se.get(r),l=r.nextSibling;if(l==t){o?.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=Se.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:$r(r))||$r(l)&&(r.nodeName!="BR"||o?.isWidget())&&this.text.length>s)&&!pm(l,t)&&this.lineBreak(),r=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,l;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=r.exec(t))&&(s=l.index,o=l[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=s+o}}readNode(e){let t=Se.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(dm(e,i.node,i.offset)?t:0))}}function dm(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=du(e.docView.tile,t,i,0))){let a=s||o?[]:gm(e),c=new fm(a,e);c.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=c.text,this.newSel=ym(a,this.bounds.from)}else{let a=e.observer.selectionRange,c=s&&s.node==a.focusNode&&s.offset==a.focusOffset||!Zo(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),h=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!Zo(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),u=e.viewport;if(($.ios||$.chrome)&&c!=h&&Math.min(c,h)<=l.main.from&&Math.max(c,h)>=l.main.to&&(u.from>0||u.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(A.range(h,c));else if(e.lineWrapping&&h==c&&!(l.main.empty&&l.main.head==c)&&e.inputState.lastTouchTime>Date.now()-100){let f=e.coordsAtPos(c,-1),d=0;f&&(d=e.inputState.lastTouchY<=f.bottom?-1:1),this.newSel=A.create([A.cursor(c,d)])}else this.newSel=A.single(h,c)}}}function du(n,e,t,i){if(n.isComposite()){let r=-1,s=-1,o=-1,l=-1;for(let a=0,c=i,h=i;at)return du(u,e,t,c);if(f>=e&&r==-1&&(r=a,s=c),c>t&&u.dom.parentNode==n.dom){o=a,l=h;break}h=f,c=f+u.breakAfter}return{from:s,to:l<0?i+n.length:l,startDOM:(r?n.children[r-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function pu(n,e){let t,{newSel:i}=e,{state:r}=n,s=r.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,c=s.from,h=null;(o===8||$.android&&e.text.length=l&&s.to<=a&&(e.typeOver||u!=e.text)&&u.slice(0,s.from-l)==e.text.slice(0,s.from-l)&&u.slice(s.to-l)==e.text.slice(f=e.text.length-(u.length-(s.to-l)))?t={from:s.from,to:s.to,insert:re.of(e.text.slice(s.from-l,f).split(ki))}:(d=mu(u,e.text,c-l,h))&&($.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==ki+ki&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:re.of(e.text.slice(d.from,d.toB).split(ki))})}else i&&(!n.hasFocus&&r.facet(Dt)||Er(i,s))&&(i=null);if(!t&&!i)return!1;if(($.mac||$.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:re.of([t.insert.toString().replace("."," ")])}):r.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:r.toText(n.inputState.insertingText)}:$.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:re.of([" "])}),t)return kl(n,t,i,o);if(i&&!Er(i,s)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=fu(r.facet(Dn).map(c=>c(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function kl(n,e,t,i=-1){if($.ios&&n.inputState.flushIOSKey(e))return!0;let r=n.state.selection.main;if($.android&&(e.to==r.to&&(e.from==r.from||e.from==r.from-1&&n.state.sliceDoc(e.from,r.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Ei(n.contentDOM,"Enter",13)||(e.from==r.from-1&&e.to==r.to&&e.insert.length==0||i==8&&e.insert.lengthr.head)&&Ei(n.contentDOM,"Backspace",8)||e.from==r.from&&e.to==r.to+1&&e.insert.length==0&&Ei(n.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=Om(n,e,t));return n.state.facet(eu).some(a=>a(n,e.from,e.to,s,l))||n.dispatch(l()),!0}function Om(n,e,t){let i,r=n.state,s=r.selection.main,o=-1;if(e.from==e.to&&e.froms.to){let a=e.fromu(n)),c,a);e.from==h&&(o=h)}if(o>-1)i={changes:e,selection:A.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=s.frome.to?r.sliceDoc(e.to,s.to):"";i=r.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+c))}else{let a=r.changes(e),c=t&&t.main.to<=a.newLength?t.main:void 0;if(r.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let h=n.state.sliceDoc(e.from,e.to),u,f=t&&uu(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);u={from:f.from,to:f.to-p}}else u=n.state.doc.lineAt(s.head);let d=s.to-e.to;i=r.changeByRange(p=>{if(p.from==s.from&&p.to==s.to)return{changes:a,range:c||p.map(a)};let m=p.to-d,O=m-h.length;if(n.state.sliceDoc(O,m)!=h||m>=u.from&&O<=u.to)return{range:p};let y=r.changes({from:O,to:m,insert:e.insert}),b=p.to-s.to;return{changes:y,range:c?A.range(Math.max(0,c.anchor+b),Math.max(0,c.head+b)):p.map(y)}})}else i={changes:a,selection:c&&r.selection.replaceRange(c)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),r.update(i,{userEvent:l,scrollIntoView:!0})}function mu(n,e,t,i){let r=Math.min(n.length,e.length),s=0;for(;s0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,s-Math.min(o,l));t-=o+a-s}if(o=o?s-t:0;s-=a,l=s+(l-o),o=s}else if(l=l?s-t:0;s-=a,o=s+(o-l),l=s}return{from:s,toA:o,toB:l}}function gm(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}=n.observer.selectionRange;return t&&(e.push(new Ka(t,i)),(r!=t||s!=i)&&e.push(new Ka(r,s))),e}function ym(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?A.single(t+e,i+e):null}function Er(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class Am{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,$.safari&&e.contentDOM.addEventListener("input",()=>null),$.gecko&&Em(e.contentDOM.ownerDocument)}handleEvent(e){!Cm(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let r of i.observers)r(this.view,t);for(let r of i.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Sm(e),i=this.handlers,r=this.view.contentDOM;for(let s in t)if(s!="scroll"){let o=!t[s].handlers.length,l=i[s];l&&o!=!l.handlers.length&&(r.removeEventListener(s,this.handleEvent),l=null),l||r.addEventListener(s,this.handleEvent,{passive:o})}for(let s in i)s!="scroll"&&!t[s]&&r.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&gu.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),$.android&&$.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if($.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(Ou.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||xm.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};return t.shiftKey&&$.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&bm(this.view.win)&&(t.shiftKey=!1),this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t},setTimeout(()=>this.flushIOSKey(),250),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:$.safari&&!$.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function bm(n){return n.visualViewport?n.visualViewport.height*n.visualViewport.scale/n.document.documentElement.clientHeight<.85:!1}function Za(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(r){We(t.state,r)}}}function Sm(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let r=i.spec,s=r&&r.plugin.domEventHandlers,o=r&&r.plugin.domEventObservers;if(s)for(let l in s){let a=s[l];a&&t(l).handlers.push(Za(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(Za(i.value,a))}}for(let i in gt)t(i).handlers.push(gt[i]);for(let i in Ve)t(i).observers.push(Ve[i]);return e}const Ou=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],xm="dthko",gu=[16,17,18,20,91,92,224,225],Gn=6;function Hn(n){return Math.max(0,n)*.7+8}function wm(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class vm{constructor(e,t,i,r){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Dh(e.contentDOM),this.atoms=e.state.facet(Dn).map(o=>o(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(_.allowMultipleSelections)&&km(e,t),this.dragging=Pm(e,t)&&bu(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&wm(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,r=0,s=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:r,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=vl(this.view);e.clientX-a.left<=r+Gn?t=-Hn(r-e.clientX):e.clientX+a.right>=o-Gn&&(t=Hn(e.clientX-o)),e.clientY-a.top<=s+Gn?i=-Hn(s-e.clientY):e.clientY+a.bottom>=l-Gn&&(i=Hn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=fu(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function km(n,e){let t=n.state.facet(Gh);return t.length?t[0](e):$.mac?e.metaKey:e.ctrlKey}function Qm(n,e){let t=n.state.facet(Hh);return t.length?t[0](e):$.mac?!e.altKey:!e.ctrlKey}function Pm(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=kn(n.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Cm(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=Se.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const gt=Object.create(null),Ve=Object.create(null),yu=$.ie&&$.ie_version<15||$.ios&&$.webkit_version<604;function Tm(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Au(n,t.value)},50)}function ps(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Au(n,e){e=ps(n.state,bl,e);let{state:t}=n,i,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(Bo!=null&&t.selection.ranges.every(a=>a.empty)&&Bo==s.toString()){let a=-1;i=t.changeByRange(c=>{let h=t.doc.lineAt(c.from);if(h.from==a)return{range:c};a=h.from;let u=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:u},range:A.cursor(c.from+u.length)}})}else o?i=t.changeByRange(a=>{let c=s.line(r++);return{changes:{from:a.from,to:a.to,insert:c.text},range:A.cursor(a.from+c.length)}}):i=t.replaceSelection(s);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}Ve.scroll=n=>{let e=n.inputState;e.lastScrollTop=n.scrollDOM.scrollTop,e.lastScrollLeft=n.scrollDOM.scrollLeft,$.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};Ve.wheel=Ve.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};gt.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);Ve.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};Ve.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ve.touchend=(n,e)=>{n.inputState.touchActive=!1};gt.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(_h))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Rm(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new vm(n,e,t,i)),i&&n.observer.ignore(()=>{Bh(n.contentDOM);let s=n.root.activeElement;s&&!s.contains(n.contentDOM)&&s.blur()});let r=n.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ma(n,e,t,i){if(i==1)return A.cursor(e,t);if(i==2)return om(n.state,e,t);{let r=n.docView.lineAt(e,t),s=n.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,l=r?r.posAtEnd:s.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Ua+1)%3:1}function Rm(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=bu(e),r=n.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,l){let a=n.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),c,h=Ma(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let u=Ma(n,t.pos,t.assoc,i),f=Math.min(u.from,h.from),d=Math.max(u.to,h.to);h=f1&&(c=Km(r,a.pos))?c:l?r.addRange(h):A.create([h])}}}function Km(n,e){for(let t=0;t=e)return A.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}gt.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let r=n.docView.tile.nearest(e.target);if(r&&r.isWidget()){let s=r.posAtStart,o=s+r.length;(s>=t.to||o<=t.from)&&(t=A.undirectionalRange(s,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",ps(n.state,Sl,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};gt.dragend=n=>(n.inputState.draggedContent=null,!1);function Da(n,e,t,i){if(t=ps(n.state,bl,t),!t)return;let r=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=n.inputState,o=i&&s&&Qm(n,e)?{from:s.from,to:s.to}:null,l={from:r,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(r,-1),head:a.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}gt.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),r=0,s=()=>{++r==t.length&&Da(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),s()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Da(n,e,i,!0),!0}return!1};gt.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=yu?null:e.clipboardData;return t?(Au(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(Tm(n),!1)};function Zm(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Mm(n){let e=[],t=[],i=!1;for(let r of n.selection.ranges)r.empty||(e.push(n.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of n.selection.ranges){let o=n.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),r=o.number}i=!0}return{text:ps(n,Sl,e.join(n.lineBreak)),ranges:t,linewise:i}}let Bo=null;gt.copy=gt.cut=(n,e)=>{if(!On(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:r}=Mm(n.state);if(!t&&!r)return!1;Bo=r?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let s=yu?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(Zm(n,t),!1)};const Su=zt.define();function xu(n,e){let t=[];for(let i of n.facet(tu)){let r=i(n,e);r&&t.push(r)}return t.length?n.update({effects:t,annotations:Su.of(!0)}):null}function wu(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=xu(n.state,e);t?n.dispatch(t):n.update([])}},10)}Ve.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),wu(n)};Ve.blur=n=>{n.observer.clearSelectionRange(),wu(n)};Ve.compositionstart=Ve.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};Ve.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,$.chrome&&$.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};Ve.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};gt.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(s&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),c=n.posAtDOM(l.endContainer,l.endOffset);return kl(n,{from:a,to:c,insert:n.state.toText(s)},null),!0}}let r;if($.chrome&&$.android&&(r=Ou.find(s=>s.inputType==e.inputType))&&(n.observer.delayAndroidKey(r.key,r.keyCode),r.key=="Backspace"||r.key=="Delete")){let s=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>s+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return $.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),$.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>Ve.compositionend(n,e),20),!1};const Xa=new Set;function Em(n){Xa.has(n)||(Xa.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const La=["pre-wrap","normal","pre-line","break-spaces"];let zi=!1;function Ba(){zi=!1}class Um{constructor(e){this.lineWrapping=e,this.doc=re.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return La.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=s,a){this.heightSamples={};for(let c=0;c0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Ar&&(zi=!0),this.height=e)}replace(e,t,i){return je.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let s=this,o=i.doc;for(let l=r.length-1;l>=0;l--){let{fromA:a,toA:c,fromB:h,toB:u}=r[l],f=s.lineAt(a,pe.ByPosNoHeight,i.setDoc(t),0,0),d=f.to>=c?f:s.lineAt(c,pe.ByPosNoHeight,i,0,0);for(u+=d.to-c,c=d.to;l>0&&f.from<=r[l-1].toA;)a=r[l-1].fromA,h=r[l-1].fromB,l--,as*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,r-=l.size}else if(s>r*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,s-=l.size}else break;else if(r=s&&o(this.lineAt(0,pe.ByPos,i,r,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setMeasuredHeight(r),this.outdated=!1,this}toString(){return`block(${this.length})`}}class ot extends vu{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof ot||r instanceof Ee&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof Ee?r=new ot(r.length,this.height,this.spaceAbove):r.height=this.height,this.outdated||(r.outdated=!1),r):je.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setMeasuredHeight(r):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Ee extends je{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*s);o=a/s,this.length>s+1&&(l=(this.height-a)/(this.length-s-1))}else o=this.height/s;return{firstLine:i,lastLine:r,perLine:o,perChar:l}}blockAt(e,t,i,r){let{firstLine:s,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,r);if(t.lineWrapping){let c=r+(e0){let s=i[i.length-1];s instanceof Ee?i[i.length-1]=new Ee(s.length+r):i.push(null,new Ee(r-1))}if(e>0){let s=i[0];s instanceof Ee?i[0]=new Ee(e+s.length):i.unshift(new Ee(e-1),null)}return je.of(i)}decomposeLeft(e,t){t.push(new Ee(e-1),null)}decomposeRight(e,t){t.push(null,new Ee(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],l=Math.max(t,r.from),a=-1;for(r.from>t&&o.push(new Ee(r.from-t-1).updateHeight(e,t));l<=s&&r.more;){let h=e.doc.lineAt(l).length;o.length&&o.push(null);let u=r.heights[r.index++],f=0;u<0&&(f=-u,u=r.heights[r.index++]),a==-1?a=u:Math.abs(u-a)>=Ar&&(a=-2);let d=new ot(h,u,f);d.outdated=!1,o.push(d),l+=h+1}l<=s&&o.push(null,new Ee(s-l).updateHeight(e,l));let c=je.of(o);return(a<0||Math.abs(c.height-this.height)>=Ar||Math.abs(a-this.heightMetrics(e,t).perLine)>=Ar)&&(zi=!0),Ur(this,c)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class Xm extends je{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let s=i+this.left.height;return el))return c;let h=t==pe.ByPosNoHeight?pe.ByPosNoHeight:pe.ByPos;return a?c.join(this.right.lineAt(l,h,i,o,l)):this.left.lineAt(l,h,i,r,s).join(c)}forEachLine(e,t,i,r,s,o){let l=r+this.left.height,a=s+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let c=this.lineAt(a,pe.ByPos,i,r,s);e=e&&c.from<=t&&o(c),t>c.to&&this.right.forEachLine(c.to+1,t,i,l,a,o)}}replace(e,t,i){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let l of i)s.push(l);if(e>0&&qa(s,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?je.of(this.break?[e,null,t]:[e,t]):(this.left=Ur(this.left,e),this.right=Ur(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:s,right:o}=this,l=t+s.length+this.break,a=null;return r&&r.from<=t+s.length&&r.more?a=s=s.updateHeight(e,t,i,r):s.updateHeight(e,t,i),r&&r.from<=l+o.length&&r.more?a=o=o.updateHeight(e,l,i,r):o.updateHeight(e,l,i),a?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function qa(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof Ee&&(i=n[e+1])instanceof Ee&&n.splice(e-1,3,new Ee(t.length+1+i.length))}const Lm=5;class Ql{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof ot?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new ot(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=Lm)&&this.addLineDeco(r,s,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new ot(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new Ee(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof ot)return e;let t=new ot(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let r=this.ensureLine();r.length+=i,r.collapsed+=i,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof ot)&&!this.isCovered?this.nodes.push(new ot(0,-1,0)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&u.overflow!="visible"){let f=h.getBoundingClientRect();s=Math.max(s,f.left),o=Math.min(o,f.right),l=Math.max(l,f.top),a=Math.min(c==n.parentNode?r.innerHeight:a,f.bottom)}c=u.position=="absolute"||u.position=="fixed"?h.offsetParent:h.parentNode}else if(c.nodeType==11)c=c.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function zm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function Wm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Ds{constructor(e,t,i,r){this.from=e,this.to=t,this.size=i,this.displaySize=r}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof r!="function"&&r.class=="cm-lineWrapping");this.heightOracle=new Um(i),this.stateDeco=Wa(t),this.heightMap=je.empty().applyChanges(this.stateDeco,re.empty,this.heightOracle.setDoc(t.doc),[new ct(0,0,0,t.doc.length)]);for(let r=0;r<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());r++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=B.set(this.lineGaps.map(r=>r.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new _n(s,o))}}return this.viewports=e.sort((i,r)=>i.from-r.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?za:new Pl(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(un(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Wa(this.state);let r=e.changedRanges,s=ct.extendWithRanges(r,Bm(i,this.stateDeco,e?e.changes:$e.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Ba(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=o||zi)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let c=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(c||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(nu)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,s=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?fe.RTL:fe.LTR;let o=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let c=0,h=0;if(l.width&&l.height){let{scaleX:k,scaleY:S}=Fh(t,l);(k>.005&&Math.abs(this.scaleX-k)>.005||S>.005&&Math.abs(this.scaleY-S)>.005)&&(this.scaleX=k,this.scaleY=S,c|=16,o=a=!0)}let u=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=u||this.paddingBottom!=f)&&(this.paddingTop=u,this.paddingBottom=f,c|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,c|=16);let d=Dh(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=qh(this.scrollParent||e.win);let m=(this.printing?Wm:Im)(t,this.paddingTop),O=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let b=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(b!=this.inView&&(this.inView=b,b&&(a=!0)),!this.inView&&!this.scrollTarget&&!zm(e.dom))return 0;let x=l.width;if((this.contentDOMWidth!=x||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,c|=16),a){let k=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(k)&&(o=!0),o||r.lineWrapping&&Math.abs(x-this.contentDOMWidth)>r.charWidth){let{lineHeight:S,charWidth:v,textHeight:U}=e.docView.measureTextSize();o=S>0&&r.refresh(s,S,v,U,Math.max(5,x/v),k),o&&(e.docView.minWidth=0,c|=16)}O>0&&y>0?h=Math.max(O,y):O<0&&y<0&&(h=Math.min(O,y)),Ba();for(let S of this.viewports){let v=S.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(S);this.heightMap=(o?je.empty().applyChanges(this.stateDeco,re.empty,this.heightOracle,[new ct(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new Fm(S.from,v))}zi&&(c|=2)}let C=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(c&2&&(c|=this.updateScaler()),this.viewport=this.getViewport(h,this.scrollTarget),c|=this.updateForViewport()),(c&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),c|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),c}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new _n(r.lineAt(o-i*1e3,pe.ByHeight,s,0,0).from,r.lineAt(l+(1-i)*1e3,pe.ByHeight,s,0,0).to);if(t){let{head:c}=t.range;if(ca.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),u=r.lineAt(c,pe.ByPos,s,0,0),f;t.y=="center"?f=(u.top+u.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&c=l+Math.max(10,Math.min(i,250)))&&r>o-2*1e3&&s>1,o=r<<1;if(this.defaultTextDirection!=fe.LTR&&!i)return[];let l=[],a=(h,u,f,d)=>{if(u-hh&&yy.from>=f.from&&y.to<=f.to&&Math.abs(y.from-h)y.fromb));if(!O){if(ux.from<=u&&x.to>=u)){let x=t.moveToLineBoundary(A.cursor(u),!1,!0).head;x>h&&(u=x)}let y=this.gapSize(f,h,u,d),b=i||y<2e6?y:2e6;O=new Ds(h,u,y,b)}l.push(O)},c=h=>{if(h.length2e6)for(let S of e)S.from>=h.from&&S.fromh.from&&a(h.from,d,h,u),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];N.spans(t,this.viewport.from,this.viewport.to,{span(s,o){i.push({from:s,to:o})},point(){}},20);let r=0;if(i.length!=this.visibleRanges.length)r=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||un(this.heightMap.lineAt(e,pe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||un(this.heightMap.lineAt(this.scaler.fromDOM(e),pe.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return un(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class _n{constructor(e,t){this.from=e,this.to=t}}function Vm(n,e,t){let i=[],r=n,s=0;return N.spans(t,n,e,{span(){},point(o,l){o>r&&(i.push({from:r,to:o}),s+=o-r),r=l}},20),r=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let r=0;;r++){let{from:s,to:o}=e[r],l=o-s;if(i<=l)return s+i;i-=l}}function er(n,e){let t=0;for(let{from:i,to:r}of n.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/n.total}function Ym(n,e){for(let t of n)if(e(t))return t}const za={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Wa(n){let e=n.facet(us).filter(i=>typeof i!="function"),t=n.facet(wl).filter(i=>typeof i!="function");return t.length&&e.push(N.join(t)),e}class Pl{constructor(e,t,i){let r=0,s=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let c=t.lineAt(l,pe.ByPos,e,0,0).top,h=t.lineAt(a,pe.ByPos,e,0,0).bottom;return r+=h-c,{from:l,to:a,top:c,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let l of this.viewports)l.domTop=o+(l.top-s)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),s=l.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let s=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function un(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new dt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(r=>un(r,e)):n._content)}const tr=K.define({combine:n=>n.join(" ")}),qo=K.define({combine:n=>n.indexOf(!0)>-1}),Io=ei.newName(),ku=ei.newName(),Qu=ei.newName(),Pu={"&light":"."+ku,"&dark":"."+Qu};function zo(n,e,t){return new ei(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,r=>{if(r=="&")return n;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):n+" "+i}})}const Nm=zo("."+Io,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Pu),Gm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Xs=$.ie&&$.ie_version<=11;class Hm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Qp,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);($.ie&&$.ie_version<=11||$.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&$.android&&e.constructor.EDIT_CONTEXT!==!1&&!($.chrome&&$.chrome_version<126)&&(this.editContext=new Jm(e),e.state.facet(Dt)&&(e.contentDOM.editContext=this.editContext.editContext)),Xs&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(Dt)?i.root.activeElement!=this.dom:!On(this.dom,r))return;let s=r.anchorNode&&i.docView.tile.nearest(r.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}($.ie&&$.ie_version<=11||$.android&&$.chrome)&&!i.state.selection.main.empty&&r.focusNode&&gn(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=kn(e.root);if(!t)return!1;let i=$.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&_m(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let r=On(this.dom,i);return r&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&Ei(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&On(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new mm(this.view,e,t,i);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,r=pu(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Er(this.view.state.selection,t.newSel.main))&&this.view.update([]),r}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=ja(t,e.previousSibling||e.target.previousSibling,-1),r=ja(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Dt)!=e.state.facet(Dt)&&(e.view.contentDOM.editContext=e.state.facet(Dt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let r of this.scrollTargets)r.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function ja(n,e,t){for(;e;){let i=Se.get(e);if(i&&i.parent==n)return i;let r=e.parentNode;e=r!=n.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function Va(n,e){let t=e.startContainer,i=e.startOffset,r=e.endContainer,s=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return gn(o.node,o.offset,r,s)&&([t,i,r,s]=[r,s,t,i]),{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}}function _m(n,e){if(e.getComposedRanges){let r=e.getComposedRanges(n.root)[0];if(r)return Va(n,r)}let t=null;function i(r){r.preventDefault(),r.stopImmediatePropagation(),t=r.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?Va(n,t):null}class Jm{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let r=e.state.selection.main,{anchor:s,head:o}=r,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let c=a-l>i.text.length;l==this.from&&sthis.to&&(a=s);let h=mu(e.state.sliceDoc(l,a),i.text,(c?r.from:r.to)-l,c?"end":null);if(!h){let f=A.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Er(f,r)||e.dispatch({selection:f,userEvent:"select"});return}let u={from:h.from+l,to:h.toA+l,insert:re.of(i.text.slice(h.from,h.toB).split(` -`))};if(($.mac||$.android)&&u.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(u={from:l,to:a,insert:re.of([i.text.replace("."," ")])}),this.pendingContextChange=u,!e.state.readOnly){let f=this.to-this.from+(u.to-u.from+u.insert.length);kl(e,u,A.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),u.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let r=[],s=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let r=[];for(let s of i.getTextFormats()){let o=s.underlineStyle,l=s.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(s.rangeStart),c=this.toEditorPos(s.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{let r=kn(i.root);r&&r.rangeCount&&this.editContext.updateSelectionBounds(r.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,r=this.pendingContextChange;return e.changes.iterChanges((s,o,l,a,c)=>{if(i)return;let h=c.length-(o-s);if(r&&o>=r.to)if(r.from==s&&r.to==o&&r.insert.eq(c)){r=this.pendingContextChange=null,t+=h,this.to+=h;return}else r=null,this.revertPending(e.state);if(s+=t,o+=t,o<=this.from)this.from+=h,this.to+=h;else if(sthis.to||this.to-this.from+c.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(o),c.toString()),this.to+=h}t+=h}),r&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(r=>!r.isUserEvent("input.type")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(i,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class R{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(r=>r.forEach(s=>i(s,this)))||(r=>this.update(r)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Pp(e.parent)||document,this.viewState=new Ia(this,e.state||_.create(e)),e.scrollTo&&e.scrollTo.is(Nn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ti).map(r=>new Zs(r));for(let r of this.plugins)r.update(this);this.observer=new Hm(this),this.inputState=new Am(this),this.inputState.ensureHandlers(this.plugins),this.docView=new $a(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Pe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,r,s=this.state;for(let f of e){if(f.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=f.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,l=0,a=null;e.some(f=>f.annotation(Su))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=xu(s,o),a||(l=1));let c=this.observer.delayedAndroidKey,h=null;if(c?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(h=null)):this.observer.clear(),s.facet(_.phrases)!=this.state.facet(_.phrases))return this.setState(s);r=Kr.create(this,s,e),r.flags|=l;let u=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(u&&(u=u.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection,{x:p,y:m}=this.state.facet(R.cursorScrollMargin);u=new Ui(d.empty?d:A.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of f.effects)d.is(Nn)&&(u=d.value.clip(this.state))}this.viewState.update(r,u),this.bidiCache=Fr.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(hn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(tr)!=r.state.facet(tr)&&(this.viewState.mustMeasureContent=!0),(t||i||u||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!r.empty)for(let f of this.state.facet(Fo))try{f(r)}catch(d){We(this.state,d,"update listener")}(a||h)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),h&&!pu(this,h)&&c.force&&Ei(this.contentDOM,c.key,c.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new Ia(this,e),this.plugins=e.facet(Ti).map(i=>new Zs(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new $a(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ti),i=e.state.facet(Ti);if(t!=i){let r=[];for(let s of i){let o=t.indexOf(s);if(o<0)r.push(new Zs(s));else{let l=this.plugins[o];l.mustUpdate=e,r.push(l)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,r=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:o}=this.viewState;Math.abs(r-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(qh(i||this.win))s=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];a&4||([this.measureRequests,c]=[c,this.measureRequests]);let h=c.map(d=>{try{return d.read(this)}catch(p){return We(this.state,p),Ya}}),u=Kr.create(this,this.state,[]),f=!1;u.flags|=a,t?t.flags|=a:t=u,this.updateState=2,u.empty||(this.updatePlugins(u),this.inputState.update(u),this.updateAttrs(),f=this.docView.update(u),f&&this.docViewUpdate());for(let d=0;d1||p<-1)&&!($.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){r=r+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(Fo))l(t)}get themeClasses(){return Io+" "+(this.state.facet(qo)?Qu:ku)+" "+this.state.facet(tr)}updateAttrs(){let e=Na(this,ou,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Dt)?"true":"false",class:"cm-content",style:`${$.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Na(this,xl,t);let i=this.observer.ignore(()=>{let r=va(this.contentDOM,this.contentAttrs,t),s=va(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(R.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(hn);let e=this.state.facet(R.cspNonce);ei.mount(this.root,this.styleModules.concat(Nm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Fs(this,e,Ra(this,e,t,i))}moveByGroup(e,t){return Fs(this,e,Ra(this,e,t,i=>cm(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),r=this.textDirectionAt(e.from),s=i[t?i.length-1:0];return A.cursor(s.side(t,r)+e.from,s.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,i=!0){return am(this,e,t,i)}moveVertically(e,t,i){return Fs(this,e,hm(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Lo(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Lo(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.state.doc.lineAt(e),r=this.bidiSpans(i),s=r[Ct.find(r,e-i.from,-1,t)];return this.docView.coordsAt(e,t,s.dir==fe.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(iu)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>eO)return Yh(e.length);let t=this.textDirectionAt(e.from),i;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||Vh(s.isolates,i=Pa(this,e))))return s.order;i||(i=Pa(this,e));let r=Ep(e.text,t,i);return this.bidiCache.push(new Fr(e.from,e.to,t,i,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||$.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Bh(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,r,s,o;return Nn.of(new Ui(typeof e=="number"?A.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(r=t.x)!==null&&r!==void 0?r:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Nn.of(new Ui(A.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return xe.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return xe.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ei.newName(),r=[tr.of(i),hn.of(zo(`.${i}`,e))];return t&&t.dark&&r.push(qo.of(!0)),r}static baseTheme(e){return si.lowest(hn.of(zo("."+Io,e,Pu)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),r=i&&Se.get(i)||Se.get(e);return((t=r?.root)===null||t===void 0?void 0:t.view)||null}}R.styleModule=hn;R.inputHandler=eu;R.clipboardInputFilter=bl;R.clipboardOutputFilter=Sl;R.scrollHandler=ru;R.focusChangeEffect=tu;R.perLineTextDirection=iu;R.exceptionSink=Jh;R.updateListener=Fo;R.editable=Dt;R.mouseSelectionStyle=_h;R.dragMovesSelection=Hh;R.clickAddsSelectionRange=Gh;R.decorations=us;R.blockWrappers=lu;R.outerDecorations=wl;R.atomicRanges=Dn;R.bidiIsolatedRanges=au;R.cursorScrollMargin=K.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});R.scrollMargins=cu;R.darkTheme=qo;R.cspNonce=K.define({combine:n=>n.length?n[0]:""});R.contentAttributes=xl;R.editorAttributes=ou;R.lineWrapping=R.contentAttributes.of({class:"cm-lineWrapping"});R.announce=W.define();const eO=4096,Ya={};class Fr{constructor(e,t,i,r,s,o){this.from=e,this.to=t,this.dir=i,this.isolates=r,this.fresh=s,this.order=o}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let i=[],r=e.length?e[e.length-1].dir:fe.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=i[r],o=typeof s=="function"?s(n):s;o&&gl(o,t)}return t}const tO=$.mac?"mac":$.windows?"win":$.linux?"linux":"key";function iO(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let r,s,o,l;for(let a=0;ai.concat(r),[]))),t}function rO(n,e,t){return Tu(Cu(n.state),e,n,t)}let Nt=null;const sO=4e3;function oO(n,e=tO){let t=Object.create(null),i=Object.create(null),r=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,l,a,c,h)=>{var u,f;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>iO(y,e));for(let y=1;y{let C=Nt={view:x,prefix:b,scope:o};return setTimeout(()=>{Nt==C&&(Nt=null)},sO),!0}]})}let m=p.join(" ");r(m,!1);let O=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(u=d._any)===null||u===void 0?void 0:u.run)===null||f===void 0?void 0:f.slice())||[]});a&&O.run.push(a),c&&(O.preventDefault=!0),h&&(O.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let c of l){let h=t[c]||(t[c]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:u}=o;for(let f in h)h[f].run.push(d=>u(d,Wo))}let a=o[e]||o.key;if(a)for(let c of l)s(c,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&s(c,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let Wo=null;function Tu(n,e,t,i){Wo=e;let r=bp(e),s=Ne(r,0),o=Qt(s)==r.length&&r!=" ",l="",a=!1,c=!1,h=!1;Nt&&Nt.view==t&&Nt.scope==i&&(l=Nt.prefix+" ",gu.indexOf(e.keyCode)<0&&(c=!0,Nt=null));let u=new Set,f=O=>{if(O){for(let y of O.run)if(!u.has(y)&&(u.add(y),y(t)))return O.stopPropagation&&(h=!0),!0;O.preventDefault&&(O.stopPropagation&&(h=!0),c=!0)}return!1},d=n[i],p,m;return d&&(f(d[l+ir(r,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!($.windows&&e.ctrlKey&&e.altKey)&&!($.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ti[e.keyCode])&&p!=r?(f(d[l+ir(p,e,!0)])||e.shiftKey&&(m=wn[e.keyCode])!=r&&m!=p&&f(d[l+ir(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&f(d[l+ir(r,e,!0)])&&(a=!0),!a&&f(d._any)&&(a=!0)),c&&(a=!0),a&&h&&e.stopPropagation(),Wo=null,a}class Oi{constructor(e,t,i,r,s){this.className=e,this.left=t,this.top=i,this.width=r,this.height=s}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let r=e.coordsAtPos(i.head,i.assoc||1);if(!r)return[];let s=$u(e);return[new Oi(t,r.left-s.left,r.top-s.top,null,r.bottom-r.top)]}else return lO(e,t,i)}}function $u(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==fe.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Ha(n,e,t,i){let r=n.coordsAtPos(e,t*2);if(!r)return i;let s=n.dom.getBoundingClientRect(),o=(r.top+r.bottom)/2,l=n.posAtCoords({x:s.left+1,y:o}),a=n.posAtCoords({x:s.right-1,y:o});return l==null||a==null?i:{from:Math.max(i.from,Math.min(l,a)),to:Math.min(i.to,Math.max(l,a))}}function lO(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),r=Math.min(t.to,n.viewport.to),s=n.textDirection==fe.LTR,o=n.contentDOM,l=o.getBoundingClientRect(),a=$u(n),c=o.querySelector(".cm-line"),h=c&&window.getComputedStyle(c),u=l.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=l.right-(h?parseInt(h.paddingRight):0),d=Xo(n,i,1),p=Xo(n,r,-1),m=d.type==Xe.Text?d:null,O=p.type==Xe.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=Ha(n,i,1,m)),O&&(n.lineWrapping||p.widgetLineBreaks)&&(O=Ha(n,r,-1,O)),m&&O&&m.from==O.from&&m.to==O.to)return b(x(t.from,t.to,m));{let k=m?x(t.from,null,m):C(d,!1),S=O?x(null,t.to,O):C(p,!0),v=[];return(m||d).to<(O||p).from-(m&&O?1:0)||d.widgetLineBreaks>1&&k.bottom+n.defaultLineHeight/2M&&Q.from=P)break;ee>D&&E(Math.max(J,D),k==null&&J<=M,Math.min(ee,P),S==null&&ee>=Y,le.dir)}if(D=V.to+1,D>=P)break}return j.length==0&&E(M,k==null,Y,S==null,n.textDirection),{top:U,bottom:F,horizontal:j}}function C(k,S){let v=l.top+(S?k.top:k.bottom);return{top:v,bottom:v,horizontal:[]}}}function aO(n,e){return n.constructor==e.constructor&&n.eq(e)}class cO{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(br)!=e.state.facet(br)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(br);for(;t!aO(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let r of e)r.update&&t&&r.constructor&&this.drawn[i].constructor&&r.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(r.draw(),t);for(;t;){let r=t.nextSibling;t.remove(),t=r}this.drawn=e,$.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const br=K.define();function Ru(n){return[xe.define(e=>new cO(e,n)),br.of(n)]}const Wi=K.define({combine(n){return yt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function hO(n={}){return[Wi.of(n),uO,fO,pO,nu.of(!0)]}function Ku(n){return n.startState.facet(Wi)!=n.state.facet(Wi)}const uO=Ru({above:!0,markers(n){let{state:e}=n,t=e.facet(Wi),i=[];for(let r of e.selection.ranges){let s=r==e.selection.main;if(r.empty||t.drawRangeCursor&&!(s&&$.ios&&t.iosSelectionHandles)){let o=s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",l=r.empty?r:A.cursor(r.head,r.assoc);for(let a of Oi.forRange(n,o,l))i.push(a)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Ku(n);return t&&_a(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){_a(e.state,n)},class:"cm-cursorLayer"});function _a(n,e){e.style.animationDuration=n.facet(Wi).cursorBlinkRate+"ms"}const fO=Ru({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let r of i)if(!r.empty)for(let s of Oi.forRange(n,"cm-selectionBackground",r))e.push(s);if($.ios&&!t.empty&&n.state.facet(Wi).iosSelectionHandles){for(let r of Oi.forRange(n,"cm-selectionHandle cm-selectionHandle-start",A.cursor(t.from,1)))e.push(r);for(let r of Oi.forRange(n,"cm-selectionHandle cm-selectionHandle-end",A.cursor(t.to,1)))e.push(r)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Ku(n)},class:"cm-selectionLayer"}),dO=$.gecko&&$.gecko_version==153?"#ffffff01":"transparent",pO=si.highest(R.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:`${dO} !important`},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Zu=W.define({map(n,e){return n==null?null:e.mapPos(n)}}),fn=Te.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Zu)?i.value:t,n)}}),mO=xe.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(fn);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(fn)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(fn),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(fn)!=n&&this.view.dispatch({effects:Zu.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function OO(){return[fn,mO]}function Ja(n,e,t,i,r){e.lastIndex=0;for(let s=n.iterRange(t,i),o=t,l;!s.next().done;o+=s.value.length)if(!s.lineBreak)for(;l=e.exec(s.value);)r(o+l.index,l)}function gO(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:r,to:s}of t)r=Math.max(n.state.doc.lineAt(r).from,r-e),s=Math.min(n.state.doc.lineAt(s).to,s+e),i.length&&i[i.length-1].to>=r?i[i.length-1].to=s:i.push({from:r,to:s});return i}class yO{constructor(e){const{regexp:t,decoration:i,decorate:r,boundary:s,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,r)this.addMatch=(l,a,c,h)=>r(h,c,c+l[0].length,l,a);else if(typeof i=="function")this.addMatch=(l,a,c,h)=>{let u=i(l,a,c);u&&h(c,c+l[0].length,u)};else if(i)this.addMatch=(l,a,c,h)=>h(c,c+l[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=s,this.maxLength=o}createDeco(e){let t=new Bt,i=t.add.bind(t);for(let{from:r,to:s}of gO(e,this.maxLength))Ja(e.state.doc,this.regexp,r,s,(o,l)=>this.addMatch(l,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,r=-1;return e.docChanged&&e.changes.iterChanges((s,o,l,a)=>{a>=e.view.viewport.from&&l<=e.view.viewport.to&&(i=Math.min(l,i),r=Math.max(a,r))}),e.viewportMoved||r-i>1e3?this.createDeco(e.view):r>-1?this.updateRange(e.view,t.map(e.changes),i,r):t}updateRange(e,t,i,r){for(let s of e.visibleRanges){let o=Math.max(s.from,i),l=Math.min(s.to,r);if(l>=o){let a=e.state.doc.lineAt(o),c=a.toa.from;o--)if(this.boundary.test(a.text[o-1-a.from])){h=o;break}for(;lf.push(y.range(m,O));if(a==c)for(this.regexp.lastIndex=h-a.from;(d=this.regexp.exec(a.text))&&d.indexthis.addMatch(O,e,m,p));t=t.update({filterFrom:h,filterTo:u,filter:(m,O)=>mu,add:f})}}return t}}const jo=/x/.unicode!=null?"gu":"g",AO=new RegExp(`[\0-\b ---Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,jo),bO={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Ls=null;function SO(){var n;if(Ls==null&&typeof document<"u"&&document.body){let e=document.body.style;Ls=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Ls||!1}const Sr=K.define({combine(n){let e=yt(n,{render:null,specialChars:AO,addSpecialChars:null});return(e.replaceTabs=!SO())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,jo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,jo)),e}});function xO(n={}){return[Sr.of(n),wO()]}let ec=null;function wO(){return ec||(ec=xe.fromClass(class{constructor(n){this.view=n,this.decorations=B.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Sr)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new yO({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:r}=t.state,s=Ne(e[0],0);if(s==9){let o=r.lineAt(i),l=t.state.tabSize,a=_i(o.text,l,i-o.from);return B.replace({widget:new PO((l-a%l)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[s]||(this.decorationCache[s]=B.replace({widget:new QO(n,s)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Sr);n.startState.facet(Sr)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const vO="•";function kO(n){return n>=32?vO:n==10?"␤":String.fromCharCode(9216+n)}class QO extends Ut{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=kO(this.code),i=e.state.phrase("Control character")+" "+(bO[this.code]||"0x"+this.code.toString(16)),r=this.options.render&&this.options.render(this.code,i,t);if(r)return r;let s=document.createElement("span");return s.textContent=t,s.title=i,s.setAttribute("aria-label",i),s.className="cm-specialChar",s}ignoreEvent(){return!1}}class PO extends Ut{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function CO(){return $O}const TO=B.line({class:"cm-activeLine"}),$O=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let r=n.lineBlockAt(i.head);r.from>e&&(t.push(TO.range(r.from)),e=r.from)}return B.set(t)}},{decorations:n=>n.decorations}),Vo=2e3;function RO(n,e,t){let i=Math.min(e.line,t.line),r=Math.max(e.line,t.line),s=[];if(e.off>Vo||t.off>Vo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),l=Math.max(e.off,t.off);for(let a=i;a<=r;a++){let c=n.doc.line(a);c.length<=l&&s.push(A.range(c.from+o,c.to+l))}}else{let o=Math.min(e.col,t.col),l=Math.max(e.col,t.col);for(let a=i;a<=r;a++){let c=n.doc.line(a),h=Qo(c.text,o,n.tabSize,!0);if(h<0)s.push(A.cursor(c.to));else{let u=Qo(c.text,l,n.tabSize);s.push(A.range(c.from+h,c.from+u))}}}return s}function KO(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function tc(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),r=t-i.from,s=r>Vo?-1:r==i.length?KO(n,e.clientX):_i(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:s,off:r}}function ZO(n,e){let t=tc(n,e),i=n.state.selection;return t?{update(r){if(r.docChanged){let s=r.changes.mapPos(r.startState.doc.line(t.line).from),o=r.state.doc.lineAt(s);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(r.changes)}},get(r,s,o){let l=tc(n,r);if(!l)return i;let a=RO(n.state,t,l);return a.length?o?A.create(a.concat(i.ranges)):A.create(a):i}}:null}function MO(n){let e=(t=>t.altKey&&t.button==0);return R.mouseSelectionStyle.of((t,i)=>e(i)?ZO(t,i):null)}const EO={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},UO={style:"cursor: crosshair"};function FO(n={}){let[e,t]=EO[n.key||"Alt"],i=xe.fromClass(class{constructor(r){this.view=r,this.isDown=!1}set(r){this.isDown!=r&&(this.isDown=r,this.view.update([]))}},{eventObservers:{keydown(r){this.set(r.keyCode==e||t(r))},keyup(r){(r.keyCode==e||!t(r))&&this.set(!1)},mousemove(r){this.set(t(r))}}});return[i,R.contentAttributes.of(r=>{var s;return!((s=r.plugin(i))===null||s===void 0)&&s.isDown?UO:null})]}const nr="-10000px";class Mu{constructor(e,t,i,r){this.facet=t,this.createTooltipView=i,this.removeTooltipView=r,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let s=null;this.tooltipViews=this.tooltips.map(o=>s=i(o,s))}update(e,t){var i;let r=e.state.facet(this.facet),s=r.filter(a=>a);if(r===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[c]=a),t.length=l.length),this.input=r,this.tooltips=s,this.tooltipViews=o,!0}}function DO(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const Bs=K.define({combine:n=>{var e,t,i;return{position:$.ios?"absolute":((e=n.find(r=>r.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(r=>r.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(r=>r.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||DO}}}),ic=new WeakMap,Cl=xe.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Bs);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new Mu(n,Os,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Bs);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let r of this.manager.tooltipViews)r.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let r of this.manager.tooltipViews)this.container.appendChild(r.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let r=document.createElement("div");r.className="cm-tooltip-arrow",t.dom.appendChild(r)}return t.dom.style.position=this.position,t.dom.style.top=nr,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:s}=this.manager.tooltipViews[0];if($.safari){let o=s.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!s.offsetParent&&s.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let s=this.parent.getBoundingClientRect();s.width&&s.height&&(n=s.width/this.parent.offsetWidth,e=s.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),r=vl(this.view);return{visible:{left:i.left+r.left,top:i.top+r.top,right:i.right-r.right,bottom:i.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((s,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(s.pos):this.view.coordsAtPos(s.pos)}),size:this.manager.tooltipViews.map(({dom:s})=>s.getBoundingClientRect()),space:this.view.state.facet(Bs).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:r,scaleY:s}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||u.rightMath.min(t.right,i.right)+.1)){h.style.top=nr;continue}let d=a.arrow?c.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=f.right-f.left,O=(e=ic.get(c))!==null&&e!==void 0?e:f.bottom-f.top,y=c.offset||LO,b=this.view.textDirection==fe.LTR,x=f.width>i.right-i.left?b?i.left:i.right-f.width:b?Math.max(i.left,Math.min(u.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,u.left-m+(d?14:0)-y.x),i.right-m),C=this.above[l];!a.strictSide&&(C?u.top-O-p-y.yi.bottom)&&C==i.bottom-u.bottom>u.top-i.top&&(C=this.above[l]=!C);let k=(C?u.top-i.top:i.bottom-u.bottom)-p;if(kx&&U.topS&&(S=C?U.top-O-2-p:U.bottom+p+2);if(this.position=="absolute"?(h.style.top=(S-n.parent.top)/s+"px",nc(h,(x-n.parent.left)/r)):(h.style.top=S/s+"px",nc(h,x/r)),d){let U=u.left+(b?y.x:-y.x)-(x+14-7);d.style.left=U/r+"px"}c.overlap!==!0&&o.push({left:x,top:S,right:v,bottom:S+O}),h.classList.toggle("cm-tooltip-above",C),h.classList.toggle("cm-tooltip-below",!C),c.positioned&&c.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=nr}},{eventObservers:{scroll(){this.maybeMeasure()}}});function nc(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const XO=R.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),LO={x:0,y:0},Os=K.define({enables:[Cl,XO]}),Dr=K.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class gs{static create(e){return new gs(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Mu(e,Dr,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let r=i[e];if(r!==void 0){if(t===void 0)t=r;else if(t!==r)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const BO=Os.compute([Dr],n=>{let e=n.facet(Dr);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:gs.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),qO=K.define();class IO{constructor(e,t,i,r,s,o){this.view=e,this.source=t,this.field=i,this.locked=r,this.setHover=s,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(e){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;eo.bottom||t.xo.right+e.defaultCharacterWidth)return;let l=e.bidiSpans(e.state.doc.lineAt(r)).find(c=>c.from<=r&&c.to>=r),a=l&&l.dir==fe.RTL?-1:1;s=t.x{if(l&&!(Array.isArray(l)&&!l.length)){let a=Array.isArray(l)?l:[l];r&&this.locked.set(a,r),e.dispatch({effects:this.setHover.of(a)})}};if(s&&"then"in s){let l=this.pending={pos:t};s.then(a=>{this.pending==l&&(this.pending=null,o(a))},a=>We(e.state,a,"hover tooltip"))}else o(s)}get tooltip(){let e=this.view.plugin(Cl),t=e?e.manager.tooltips.findIndex(i=>i.create==gs.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:r,tooltip:s}=this;if(r.length&&!this.locked.has(r)&&s&&!zO(s.dom,e)||this.pending){let{pos:o}=r[0]||this.pending,l=(i=(t=r[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==l?this.view.posAtCoords(this.lastMove)!=o:!WO(this.view,o,l,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length&&!this.locked.has(t)){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t);let{active:r}=this;r.length&&!this.locked.has(r)&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const rr=4;function zO(n,e){let{left:t,right:i,top:r,bottom:s}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let l=o.getBoundingClientRect();r=Math.min(l.top,r),s=Math.max(l.bottom,s)}return e.clientX>=t-rr&&e.clientX<=i+rr&&e.clientY>=r-rr&&e.clientY<=s+rr}function WO(n,e,t,i,r,s){let o=n.scrollDOM.getBoundingClientRect(),l=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rightr||Math.min(o.bottom,l)=e&&a<=t}function Eu(n,e={}){let t=W.define(),i=new WeakMap,r=Te.define({create(){return[]},update(o,l){let a=i.get(o);if(o.length&&(e.hideOnChange&&(l.docChanged||l.selection)?o=[]:a&&a(l)?o=[]:e.hideOn&&(o=o.filter(c=>!e.hideOn(l,c)))),l.docChanged&&o.length){let c=[];for(let h of o){let u=l.changes.mapPos(h.pos,-1,De.TrackDel);if(u!=null){let f=Object.assign(Object.create(null),h);f.pos=u,f.end!=null&&(f.end=l.changes.mapPos(f.end)),c.push(f)}}o=c}for(let c of l.effects)c.is(t)&&(o=c.value,a=void 0),(c.is(jO)&&!c.value||c.value==r)&&(o=[]);return o.length&&a&&i.set(o,a),o},provide:o=>Dr.from(o)});const s=xe.define(o=>new IO(o,n,r,i,t,e.hoverTime||300));return{active:r,extension:[r,s,qO.of(s),BO]}}function Uu(n,e){let t=n.plugin(Cl);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const jO=W.define(),rc=K.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Fu(n,e){let t=n.plugin(Du),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const Du=xe.fromClass(class{constructor(n){this.input=n.state.facet(ji),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(rc);this.top=new sr(n,!0,e.topContainer),this.bottom=new sr(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(rc);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new sr(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new sr(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(ji);if(t!=this.input){let i=t.filter(a=>a),r=[],s=[],o=[],l=[];for(let a of i){let c=this.specs.indexOf(a),h;c<0?(h=a(n.view),l.push(h)):(h=this.panels[c],h.update&&h.update(n)),r.push(h),(h.top?s:o).push(h)}this.specs=i,this.panels=r,this.top.sync(s),this.bottom.sync(o);for(let a of l)a.dom.classList.add("cm-panel"),a.mount&&a.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>R.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class sr{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=sc(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=sc(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function sc(n){let e=n.nextSibling;return n.remove(),e}const ji=K.define({enables:Du});function VO(n,e){let t,i=new Promise(o=>t=o),r=o=>YO(o,e,t);n.state.field(qs,!1)?n.dispatch({effects:Xu.of(r)}):n.dispatch({effects:W.appendConfig.of(qs.init(()=>[r]))});let s=Lu.of(r);return{close:s,result:i.then(o=>((n.win.queueMicrotask||(a=>n.win.setTimeout(a,10)))(()=>{n.state.field(qs).indexOf(r)>-1&&n.dispatch({effects:s})}),o))}}const qs=Te.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(Xu)?n=[t.value].concat(n):t.is(Lu)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>ji.computeN([n],e=>e.field(n))}),Xu=W.define(),Lu=W.define();function YO(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=he("form"),e.input){let l=he("input",e.input);/^(text|password|number|email|tel|url)$/.test(l.type)&&l.classList.add("cm-textfield"),l.name||(l.name="input"),i.appendChild(he("label",(e.label||"")+": ",l))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(he("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let r=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let l=0;l{c.keyCode==27?(c.preventDefault(),o(null)):c.keyCode==13&&(c.preventDefault(),o(a))}),a.addEventListener("submit",c=>{c.preventDefault(),o(a)})}let s=he("div",i,he("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["×"]));e.class&&(s.className=e.class),s.classList.add("cm-dialog");function o(l){s.contains(s.ownerDocument.activeElement)&&n.focus(),t(l)}return{dom:s,top:e.top,mount:()=>{if(e.focus){let l;typeof e.focus=="string"?l=i.querySelector(e.focus):l=i.querySelector("input")||i.querySelector("button"),l&&"select"in l?l.select():l&&"focus"in l&&l.focus()}}}}class Mt extends Jt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Mt.prototype.elementClass="";Mt.prototype.toDOM=void 0;Mt.prototype.mapMode=De.TrackBefore;Mt.prototype.startSide=Mt.prototype.endSide=-1;Mt.prototype.point=!0;const xr=K.define(),NO=K.define(),GO={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>N.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},An=K.define();function Bu(n){return[qu(),An.of({...GO,...n})]}const oc=K.define({combine:n=>n.some(e=>e)});function qu(n){return[HO]}const HO=xe.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(An).map(e=>new ac(n,e)),this.fixed=!n.state.facet(oc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(oc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=N.iter(this.view.state.facet(xr),this.view.viewport.from),i=[],r=this.gutters.map(s=>new _O(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(s.type)){let o=!0;for(let l of s.type)if(l.type==Xe.Text&&o){Yo(t,i,l.from);for(let a of r)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of r)a.widget(this.view,l)}else if(s.type==Xe.Text){Yo(t,i,s.from);for(let o of r)o.line(this.view,s,i)}else if(s.widget)for(let o of r)o.widget(this.view,s);for(let s of r)s.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(An),t=n.state.facet(An),i=n.docChanged||n.heightChanged||n.viewportChanged||!N.eq(n.startState.facet(xr),n.state.facet(xr),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(n)&&(i=!0);else{i=!0;let r=[];for(let s of t){let o=e.indexOf(s);o<0?r.push(new ac(this.view,s)):(this.gutters[o].update(n),r.push(this.gutters[o]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=r}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>R.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,r=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==fe.LTR?{left:i,right:r}:{right:i,left:r}})});function lc(n){return Array.isArray(n)?n:[n]}function Yo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class _O{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=N.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:r}=this,s=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==r.elements.length){let l=new Iu(e,o,s,i);r.elements.push(l),r.dom.appendChild(l.dom)}else r.elements[this.i].update(e,o,s,i);this.height=t.bottom,this.i++}line(e,t,i){let r=[];Yo(this.cursor,r,t.from),i.length&&(r=r.concat(i));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let o=this.gutter;r.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),r=i?[i]:null;for(let s of e.state.facet(NO)){let o=s(e,t.widget,t);o&&(r||(r=[])).push(o)}r&&this.addElement(e,t,r)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class ac{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,r=>{let s=r.target,o;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let a=s.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=r.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,r)&&r.preventDefault()});this.markers=lc(t.markers(e)),t.initialSpacer&&(this.spacer=new Iu(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=lc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let i=e.view.viewport;return!N.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class Iu{constructor(e,t,i,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,r)}update(e,t,i,r){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),JO(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let i="cm-gutterElement",r=this.dom.firstChild;for(let s=0,o=0;;){let l=o,a=ss(l,a,c)||o(l,a,c):o}return i}})}});class Is extends Mt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function zs(n,e){return n.state.facet($i).formatNumber(e,n.state)}const ig=An.compute([$i],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(eg)},lineMarker(e,t,i){return i.some(r=>r.toDOM)?null:new Is(zs(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let r of e.state.facet(tg)){let s=r(e,t,i);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet($i)!=e.state.facet($i),initialSpacer(e){return new Is(zs(e,cc(e.state.doc.lines)))},updateSpacer(e,t){let i=zs(t.view,cc(t.view.state.doc.lines));return i==e.number?e:new Is(i)},domEventHandlers:n.facet($i).domEventHandlers,side:"before"}));function ng(n={}){return[$i.of(n),qu(),ig]}function cc(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.head).from;r>t&&(t=r,e.push(rg.range(r)))}return N.of(e)});function og(){return sg}const zu=1024;let lg=0;class Ws{constructor(e,t){this.from=e,this.to=t}}class H{constructor(e={}){this.id=lg++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=et.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}H.closedBy=new H({deserialize:n=>n.split(" ")});H.openedBy=new H({deserialize:n=>n.split(" ")});H.group=new H({deserialize:n=>n.split(" ")});H.isolate=new H({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});H.contextHash=new H({perNode:!0});H.lookAhead=new H({perNode:!0});H.mounted=new H({perNode:!0});class bn{constructor(e,t,i,r=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=r}static get(e){return e&&e.props&&e.props[H.mounted.id]}}const ag=Object.create(null);class et{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):ag,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new et(e.name||"",t,e.id,i);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(H.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(" "))t[r]=e[i];return i=>{for(let r=i.prop(H.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?i.name:r[s]];if(o)return o}}}}et.none=new et("",Object.create(null),0,8);class Tl{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|be.IncludeAnonymous);;){let c=!1;if(a.from<=s&&a.to>=r&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;c=!0}for(;c&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;c=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Kl(et.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new ke(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new ke(et.none,t,i,r)))}static build(e){return fg(e)}}ke.empty=new ke(et.none,[],[],0);class $l{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new $l(this.buffer,this.index)}}class ni{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return et.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Pn(n,e,t,i){for(var r;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=c;e+=t){let h=l[e],u=a[e]+o.from,f;if(!(!(s&be.EnterBracketed&&h instanceof ke&&(f=bn.get(h))&&!f.overlay&&f.bracketed&&i>=u&&i<=u+h.length)&&!Wu(r,i,u,u+h.length))){if(h instanceof ni){if(s&be.ExcludeBuffers)continue;let d=h.findChild(0,h.buffer.length,t,i-u,r);if(d>-1)return new Tt(new cg(o,h,e,u),null,d)}else if(s&be.IncludeAnonymous||!h.type.isAnonymous||Rl(h)){let d;if(!(s&be.IgnoreMounts)&&(d=bn.get(h))&&!d.overlay)return new Je(d.tree,u,e,o);let p=new Je(h,u,e,o);return s&be.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?h.children.length-1:0,t,i,r,s)}}}if(s&be.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let r;if(!(i&be.IgnoreOverlays)&&(r=bn.get(this._tree))&&r.overlay){let s=e-this.from,o=i&be.EnterBracketed&&r.bracketed;for(let{from:l,to:a}of r.overlay)if((t>0||o?l<=s:l=s:a>s))return new Je(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function uc(n,e,t,i){let r=n.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(let o=!1;!o;)if(o=r.type.is(t),!r.nextSibling())return s}for(;;){if(i!=null&&r.type.is(i))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return i==null?s:[]}}function No(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class cg{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}}class Tt extends ju{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new Tt(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&be.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new Tt(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,s=i.buffer[this.index+3];if(s>r){let o=i.buffer[this.index+1];e.push(i.slice(r,s,o)),t.push(0)}return new ke(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function Vu(n){if(!n.length)return null;let e=0,t=n[0];for(let s=1;st.from||o.to=e){let l=new Je(o.tree,o.overlay[0].from+s.from,-1,s);(r||(r=[i])).push(Pn(l,e,t,!1))}}return r?Vu(r):i}class Go{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~be.EnterBracketed,e instanceof Je)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof Je?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&be.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&be.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&be.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,o=e<0?-1:i._tree.children.length;s!=o;s+=e){let l=i._tree.children[s];if(this.mode&be.IncludeAnonymous||l instanceof ni||!l.type.isAnonymous||Rl(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,i=s+1;break e}r=this.stack[--s]}for(let r=i;r=0;s--){if(s<0)return No(this._tree,e,r);let o=i[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}}function Rl(n){return n.children.some(e=>e instanceof ni||!e.type.isAnonymous||Rl(e))}function fg(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=zu,reused:s=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new $l(t,t.length):t,a=i.types,c=0,h=0;function u(k,S,v,U,F,j){let{id:E,start:M,end:Y,size:Q}=l,D=h,P=c;if(Q<0)if(l.next(),Q==-1){let q=s[E];v.push(q),U.push(M-k);return}else if(Q==-3){c=E;return}else if(Q==-4){h=E;return}else throw new RangeError(`Unrecognized record size: ${Q}`);let V=a[E],le,J,ee=M-k;if(Y-M<=r&&(J=O(l.pos-S,F))){let q=new Uint16Array(J.size-J.skip),G=l.pos-J.size,ce=q.length;for(;l.pos>G;)ce=y(J.start,q,ce);le=new ni(q,Y-J.start,i),ee=J.start-k}else{let q=l.pos-Q;l.next();let G=[],ce=[],I=E>=o?E:-1,te=0,se=Y;for(;l.pos>q;)I>=0&&l.id==I&&l.size>=0?(l.end<=se-r&&(p(G,ce,M,te,l.end,se,I,D,P),te=G.length,se=l.end),l.next()):j>2500?f(M,q,G,ce):u(M,q,G,ce,I,j+1);if(I>=0&&te>0&&te-1&&te>0){let Me=d(V,P);le=Kl(V,G,ce,0,G.length,0,Y-M,Me,Me)}else le=m(V,G,ce,Y-M,D-Y,P)}v.push(le),U.push(ee)}function f(k,S,v,U){let F=[],j=0,E=-1;for(;l.pos>S;){let{id:M,start:Y,end:Q,size:D}=l;if(D>4)l.next();else{if(E>-1&&Y=0;Q-=3)M[D++]=F[Q],M[D++]=F[Q+1]-Y,M[D++]=F[Q+2]-Y,M[D++]=D;v.push(new ni(M,F[2]-Y,i)),U.push(Y-k)}}function d(k,S){return(v,U,F)=>{let j=0,E=v.length-1,M,Y;if(E>=0&&(M=v[E])instanceof ke){if(!E&&M.type==k&&M.length==F)return M;(Y=M.prop(H.lookAhead))&&(j=U[E]+M.length+Y)}return m(k,v,U,F,j,S)}}function p(k,S,v,U,F,j,E,M,Y){let Q=[],D=[];for(;k.length>U;)Q.push(k.pop()),D.push(S.pop()+v-F);k.push(m(i.types[E],Q,D,j-F,M-j,Y)),S.push(F-v)}function m(k,S,v,U,F,j,E){if(j){let M=[H.contextHash,j];E=E?[M].concat(E):[M]}if(F>25){let M=[H.lookAhead,F];E=E?[M].concat(E):[M]}return new ke(k,S,v,U,E)}function O(k,S){let v=l.fork(),U=0,F=0,j=0,E=v.end-r,M={size:0,start:0,skip:0};e:for(let Y=v.pos-k;v.pos>Y;){let Q=v.size;if(v.id==S&&Q>=0){M.size=U,M.start=F,M.skip=j,j+=4,U+=4,v.next();continue}let D=v.pos-Q;if(Q<0||D=o?4:0,V=v.start;for(v.next();v.pos>D;){if(v.size<0)if(v.size==-3||v.size==-4)P+=4;else break e;else v.id>=o&&(P+=4);v.next()}F=V,U+=Q,j+=P}return(S<0||U==k)&&(M.size=U,M.start=F,M.skip=j),M.size>4?M:void 0}function y(k,S,v){let{id:U,start:F,end:j,size:E}=l;if(l.next(),E>=0&&U4){let Y=l.pos-(E-4);for(;l.pos>Y;)v=y(k,S,v)}S[--v]=M,S[--v]=j-k,S[--v]=F-k,S[--v]=U}else E==-3?c=U:E==-4&&(h=U);return v}let b=[],x=[];for(;l.pos>0;)u(n.start||0,n.bufferStart||0,b,x,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:b.length?x[0]+b[0].length:0;return new ke(a[n.topID],b.reverse(),x.reverse(),C)}const fc=new WeakMap;function wr(n,e){if(!n.isAnonymous||e instanceof ni||e.type!=n)return 1;let t=fc.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ke)){t=1;break}t+=wr(n,i)}fc.set(e,t)}return t}function Kl(n,e,t,i,r,s,o,l,a){let c=0;for(let p=i;p=h)break;S+=v}if(x==C+1){if(S>h){let v=p[C];d(v.children,v.positions,0,v.children.length,m[C]+b);continue}u.push(p[C])}else{let v=m[x-1]+p[x-1].length-k;u.push(Kl(n,p,m,C,x,k,v,null,a))}f.push(k+b-s)}}return d(e,t,i,r,0),(l||a)(u,f,o)}class dg{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let r=this.map.get(e);r||this.map.set(e,r=new Map),r.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Je&&this.map.set(e.tree,t)}get(e){return e instanceof Tt?this.getBuffer(e.context.buffer,e.index):e instanceof Je?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class gi{constructor(e,t,i,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new gi(0,e.length,e,0,!1,i)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let l=0,a=0,c=0;;l++){let h=l=i)for(;o&&o.from=f.from||u<=f.to||c){let d=Math.max(f.from,a)-c,p=Math.min(f.to,u)-c;f=d>=p?null:new gi(d,p,f.tree,f.offset+c,l>0,!!h)}if(f&&r.push(f),o.to>u)break;o=snew Ws(r.from,r.to)):[new Ws(0,0)]:[new Ws(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let s=r.advance();if(s)return s}}}class pg{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new H({perNode:!0});let mg=0;class at{constructor(e,t,i,r){this.name=e,this.set=t,this.base=i,this.modified=r,this.id=mg++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof at&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let r=new at(i,[],null,[]);if(r.set.push(r),t)for(let s of t.set)r.set.push(s);return r}static defineModifier(e){let t=new Xr(e);return i=>i.modified.indexOf(t)>-1?i:Xr.get(i.base||i,i.modified.concat(t).sort((r,s)=>r.id-s.id))}}let Og=0;class Xr{constructor(e){this.name=e,this.instances=[],this.id=Og++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&gg(t,l.modified));if(i)return i;let r=[],s=new at(e.name,r,e,t);for(let l of t)l.instances.push(s);let o=yg(t);for(let l of e.set)if(!l.modified.length)for(let a of o)r.push(Xr.get(l,a));return s}}function gg(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function yg(n){let e=[[]];for(let t=0;ti.length-t.length)}function Nu(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let r of t.split(" "))if(r){let s=[],o=2,l=r;for(let u=0;;){if(l=="..."&&u>0&&u+3==r.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!f)throw new RangeError("Invalid path: "+r);if(s.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),u+=f[0].length,u==r.length)break;let d=r[u++];if(u==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);l=r.slice(u)}let a=s.length-1,c=s[a];if(!c)throw new RangeError("Invalid path: "+r);let h=new Cn(i,o,a>0?s.slice(0,a):null);e[c]=h.sort(e[c])}}return Gu.add(e)}const Gu=new H({combine(n,e){let t,i,r;for(;n||e;){if(!n||e&&n.depth>=e.depth?(r=e,e=e.next):(r=n,n=n.next),t&&t.mode==r.mode&&!r.context&&!t.context)continue;let s=new Cn(r.tags,r.mode,r.context);t?t.next=s:i=s,t=s}return i}});class Cn{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=r;for(let l of s)for(let a of l.set){let c=t[a.id];if(c){o=o?o+" "+c:c;break}}return o},scope:i}}function Ag(n,e){let t=null;for(let i of n){let r=i.style(e);r&&(t=t?t+" "+r:r)}return t}function bg(n,e,t,i=0,r=n.length){let s=new Sg(i,Array.isArray(e)?e:[e],t);s.highlightRange(n.cursor(),i,r,"",s.highlighters),s.flush(r)}class Sg{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,s){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let c=r,h=xg(e)||Cn.empty,u=Ag(s,h.tags);if(u&&(c&&(c+=" "),c+=u,h.mode==1&&(r+=(r?" ":"")+u)),this.startSpan(Math.max(t,l),c),h.opaque)return;let f=e.tree&&e.tree.prop(H.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+l,1),p=this.highlighters.filter(O=>!O.scope||O.scope(f.tree.type)),m=e.firstChild();for(let O=0,y=l;;O++){let b=O=x||!e.nextSibling())););if(!b||x>i)break;y=b.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,b.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),c))}m&&e.parent()}else if(e.firstChild()){f&&(r="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,s),this.startSpan(Math.min(i,e.to),c)}while(e.nextSibling());e.parent()}}}function xg(n){let e=n.type.prop(Gu);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const T=at.define,lr=T(),jt=T(),dc=T(jt),pc=T(jt),Vt=T(),ar=T(Vt),js=T(Vt),vt=T(),ai=T(vt),xt=T(),wt=T(),Ho=T(),on=T(Ho),cr=T(),g={comment:lr,lineComment:T(lr),blockComment:T(lr),docComment:T(lr),name:jt,variableName:T(jt),typeName:dc,tagName:T(dc),propertyName:pc,attributeName:T(pc),className:T(jt),labelName:T(jt),namespace:T(jt),macroName:T(jt),literal:Vt,string:ar,docString:T(ar),character:T(ar),attributeValue:T(ar),number:js,integer:T(js),float:T(js),bool:T(Vt),regexp:T(Vt),escape:T(Vt),color:T(Vt),url:T(Vt),keyword:xt,self:T(xt),null:T(xt),atom:T(xt),unit:T(xt),modifier:T(xt),operatorKeyword:T(xt),controlKeyword:T(xt),definitionKeyword:T(xt),moduleKeyword:T(xt),operator:wt,derefOperator:T(wt),arithmeticOperator:T(wt),logicOperator:T(wt),bitwiseOperator:T(wt),compareOperator:T(wt),updateOperator:T(wt),definitionOperator:T(wt),typeOperator:T(wt),controlOperator:T(wt),punctuation:Ho,separator:T(Ho),bracket:on,angleBracket:T(on),squareBracket:T(on),paren:T(on),brace:T(on),content:vt,heading:ai,heading1:T(ai),heading2:T(ai),heading3:T(ai),heading4:T(ai),heading5:T(ai),heading6:T(ai),contentSeparator:T(vt),list:T(vt),quote:T(vt),emphasis:T(vt),strong:T(vt),link:T(vt),monospace:T(vt),strikethrough:T(vt),inserted:T(),deleted:T(),changed:T(),invalid:T(),meta:cr,documentMeta:T(cr),annotation:T(cr),processingInstruction:T(cr),definition:at.defineModifier("definition"),constant:at.defineModifier("constant"),function:at.defineModifier("function"),standard:at.defineModifier("standard"),local:at.defineModifier("local"),special:at.defineModifier("special")};for(let n in g){let e=g[n];e instanceof at&&(e.name=n)}Hu([{tag:g.link,class:"tok-link"},{tag:g.heading,class:"tok-heading"},{tag:g.emphasis,class:"tok-emphasis"},{tag:g.strong,class:"tok-strong"},{tag:g.keyword,class:"tok-keyword"},{tag:g.atom,class:"tok-atom"},{tag:g.bool,class:"tok-bool"},{tag:g.url,class:"tok-url"},{tag:g.labelName,class:"tok-labelName"},{tag:g.inserted,class:"tok-inserted"},{tag:g.deleted,class:"tok-deleted"},{tag:g.literal,class:"tok-literal"},{tag:g.string,class:"tok-string"},{tag:g.number,class:"tok-number"},{tag:[g.regexp,g.escape,g.special(g.string)],class:"tok-string2"},{tag:g.variableName,class:"tok-variableName"},{tag:g.local(g.variableName),class:"tok-variableName tok-local"},{tag:g.definition(g.variableName),class:"tok-variableName tok-definition"},{tag:g.special(g.variableName),class:"tok-variableName2"},{tag:g.definition(g.propertyName),class:"tok-propertyName tok-definition"},{tag:g.typeName,class:"tok-typeName"},{tag:g.namespace,class:"tok-namespace"},{tag:g.className,class:"tok-className"},{tag:g.macroName,class:"tok-macroName"},{tag:g.propertyName,class:"tok-propertyName"},{tag:g.operator,class:"tok-operator"},{tag:g.comment,class:"tok-comment"},{tag:g.meta,class:"tok-meta"},{tag:g.invalid,class:"tok-invalid"},{tag:g.punctuation,class:"tok-punctuation"}]);var Vs;const Ri=new H;function _u(n){return K.define({combine:n?e=>e.concat(n):void 0})}const Zl=new H;class mt{constructor(e,t,i=[],r=""){this.data=e,this.name=r,_.prototype.hasOwnProperty("tree")||Object.defineProperty(_.prototype,"tree",{get(){return Ce(this)}}),this.parser=t,this.extension=[ri.of(this),_.languageData.of((s,o,l)=>{let a=mc(s,o,l),c=a.type.prop(Ri);if(!c)return[];let h=s.facet(c),u=a.type.prop(Zl);if(u){let f=a.resolve(o-a.from,l);for(let d of u)if(d.test(f,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(i)}isActiveAt(e,t,i=-1){return mc(e,t,i).type.prop(Ri)==this.data}findRegions(e){let t=e.facet(ri);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(s,o)=>{if(s.prop(Ri)==this.data){i.push({from:o,to:o+s.length});return}let l=s.prop(H.mounted);if(l){if(l.tree.prop(Ri)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+s.length});return}else if(l.overlay){let a=i.length;if(r(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;ai.isTop?t:void 0)]}),e.name)}configure(e,t){return new Lr(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Ce(n){let e=n.field(mt.state,!1);return e?e.tree:ke.empty}class wg{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let ln=null;class Br{constructor(e,t,i=[],r,s,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new Br(e,t,[],ke.empty,0,i,[],null)}startParse(){return this.parser.startParse(new wg(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ke.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(gi.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=ln;ln=this;try{return e()}finally{ln=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=Oc(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:s,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((c,h,u,f)=>a.push({fromA:c,toA:h,fromB:u,toB:f})),i=gi.applyChanges(i,a),r=ke.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let c of this.skipped){let h=e.mapPos(c.from,1),u=e.mapPos(c.to,-1);he.from&&(this.fragments=Oc(this.fragments,r,s),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Yu{createParse(t,i,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let a=ln;if(a){for(let c of r)a.tempSkipped.push(c);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new ke(et.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return ln}}function Oc(n,e,t){return gi.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class Vi{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new Vi(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Br.create(e.facet(ri).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new Vi(i)}}mt.state=Te.define({create:Vi.init,update(n,e){for(let t of e.effects)if(t.is(mt.setState))return t.value;return e.startState.facet(ri)!=e.state.facet(ri)?Vi.init(e.state):n.apply(e)}});let Ju=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Ju=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Ys=typeof navigator<"u"&&(!((Vs=navigator.scheduling)===null||Vs===void 0)&&Vs.isInputPending)?()=>navigator.scheduling.isInputPending():null,vg=xe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(mt.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(mt.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Ju(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,a=s.context.work(()=>Ys&&Ys()||Date.now()>o,r+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:mt.setState.of(new Vi(s.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>We(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),ri=K.define({combine(n){return n.length?n[0]:null},enables:n=>[mt.state,vg,R.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class kg{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const Qg=K.define(),ys=K.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function qr(n){let e=n.facet(ys);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Tn(n,e){let t="",i=n.tabSize,r=n.facet(ys)[0];if(r==" "){for(;e>=i;)t+=" ",e-=i;r=" "}for(let s=0;s=e?Pg(n,t,e):null}class As{constructor(e,t={}){this.state=e,this.options=t,this.unit=qr(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=i.from&&r<=i.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=o-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return _i(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const ef=new H;function Pg(n,e,t){let i=e.resolveStack(t),r=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(r!=i.node){let s=[];for(let o=r;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)s.push(o);for(let o=s.length-1;o>=0;o--)i={node:s[o],next:i}}return tf(i,n,t)}function tf(n,e,t){for(let i=n;i;i=i.next){let r=Tg(i.node);if(r)return r(El.create(e,t,i))}return 0}function Cg(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Tg(n){let e=n.type.prop(ef);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(H.closedBy))){let r=n.lastChild,s=r&&i.indexOf(r.name)>-1;return o=>nf(o,!0,1,void 0,s&&!Cg(o)?r.from:void 0)}return n.parent==null?$g:null}function $g(){return 0}class El extends As{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new El(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(Rg(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return tf(this.context.next,this.base,this.pos)}}function Rg(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function Kg(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=n.options.simulateBreak,s=n.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let c=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+c}}l=a.to}}function Zg({closing:n,align:e=!0,units:t=1}){return i=>nf(i,e,t,n)}function nf(n,e,t,i,r){let s=n.textAfter,o=s.match(/^\s*/)[0].length,l=i&&s.slice(o,o+i.length)==i||r==n.pos+o,a=e?Kg(n):null;return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const Mg=n=>n.baseIndent;function Ns({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}const Eg=200;function Ug(){return _.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,r=t.lineAt(i);if(i>r.from+Eg)return n;let s=t.sliceString(r.from,i);if(!e.some(c=>c.test(s)))return n;let{state:o}=n,l=-1,a=[];for(let{head:c}of o.selection.ranges){let h=o.doc.lineAt(c);if(h.from==l)continue;l=h.from;let u=Ml(o,h.from);if(u==null)continue;let f=/^\s*/.exec(h.text)[0],d=Tn(o,u);f!=d&&a.push({from:h.from,to:h.from+f.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}const Fg=K.define(),rf=new H;function Dg(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(s&&l.from=e&&c.to>t&&(s=c)}}return s}function Lg(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function Ir(n,e,t){for(let i of n.facet(Fg)){let r=i(n,e,t);if(r)return r}return Xg(n,e,t)}function sf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const bs=W.define({map:sf}),Xn=W.define({map:sf});function of(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const xi=Te.define({create(){return B.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((i,r)=>n=gc(n,i,r)),n=n.map(e.changes);let t=[];for(let i of e.effects)i.is(bs)&&!Bg(n,i.value.from,i.value.to)?t.push(i.value):i.is(Xn)&&(n=n.update({filter:(r,s)=>i.value.from!=r||i.value.to!=s,filterFrom:i.value.from,filterTo:i.value.to}));if(t.length){let{preparePlaceholder:i}=e.state.facet(cf),r=t.map(s=>(i?B.replace({widget:new Yg(i(e.state,s))}):yc).range(s.from,s.to));n=n.update({add:r})}return e.selection&&(n=gc(n,e.selection.main.head)),n},provide:n=>R.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,r)=>{t.push(i,r)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{re&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(r,s)=>r>=t||s<=e}):n}function zr(n,e,t){var i;let r=null;return(i=n.field(xi,!1))===null||i===void 0||i.between(e,t,(s,o)=>{(!r||r.from>s)&&(r={from:s,to:o})}),r}function Bg(n,e,t){let i=!1;return n.between(e,e,(r,s)=>{r==e&&s==t&&(i=!0)}),i}function lf(n,e){return n.field(xi,!1)?e:e.concat(W.appendConfig.of(hf()))}const qg=n=>{for(let e of of(n)){let t=Ir(n.state,e.from,e.to);if(t)return n.dispatch({effects:lf(n.state,[bs.of(t),af(n,t)])}),!0}return!1},Ig=n=>{if(!n.state.field(xi,!1))return!1;let e=[];for(let t of of(n)){let i=zr(n.state,t.from,t.to);i&&e.push(Xn.of(i),af(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function af(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,r=n.state.doc.lineAt(e.to).number;return R.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${r}.`)}const zg=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(xi,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,r)=>{t.push(Xn.of({from:i,to:r}))}),n.dispatch({effects:t}),!0},jg=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:qg},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:Ig},{key:"Ctrl-Alt-[",run:zg},{key:"Ctrl-Alt-]",run:Wg}],Vg={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},cf=K.define({combine(n){return yt(n,Vg)}});function hf(n){return[xi,Hg]}function uf(n,e){let{state:t}=n,i=t.facet(cf),r=o=>{let l=n.lineBlockAt(n.posAtDOM(o.target)),a=zr(n.state,l.from,l.to);a&&n.dispatch({effects:Xn.of(a)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,r,e);let s=document.createElement("span");return s.textContent=i.placeholderText,s.setAttribute("aria-label",t.phrase("folded code")),s.title=t.phrase("unfold"),s.className="cm-foldPlaceholder",s.onclick=r,s}const yc=B.replace({widget:new class extends Ut{toDOM(n){return uf(n,null)}}});class Yg extends Ut{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return uf(e,this.value)}}const Ng={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Gs extends Mt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function Gg(n={}){let e={...Ng,...n},t=new Gs(e,!0),i=new Gs(e,!1),r=xe.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(ri)!=o.state.facet(ri)||o.startState.field(xi,!1)!=o.state.field(xi,!1)||Ce(o.startState)!=Ce(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let l=new Bt;for(let a of o.viewportLineBlocks){let c=zr(o.state,a.from,a.to)?i:Ir(o.state,a.from,a.to)?t:null;c&&l.add(a.from,a.from,c)}return l.finish()}}),{domEventHandlers:s}=e;return[r,Bu({class:"cm-foldGutter",markers(o){var l;return((l=o.plugin(r))===null||l===void 0?void 0:l.markers)||N.empty},initialSpacer(){return new Gs(e,!1)},domEventHandlers:{...s,click:(o,l,a)=>{if(s.click&&s.click(o,l,a))return!0;let c=zr(o.state,l.from,l.to);if(c)return o.dispatch({effects:Xn.of(c)}),!0;let h=Ir(o.state,l.from,l.to);return h?(o.dispatch({effects:bs.of(h)}),!0):!1}}}),hf()]}const Hg=R.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class Ln{constructor(e,t){this.specs=e;let i;function r(l){let a=ei.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const s=typeof t.all=="string"?t.all:t.all?r(t.all):void 0,o=t.scope;this.scope=o instanceof mt?l=>l.prop(Ri)==o.data:o?l=>l==o:void 0,this.style=Hu(e.map(l=>({tag:l.tag,class:l.class||r(Object.assign({},l,{tag:null}))})),{all:s}).style,this.module=i?new ei(i):null,this.themeType=t.themeType}static define(e,t){return new Ln(e,t||{})}}const _o=K.define(),_g=K.define({combine(n){return n.length?[n[0]]:null}});function Hs(n){let e=n.facet(_o);return e.length?e:n.facet(_g)}function Jg(n,e){let t=[t0],i;return n instanceof Ln&&(n.module&&t.push(R.styleModule.of(n.module)),i=n.themeType),i?t.push(_o.computeN([R.darkTheme],r=>r.facet(R.darkTheme)==(i=="dark")?[n]:[])):t.push(_o.of(n)),t}class e0{constructor(e){this.markCache=Object.create(null),this.tree=Ce(e.state),this.decorations=this.buildDeco(e,Hs(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Ce(e.state),i=Hs(e.state),r=i!=Hs(e.startState),{viewport:s}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return B.none;let i=new Bt;for(let{from:r,to:s}of e.visibleRanges)bg(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=B.mark({class:a})))},r,s);return i.finish()}}const t0=si.high(xe.fromClass(e0,{decorations:n=>n.decorations})),i0=Ln.define([{tag:g.meta,color:"#404740"},{tag:g.link,textDecoration:"underline"},{tag:g.heading,textDecoration:"underline",fontWeight:"bold"},{tag:g.emphasis,fontStyle:"italic"},{tag:g.strong,fontWeight:"bold"},{tag:g.strikethrough,textDecoration:"line-through"},{tag:g.keyword,color:"#708"},{tag:[g.atom,g.bool,g.url,g.contentSeparator,g.labelName],color:"#219"},{tag:[g.literal,g.inserted],color:"#164"},{tag:[g.string,g.deleted],color:"#a11"},{tag:[g.regexp,g.escape,g.special(g.string)],color:"#e40"},{tag:g.definition(g.variableName),color:"#00f"},{tag:g.local(g.variableName),color:"#30a"},{tag:[g.typeName,g.namespace],color:"#085"},{tag:g.className,color:"#167"},{tag:[g.special(g.variableName),g.macroName],color:"#256"},{tag:g.definition(g.propertyName),color:"#00c"},{tag:g.comment,color:"#940"},{tag:g.invalid,color:"#f00"}]),n0=R.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ff=1e4,df="()[]{}",pf=K.define({combine(n){return yt(n,{afterCursor:!0,brackets:df,maxScanDistance:ff,renderMatch:o0})}}),r0=B.mark({class:"cm-matchingBracket"}),s0=B.mark({class:"cm-nonmatchingBracket"});function o0(n){let e=[],t=n.matched?r0:s0;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Ac(n){let e=[],t=n.facet(pf);for(let i of n.selection.ranges){if(!i.empty)continue;let r=$t(n,i.head,-1,t)||i.head>0&&$t(n,i.head-1,1,t)||t.afterCursor&&($t(n,i.head,1,t)||i.headn.decorations}),a0=[l0,n0];function c0(n={}){return[pf.of(n),a0]}const h0=new H;function Jo(n,e,t){let i=n.prop(e<0?H.openedBy:H.closedBy);if(i)return i;if(n.name.length==1){let r=t.indexOf(n.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function el(n){let e=n.type.prop(h0);return e?e(n.node):n}function $t(n,e,t,i={}){let r=i.maxScanDistance||ff,s=i.brackets||df,o=Ce(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let c=Jo(a.type,t,s);if(c&&a.from0?e>=h.from&&eh.from&&e<=h.to))return u0(n,e,t,a,h,c,s)}}return f0(n,e,t,o,l.type,r,s)}function u0(n,e,t,i,r,s,o){let l=i.parent,a={from:r.from,to:r.to},c=0,h=l?.cursor();if(h&&(t<0?h.childBefore(i.from):h.childAfter(i.to)))do if(t<0?h.to<=i.from:h.from>=i.to){if(c==0&&s.indexOf(h.type.name)>-1&&h.from0)return null;let c={from:t<0?e-1:e,to:t>0?e+1:e},h=n.doc.iterRange(e,t>0?n.doc.length:0),u=0;for(let f=0;!h.next().done&&f<=s;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,O=t>0?d.length:-1;m!=O;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=r))if(y%2==0==t>0)u++;else{if(u==1)return{start:c,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};u--}}t>0&&(f+=d.length)}return h.done?{start:c,matched:!1}:null}const d0=Object.create(null),bc=[et.none],Sc=[],xc=Object.create(null),p0=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])p0[n]=m0(d0,e);function _s(n,e){Sc.indexOf(n)>-1||(Sc.push(n),console.warn(e))}function m0(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let c of l.split(".")){let h=n[c]||g[c];h?typeof h=="function"?a.length?a=a.map(h):_s(c,`Modifier ${c} used at start of tag`):a.length?_s(c,`Tag ${c} used as modifier`):a=Array.isArray(h)?h:[h]:_s(c,`Unknown highlighting tag ${c}`)}for(let c of a)t.push(c)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),r=i+" "+t.map(l=>l.id),s=xc[r];if(s)return s.id;let o=xc[r]=et.define({id:bc.length,name:i,props:[Nu({[i]:t})]});return bc.push(o),o.id}fe.RTL,fe.LTR;const O0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Fl(n.state,t.from);return i.line?g0(n):i.block?A0(n):!1};function Ul(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=n(e,t);return r?(i(t.update(r)),!0):!1}}const g0=Ul(x0,0),y0=Ul(mf,0),A0=Ul((n,e)=>mf(n,e,S0(e)),0);function Fl(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const an=50;function b0(n,{open:e,close:t},i,r){let s=n.sliceDoc(i-an,i),o=n.sliceDoc(r,r+an),l=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(o)[0].length,c=s.length-l;if(s.slice(c-e.length,c)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:r+a,margin:a&&1}};let h,u;r-i<=2*an?h=u=n.sliceDoc(i,r):(h=n.sliceDoc(i,i+an),u=n.sliceDoc(r-an,r));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(u)[0].length,p=u.length-d-t.length;return h.slice(f,f+e.length)==e&&u.slice(p,p+t.length)==t?{open:{pos:i+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(u.charAt(p-1))?1:0}}:null}function S0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),r=t.to<=i.to?i:n.doc.lineAt(t.to);r.from>i.from&&r.from==t.to&&(r=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>i.from?e[s].to=r.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:r.to})}return e}function mf(n,e,t=e.selection.ranges){let i=t.map(s=>Fl(e,s.from).block);if(!i.every(s=>s))return null;let r=t.map((s,o)=>b0(e,i[o],s.from,s.to));if(n!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:i[o].open+" "},{from:s.to,insert:" "+i[o].close}]))};if(n!=1&&r.some(s=>s)){let s=[];for(let o=0,l;or&&(s==o||o>u.from)){r=u.from;let f=/^\s*/.exec(u.text)[0].length,d=f==u.length,p=u.text.slice(f,f+c.length)==c?f:-1;fs.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:l,token:a,indent:c,empty:h,single:u}of i)(u||!h)&&s.push({from:l.from+c,insert:a+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let c=o.from+l,h=c+a.length;o.text[h-o.from]==" "&&h++,s.push({from:c,to:h})}return{changes:s}}return null}const tl=zt.define(),vr=zt.define(),w0=K.define(),Of=K.define({combine(n){return yt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}}),Dl=Te.define({create(){return Rt.empty},update(n,e){let t=e.state.facet(Of),i=e.annotation(tl);if(i){let a=_e.fromTransaction(e,i.selection),c=i.side,h=c==0?n.undone:n.done;return a?h=jr(h,h.length,t.minDepth,a):h=Af(h,e.startState.selection),new Rt(c==0?i.rest:h,c==0?h:i.rest)}let r=e.annotation(vr);if((r=="full"||r=="before")&&(n=n.isolate()),e.annotation(Pe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let s=_e.fromTransaction(e),o=e.annotation(Pe.time),l=e.annotation(Pe.userEvent);return s?n=n.addChanges(s,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(r=="full"||r=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new Rt(n.done.map(_e.fromJSON),n.undone.map(_e.fromJSON))}});function v0(n={}){return[Dl,Of.of(n),R.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Xl:e.inputType=="historyRedo"?Wr:null;return i?(e.preventDefault(),i(t)):!1}})]}function Ss(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(Dl,!1);if(!r)return!1;let s=r.pop(n,t,e);return s?(i(s),!0):!1}}const Xl=Ss(0,!1),Wr=Ss(1,!1),k0=Ss(0,!0),Q0=Ss(1,!0);function gf(n){return function(e){let t=e.field(Dl,!1);if(!t)return 0;let i=n==0?t.done:t.undone;return i.length-(i.length&&!i[0].changes?1:0)}}const wc=gf(0),vc=gf(1);class _e{constructor(e,t,i,r,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new _e(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new _e(e.changes&&$e.fromJSON(e.changes),[],e.mapped&&Zt.fromJSON(e.mapped),e.startSelection&&A.fromJSON(e.startSelection),e.selectionsAfter.map(A.fromJSON))}static fromTransaction(e,t){let i=ht;for(let r of e.startState.facet(w0)){let s=r(e);s.length&&(i=i.concat(s))}return!i.length&&e.changes.empty?null:new _e(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ht)}static selection(e){return new _e(void 0,ht,void 0,void 0,e)}}function jr(n,e,t,i){let r=e+1>t+20?e-t-1:0,s=n.slice(r,e);return s.push(i),s}function P0(n,e){let t=[],i=!1;return n.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,l)=>{for(let a=0;a=c&&o<=h&&(i=!0)}}),i}function C0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function yf(n,e){return n.length?e.length?n.concat(e):n:e}const ht=[],T0=200;function Af(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-T0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),jr(n,n.length-1,1e9,t.setSelAfter(i)))}else return[_e.selection([e])]}function $0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Js(n,e){if(!n.length)return n;let t=n.length,i=ht;for(;t;){let r=R0(n[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let s=n.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[_e.selection(i)]:ht}function R0(n,e,t){let i=yf(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):ht,t);if(!n.changes)return _e.selection(i);let r=n.changes.map(e),s=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(s):s;return new _e(r,W.mapEffects(n.effects,e),o,n.startSelection.map(s),i)}const K0=/^(input\.type|delete)($|\.)/;class Rt{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new Rt(this.done,this.undone):this}addChanges(e,t,i,r,s){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||K0.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):xs(t,e))}function Be(n){return n.textDirectionAt(n.state.selection.main.head)==fe.LTR}const Sf=n=>bf(n,!Be(n)),xf=n=>bf(n,Be(n));function wf(n,e){return bt(n,t=>t.empty?n.moveByGroup(t,e):xs(t,e))}const M0=n=>wf(n,!Be(n)),E0=n=>wf(n,Be(n));function U0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function ws(n,e,t){let i=Ce(n).resolveInner(e.head),r=t?H.closedBy:H.openedBy;for(let a=e.head;;){let c=t?i.childAfter(a):i.childBefore(a);if(!c)break;U0(n,c,r)?i=c:a=t?c.to:c.from}let s=i.type.prop(r),o,l;return s&&(o=t?$t(n,i.from,1):$t(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,A.cursor(l,t?-1:1)}const F0=n=>bt(n,e=>ws(n.state,e,!Be(n))),D0=n=>bt(n,e=>ws(n.state,e,Be(n)));function vf(n,e){return bt(n,t=>{if(!t.empty)return xs(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const kf=n=>vf(n,!1),Qf=n=>vf(n,!0);function Pf(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):xs(o,e));if(r.eq(i.selection))return!1;let s;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,c=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomCf(n,!1),il=n=>Cf(n,!0);function oi(n,e,t){let i=n.lineBlockAt(e.head),r=n.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=n.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let s=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;s&&e.head!=i.from+s&&(r=A.cursor(i.from+s))}return r}const X0=n=>bt(n,e=>oi(n,e,!0)),L0=n=>bt(n,e=>oi(n,e,!1)),B0=n=>bt(n,e=>oi(n,e,!Be(n))),q0=n=>bt(n,e=>oi(n,e,Be(n))),I0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).from,1)),z0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).to,-1));function W0(n,e,t){let i=!1,r=Ji(n.selection,s=>{let o=$t(n,s.head,-1)||$t(n,s.head,1)||s.head>0&&$t(n,s.head-1,1)||s.headW0(n,e);function ft(n,e,t){let i=Ji(n.state.selection,r=>{r.undirectional&&r.head>=r.anchor!=e&&(r=A.range(r.head,r.anchor));let s=t(r);return A.range(r.anchor,s.head,s.goalColumn,s.bidiLevel||void 0,s.assoc)});return i.eq(n.state.selection)?!1:(n.dispatch(At(n.state,i)),!0)}function Tf(n,e){return ft(n,e,t=>n.moveByChar(t,e))}const $f=n=>Tf(n,!Be(n)),Rf=n=>Tf(n,Be(n));function Kf(n,e){return ft(n,e,t=>n.moveByGroup(t,e))}const V0=n=>Kf(n,!Be(n)),Y0=n=>Kf(n,Be(n)),N0=n=>{let e=!Be(n);return ft(n,e,t=>ws(n.state,t,e))},G0=n=>{let e=Be(n);return ft(n,e,t=>ws(n.state,t,e))};function Zf(n,e){return ft(n,e,t=>n.moveVertically(t,e))}const Mf=n=>Zf(n,!1),Ef=n=>Zf(n,!0);function Uf(n,e){return ft(n,e,t=>n.moveVertically(t,e,Pf(n).height))}const Qc=n=>Uf(n,!1),Pc=n=>Uf(n,!0),H0=n=>ft(n,!0,e=>oi(n,e,!0)),_0=n=>ft(n,!1,e=>oi(n,e,!1)),J0=n=>{let e=!Be(n);return ft(n,e,t=>oi(n,t,e))},ey=n=>{let e=Be(n);return ft(n,e,t=>oi(n,t,e))},ty=n=>ft(n,!1,e=>A.cursor(n.lineBlockAt(e.head).from)),iy=n=>ft(n,!0,e=>A.cursor(n.lineBlockAt(e.head).to)),Cc=({state:n,dispatch:e})=>(e(At(n,{anchor:0})),!0),Tc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.doc.length})),!0),$c=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:0})),!0),Rc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),ny=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),ry=({state:n,dispatch:e})=>{let t=vs(n).map(({from:i,to:r})=>A.range(i,Math.min(r+1,n.doc.length)));return e(n.update({selection:A.create(t),userEvent:"select"})),!0},sy=({state:n,dispatch:e})=>{let t=Ji(n.selection,i=>{let r=Ce(n),s=r.resolveStack(i.from,1);if(i.empty){let o=r.resolveStack(i.from,-1);o.node.from>=s.node.from&&o.node.to<=s.node.to&&(s=o)}for(let o=s;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return A.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(At(n,t)),!0)};function Ff(n,e){let{state:t}=n,i=t.selection,r=t.selection.ranges.slice();for(let s of t.selection.ranges){let o=t.doc.lineAt(s.head);if(e?o.to0)for(let l=s;;){let a=n.moveVertically(l,e);if(a.heado.to){r.some(c=>c.head==a.head)||r.push(a);break}else{if(a.head==l.head)break;l=a}}}return r.length==i.ranges.length?!1:(n.dispatch(At(t,A.create(r,r.length-1))),!0)}const oy=n=>Ff(n,!1),ly=n=>Ff(n,!0),ay=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=A.create([t.main]):t.main.empty||(i=A.create([A.cursor(t.main.head)])),i?(e(At(n,i)),!0):!1};function Bn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,r=i.changeByRange(s=>{let{from:o,to:l}=s;if(o==l){let a=e(s);ao&&(t="delete.forward",a=hr(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=hr(n,o,!1),l=hr(n,l,!0);return o==l?{range:s}:{changes:{from:o,to:l},range:A.cursor(o,or(n)))i.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}const Df=(n,e,t)=>Bn(n,i=>{let r=i.from,{state:s}=n,o=s.doc.lineAt(r),l,a;if(t&&!e&&r>o.from&&rDf(n,!1,!0),Xf=n=>Df(n,!0,!1),Lf=(n,e)=>Bn(n,t=>{let i=t.head,{state:r}=n,s=r.doc.lineAt(i),o=r.charCategorizer(i);for(let l=null;;){if(i==(e?s.to:s.from)){i==t.head&&s.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let a=Ze(s.text,i-s.from,e)+s.from,c=s.text.slice(Math.min(i,a)-s.from,Math.max(i,a)-s.from),h=o(c);if(l!=null&&h!=l)break;(c!=" "||i!=t.head)&&(l=h),i=a}return i}),Bf=n=>Lf(n,!1),cy=n=>Lf(n,!0),hy=n=>Bn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headBn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),fy=n=>Bn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:re.of(["",""])},range:A.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},py=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let r=i.from,s=n.doc.lineAt(r),o=r==s.from?r-1:Ze(s.text,r-s.from,!1)+s.from,l=r==s.to?r+1:Ze(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:l,insert:n.doc.slice(r,l).append(n.doc.slice(o,r))},range:A.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function vs(n){let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.from),s=n.doc.lineAt(i.to);if(!i.empty&&i.to==s.from&&(s=n.doc.lineAt(i.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(i)}else e.push({from:r.from,to:s.to,ranges:[i]});t=s.number+1}return e}function qf(n,e,t){if(n.readOnly)return!1;let i=[],r=[];for(let s of vs(n)){if(t?s.to==n.doc.length:s.from==0)continue;let o=n.doc.lineAt(t?s.to+1:s.from-1),l=o.length+1;if(t){i.push({from:s.to,to:o.to},{from:s.from,insert:o.text+n.lineBreak});for(let a of s.ranges)r.push(A.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:s.from},{from:s.to,insert:n.lineBreak+o.text});for(let a of s.ranges)r.push(A.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:A.create(r,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const my=({state:n,dispatch:e})=>qf(n,e,!1),Oy=({state:n,dispatch:e})=>qf(n,e,!0);function If(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of vs(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});let r=n.changes(i);return e(n.update({changes:r,selection:n.selection.map(r,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const gy=({state:n,dispatch:e})=>If(n,e,!1),yy=({state:n,dispatch:e})=>If(n,e,!0),Ay=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(vs(e).map(({from:r,to:s})=>(r>0?r--:s{let s;if(n.lineWrapping){let o=n.lineBlockAt(r.head),l=n.coordsAtPos(r.head,r.assoc||1);l&&(s=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(r,!0,s)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function by(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Ce(n).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),s;return i&&r&&i.to<=e&&r.from>=e&&(s=i.type.prop(H.closedBy))&&s.indexOf(r.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(r.from).from&&!/\S/.test(n.sliceDoc(i.to,r.from))?{from:i.to,to:r.from}:null}const Kc=zf(!1),Sy=zf(!0);function zf(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:s,to:o}=r,l=e.doc.lineAt(s),a=!n&&s==o&&by(e,s);n&&(s=o=(o<=l.to?l:e.doc.lineAt(o)).to);let c=new As(e,{simulateBreak:s,simulateDoubleBreak:!!a}),h=Ml(c,s);for(h==null&&(h=_i(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ol.from&&s{let r=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,r,i),t=l.number),o=l.to+1}let s=n.changes(r);return{changes:r,range:A.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}})}const xy=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new As(n,{overrideIndentation:s=>{let o=t[s];return o??-1}}),r=Ll(n,(s,o,l)=>{let a=Ml(i,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let c=/^\s*/.exec(s.text)[0],h=Tn(n,a);(c!=h||l.fromn.readOnly?!1:(e(n.update(Ll(n,(t,i)=>{i.push({from:t.from,insert:n.facet(ys)})}),{userEvent:"input.indent"})),!0),jf=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Ll(n,(t,i)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=_i(r,n.tabSize),o=0,l=Tn(n,Math.max(0,s-qr(n)));for(;o(n.setTabFocusMode(),!0),vy=[{key:"Ctrl-b",run:Sf,shift:$f,preventDefault:!0},{key:"Ctrl-f",run:xf,shift:Rf},{key:"Ctrl-p",run:kf,shift:Mf},{key:"Ctrl-n",run:Qf,shift:Ef},{key:"Ctrl-a",run:I0,shift:ty},{key:"Ctrl-e",run:z0,shift:iy},{key:"Ctrl-d",run:Xf},{key:"Ctrl-h",run:nl},{key:"Ctrl-k",run:hy},{key:"Ctrl-Alt-h",run:Bf},{key:"Ctrl-o",run:dy},{key:"Ctrl-t",run:py},{key:"Ctrl-v",run:il}],ky=[{key:"ArrowLeft",run:Sf,shift:$f,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:M0,shift:V0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:B0,shift:J0,preventDefault:!0},{key:"ArrowRight",run:xf,shift:Rf,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:E0,shift:Y0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:q0,shift:ey,preventDefault:!0},{key:"ArrowUp",run:kf,shift:Mf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Cc,shift:$c},{mac:"Ctrl-ArrowUp",run:kc,shift:Qc},{key:"ArrowDown",run:Qf,shift:Ef,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Tc,shift:Rc},{mac:"Ctrl-ArrowDown",run:il,shift:Pc},{key:"PageUp",run:kc,shift:Qc},{key:"PageDown",run:il,shift:Pc},{key:"Home",run:L0,shift:_0,preventDefault:!0},{key:"Mod-Home",run:Cc,shift:$c},{key:"End",run:X0,shift:H0,preventDefault:!0},{key:"Mod-End",run:Tc,shift:Rc},{key:"Enter",run:Kc,shift:Kc},{key:"Mod-a",run:ny},{key:"Backspace",run:nl,shift:nl,preventDefault:!0},{key:"Delete",run:Xf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Bf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:cy,preventDefault:!0},{mac:"Mod-Backspace",run:uy,preventDefault:!0},{mac:"Mod-Delete",run:fy,preventDefault:!0}].concat(vy.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Qy=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:F0,shift:N0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:D0,shift:G0},{key:"Alt-ArrowUp",run:my},{key:"Shift-Alt-ArrowUp",run:gy},{key:"Alt-ArrowDown",run:Oy},{key:"Shift-Alt-ArrowDown",run:yy},{key:"Mod-Alt-ArrowUp",run:oy},{key:"Mod-Alt-ArrowDown",run:ly},{key:"Escape",run:ay},{key:"Mod-Enter",run:Sy},{key:"Alt-l",mac:"Ctrl-l",run:ry},{key:"Mod-i",run:sy,preventDefault:!0},{key:"Mod-[",run:jf},{key:"Mod-]",run:Wf},{key:"Mod-Alt-\\",run:xy},{key:"Shift-Mod-k",run:Ay},{key:"Shift-Mod-\\",run:j0},{key:"Mod-/",run:O0},{key:"Alt-A",run:y0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:wy}].concat(ky),Py={key:"Tab",run:Wf,shift:jf};class Vf{constructor(e,t,i,r){this.state=e,this.pos=t,this.explicit=i,this.view=r,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Ce(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),r=t.text.slice(i-t.from,this.pos-t.from),s=r.search(Nf(e,!1));return s<0?null:{from:i+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function Zc(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Cy(n){let e=Object.create(null),t=Object.create(null);for(let{label:r}of n){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,i]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:Cy(e);return r=>{let s=r.matchBefore(i);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}function Ty(n,e){return t=>{for(let i=Ce(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}let Mc=class{constructor(e,t,i,r){this.completion=e,this.source=t,this.match=i,this.score=r}};function yi(n){return n.selection.main.from}function Nf(n,e){var t;let{source:i}=n,r=e&&i[0]!="^",s=i[i.length-1]!="$";return!r&&!s?n:new RegExp(`${r?"^":""}(?:${i})${s?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const Bl=zt.define();function $y(n,e,t,i){let{main:r}=n.selection,s=t-r.from,o=i-r.from;return{...n.changeByRange(l=>{if(l!=r&&t!=i&&n.sliceDoc(l.from+s,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+s,to:i==r.from?l.to:l.from+o,insert:a},range:A.cursor(l.from+s+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ec=new WeakMap;function Ry(n){if(!Array.isArray(n))return n;let e=Ec.get(n);return e||Ec.set(n,e=Yf(n)),e}const Vr=W.define(),$n=W.define();class Ky{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&k<=57||k>=97&&k<=122?2:k>=65&&k<=90?1:0:(S=fl(k))!=S.toLowerCase()?1:S!=S.toUpperCase()?2:0;(!b||v==1&&O||C==0&&v!=0)&&(t[u]==k||i[u]==k&&(f=!0)?o[u++]=b:o.length&&(y=!1)),C=v,b+=Qt(k)}return u==a&&o[0]==0&&y?this.result(-100+(f?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):u==a?this.result(-100+(f?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((r[0]?-700:0)+-200+-1100,r,e)}result(e,t,i){let r=[],s=0;for(let o of t){let l=o+(this.astral?Qt(Ne(i,o)):1);s&&r[s-1]==o?r[s-1]=l:(r[s++]=o,r[s++]=l)}return this.ret(e-i.length,r)}}class Zy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:My,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Uc(e(i),t(i)),optionClass:(e,t)=>i=>Uc(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Uc(n,e){return n?e?n+" "+e:n:e}function My(n,e,t,i,r,s){let o=n.textDirection==fe.RTL,l=o,a=!1,c="top",h,u,f=e.left-r.left,d=r.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&f=m||b>e.top?h=t.bottom-e.top:(c="bottom",h=e.bottom-t.top)}let O=(e.bottom-e.top)/s.offsetHeight,y=(e.right-e.left)/s.offsetWidth;return{style:`${c}: ${h/O}px; max-width: ${u/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}const ql=W.define();function Ey(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(r=>"cm-completionIcon-"+r)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,r,s){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let c=0;ca&&o.appendChild(document.createTextNode(l.slice(a,h)));let f=o.appendChild(document.createElement("span"));f.appendChild(document.createTextNode(l.slice(h,u))),f.className="cm-completionMatchedText",a=u}return at.position-i.position).map(t=>t.render)}function eo(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let r=Math.floor(e/t);return{from:r*t,to:(r+1)*t}}let i=Math.ceil((n-e)/t);return{from:n-i*t,to:n-(i-1)*t}}class Uy{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let r=e.state.field(t),{options:s,selected:o}=r.open,l=e.state.facet(Ke);this.optionContent=Ey(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=eo(s.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:c}=e.state.field(t).open;for(let h=a.target,u;h&&h!=this.dom;h=h.parentNode)if(h.nodeName=="LI"&&(u=/-(\d+)$/.exec(h.id))&&+u[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;h!=null&&(e.dispatch({effects:ql.of(h)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let c=e.state.field(this.stateField,!1);c&&c.tooltip&&e.state.facet(Ke).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:$n.of(null)})}),this.showOptions(s,r.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),r=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=r){let{options:s,selected:o,disabled:l}=i.open;(!r.open||r.open.options!=s)&&(this.range=eo(s.length,o,e.state.facet(Ke).maxRenderedOptions),this.showOptions(s,i.id)),this.updateSel(),l!=((t=r.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ke).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:s}=r;if(!s)return;let o=typeof s=="string"?document.createTextNode(s):s(r);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,r)}).catch(l=>We(this.view.state,l,"completion info")):(this.addInfoPane(o,r),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:r,destroy:s}=e;i.appendChild(r),this.infoDestroy=s||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,r=this.range.from;i;i=i.nextSibling,r++)i.nodeName!="LI"||!i.id?r--:r==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&Dy(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),r=e.getBoundingClientRect(),s=this.space;if(!s){let o=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return r.top>Math.min(s.bottom,t.bottom)-10||r.bottom{o.target==r&&o.preventDefault()});let s=null;for(let o=i.from;oi.from||i.from==0))if(s=f,typeof c!="string"&&c.header)r.appendChild(c.header(c));else{let d=r.appendChild(document.createElement("completion-section"));d.textContent=f}}const h=r.appendChild(document.createElement("li"));h.id=t+"-"+o,h.setAttribute("role","option");let u=this.optionClass(l);u&&(h.className=u);for(let f of this.optionContent){let d=f(l,this.view.state,this.view,a);d&&h.appendChild(d)}}return i.from&&r.classList.add("cm-completionListIncompleteTop"),i.tonew Uy(t,n,e)}function Dy(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),r=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/r)}function Fc(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Xy(n,e){let t=[],i=null,r=null,s=h=>{t.push(h);let{section:u}=h.completion;if(u){i||(i=[]);let f=typeof u=="string"?u:u.name;i.some(d=>d.name==f)||i.push(typeof u=="string"?{name:f}:u)}},o=e.facet(Ke);for(let h of n)if(h.hasResult()){let u=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)s(new Mc(f,h.source,u?u(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),d,p=o.filterStrict?new Zy(f):new Ky(f);for(let m of h.result.options)if(d=p.match(m.label)){let O=m.displayLabel?u?u(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(s(new Mc(m,h.source,O,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:b}=m.section;r||(r=Object.create(null)),r[b]=Math.max(y,r[b]||-1e9)}}}}if(i){let h=Object.create(null),u=0,f=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?r[p.name]-r[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.namef.score-u.score||c(u.completion,f.completion))){let u=h.completion;!a||a.label!=u.label||a.detail!=u.detail||a.type!=null&&u.type!=null&&a.type!=u.type||a.apply!=u.apply||a.boost!=u.boost?l.push(h):Fc(h.completion)>Fc(a)&&(l[l.length-1]=h),a=h.completion}return l}class Ki{constructor(e,t,i,r,s,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=r,this.selected=s,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Ki(this.options,Dc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,r,s,o){if(r&&!o&&e.some(c=>c.isPending))return r.setDisabled();let l=Xy(e,t);if(!l.length)return r&&e.some(c=>c.isPending)?r.setDisabled():null;let a=t.facet(Ke).selectOnOpen?0:-1;if(r&&r.selected!=a&&r.selected!=-1){let c=r.options[r.selected].completion;for(let h=0;hh.hasResult()?Math.min(c,h.from):c,1e8),create:Wy,above:s.aboveCursor},r?r.timestamp:Date.now(),a,!1)}map(e){return new Ki(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Ki(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Yr{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Yr(Iy,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Ke),s=(i.override||t.languageDataAt("autocomplete",yi(t)).map(Ry)).map(a=>(this.active.find(h=>h.source==a)||new ut(a,this.active.some(h=>h.state!=0)?1:0)).update(e,i));s.length==this.active.length&&s.every((a,c)=>a==this.active[c])&&(s=this.active);let o=this.open,l=e.effects.some(a=>a.is(Il));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||s.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!Ly(s,this.active)||l?o=Ki.build(s,t,this.id,o,i,l):o&&o.disabled&&!s.some(a=>a.isPending)&&(o=null),!o&&s.every(a=>!a.isPending)&&s.some(a=>a.hasResult())&&(s=s.map(a=>a.hasResult()?new ut(a.source,0):a));for(let a of e.effects)a.is(ql)&&(o=o&&o.setSelected(a.value,this.id));return s==this.active&&o==this.open?this:new Yr(s,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?By:qy}}function Ly(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const Iy=[];function Gf(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(Bl);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class ut{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Gf(e,t),r=this;(i&8||i&16&&this.touches(e))&&(r=new ut(r.source,0)),i&4&&r.state==0&&(r=new ut(this.source,1)),r=r.updateFor(e,i);for(let s of e.effects)if(s.is(Vr))r=new ut(r.source,1,s.value);else if(s.is($n))r=new ut(r.source,0);else if(s.is(Il))for(let o of s.value)o.source==r.source&&(r=o);return r}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(yi(e.state))}}class Fi extends ut{constructor(e,t,i,r,s,o){super(e,3,t),this.limit=i,this.result=r,this.from=s,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let r=this.result;r.map&&!e.changes.empty&&(r=r.map(r,e.changes));let s=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=yi(e.state);if(l>o||!r||t&2&&(yi(e.startState)==this.from||lt.map(e))}}),Ge=Te.define({create(){return Yr.start()},update(n,e){return n.update(e)},provide:n=>[Os.from(n,e=>e.tooltip),R.contentAttributes.from(n,e=>e.attrs)]});function zl(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(Ge).active.find(r=>r.source==e.source);return i instanceof Fi?(typeof t=="string"?n.dispatch({...$y(n.state,t,i.from,i.to),annotations:Bl.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const Wy=Fy(Ge,zl);function ur(n,e="option"){return t=>{let i=t.state.field(Ge,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+r*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ql.of(l)}),!0}}const jy=n=>{let e=n.state.field(Ge,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(Ge,!1)?(n.dispatch({effects:Vr.of(!0)}),!0):!1,Vy=n=>{let e=n.state.field(Ge,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:$n.of(null)}),!0)};class Yy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Gy=1e3,Hy=xe.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(Ge).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(Ge),t=n.state.facet(Ke);if(!n.selectionSet&&!n.docChanged&&n.startState.field(Ge)==e)return;let i=n.transactions.some(s=>{let o=Gf(s,t);return o&8||(s.selection||s.docChanged)&&!(o&3)});for(let s=0;sNy&&Date.now()-o.time>Gy){for(let l of o.context.abortListeners)try{l()}catch(a){We(this.view.state,a)}o.context.abortListeners=null,this.running.splice(s--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(s=>s.effects.some(o=>o.is(Vr)))&&(this.pendingStart=!0);let r=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(o=>o.active.source==s.source))?setTimeout(()=>this.startUpdate(),r):-1,this.composing!=0)for(let s of n.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(Ge);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=yi(e),i=new Vf(e,t,n.explicit,this.view),r=new Yy(n,i);this.running.push(r),Promise.resolve(n.source(i)).then(s=>{r.context.aborted||(r.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:$n.of(null)}),We(this.view.state,s)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ke),i=this.view.state.field(Ge);for(let r=0;rl.source==s.active.source);if(o&&o.isPending)if(s.done==null){let l=new ut(s.active.source,0);for(let a of s.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:Il.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(Ge,!1);if(e&&e.tooltip&&this.view.state.facet(Ke).closeOnBlur){let t=e.open&&Uu(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:$n.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Vr.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Jy=si.highest(R.domEventHandlers({keydown(n,e){let t=e.state.field(Ge,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],r=t.active.find(o=>o.source==i.source),s=i.completion.commitCharacters||r.result.commitCharacters;return s&&s.indexOf(n.key)>-1&&zl(e,i),!1}})),Hf=R.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class eA{constructor(e,t,i,r){this.field=e,this.line=t,this.from=i,this.to=r}}class Wl{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,De.TrackDel),i=e.mapPos(this.to,1,De.TrackDel);return t==null||i==null?null:new Wl(this.field,t,i)}}class jl{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],r=[t],s=e.doc.lineAt(t),o=/^\s*/.exec(s.text)[0];for(let a of this.lines){if(i.length){let c=o,h=/^\t*/.exec(a)[0].length;for(let u=0;unew Wl(a.field,r[a.line]+a.from,r[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],r=[],s;for(let o of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=s[1]?+s[1]:null,a=s[2]||s[3]||"",c=-1;l===0&&(l=1e9);let h=a.replace(/\\[{}]/g,u=>u[1]);for(let u=0;u=c&&f.field++}for(let u of r)if(u.line==i.length&&u.from>s.index){let f=s[2]?3+(s[1]||"").length:2;u.from-=f,u.to-=f}r.push(new eA(c,i.length,s.index,s.index+h.length)),o=o.slice(0,s.index)+a+o.slice(s.index+s[0].length)}o=o.replace(/\\([{}])/g,(l,a,c)=>{for(let h of r)h.line==i.length&&h.from>c&&(h.from--,h.to--);return a}),i.push(o)}return new jl(i,r)}}let tA=B.widget({widget:new class extends Ut{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),iA=B.mark({class:"cm-snippetField"});class en{constructor(e,t){this.ranges=e,this.active=t,this.deco=B.set(e.map(i=>(i.from==i.to?tA:iA).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let r=i.map(e);if(!r)return null;t.push(r)}return new en(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const qn=W.define({map(n,e){return n&&n.map(e)}}),nA=W.define(),Rn=Te.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(qn))return t.value;if(t.is(nA)&&n)return new en(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>R.decorations.from(n,e=>e?e.deco:B.none)});function Vl(n,e){return A.create(n.filter(t=>t.field==e).map(t=>A.range(t.from,t.to)))}function rA(n){let e=jl.parse(n);return(t,i,r,s)=>{let{text:o,ranges:l}=e.instantiate(t.state,r),{main:a}=t.state.selection,c={changes:{from:r,to:s==a.from?a.to:s,insert:re.of(o)},scrollIntoView:!0,annotations:i?[Bl.of(i),Pe.userEvent.of("input.complete")]:void 0};if(l.length&&(c.selection=Vl(l,0)),l.some(h=>h.field>0)){let h=new en(l,0),u=c.effects=[qn.of(h)];t.state.field(Rn,!1)===void 0&&u.push(W.appendConfig.of([Rn,cA,hA,Hf]))}t.dispatch(t.state.update(c))}}function _f(n){return({state:e,dispatch:t})=>{let i=e.field(Rn,!1);if(!i||n<0&&i.active==0)return!1;let r=i.active+n,s=n>0&&!i.ranges.some(o=>o.field==r+n);return t(e.update({selection:Vl(i.ranges,r),effects:qn.of(s?null:new en(i.ranges,r)),scrollIntoView:!0})),!0}}const sA=({state:n,dispatch:e})=>n.field(Rn,!1)?(e(n.update({effects:qn.of(null)})),!0):!1,oA=_f(1),lA=_f(-1),aA=[{key:"Tab",run:oA,shift:lA},{key:"Escape",run:sA}],Xc=K.define({combine(n){return n.length?n[0]:aA}}),cA=si.highest(ms.compute([Xc],n=>n.facet(Xc)));function Ye(n,e){return{...e,apply:rA(n)}}const hA=R.domEventHandlers({mousedown(n,e){let t=e.state.field(Rn,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let r=t.ranges.find(s=>s.from<=i&&s.to>=i);return!r||r.field==t.active?!1:(e.dispatch({selection:Vl(t.ranges,r.field),effects:qn.of(t.ranges.some(s=>s.field>r.field)?new en(t.ranges,r.field):null),scrollIntoView:!0}),!0)}}),Kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},mi=W.define({map(n,e){let t=e.mapPos(n,-1,De.TrackAfter);return t??void 0}}),Yl=new class extends Jt{};Yl.startSide=1;Yl.endSide=-1;const Jf=Te.define({create(){return N.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(mi)&&(n=n.update({add:[Yl.range(t.value,t.value+1)]}));return n}});function uA(){return[dA,Jf]}const io="()[]{}<>«»»«[]{}";function ed(n){for(let e=0;e{if((fA?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let r=n.state.selection.main;if(i.length>2||i.length==2&&Qt(Ne(i,0))==1||e!=r.from||t!=r.to)return!1;let s=OA(n.state,i);return s?(n.dispatch(s),!0):!1}),pA=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=td(n,n.selection.main.head).brackets||Kn.brackets,r=null,s=n.changeByRange(o=>{if(o.empty){let l=gA(n.doc,o.head);for(let a of i)if(a==l&&ks(n.doc,o.head)==ed(Ne(a,0)))return{changes:{from:o.head-a.length,to:o.head+a.length},range:A.cursor(o.head-a.length)}}return{range:r=o}});return r||e(n.update(s,{scrollIntoView:!0,userEvent:"delete.backward"})),!r},mA=[{key:"Backspace",run:pA}];function OA(n,e){let t=td(n,n.selection.main.head),i=t.brackets||Kn.brackets;for(let r of i){let s=ed(Ne(r,0));if(e==r)return s==r?bA(n,r,i.indexOf(r+r+r)>-1,t):yA(n,r,s,t.before||Kn.before);if(e==s&&id(n,n.selection.main.from))return AA(n,r,s)}return null}function id(n,e){let t=!1;return n.field(Jf).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function ks(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Qt(Ne(t,0)))}function gA(n,e){let t=n.sliceString(e-2,e);return Qt(Ne(t,0))==t.length?t:t.slice(1)}function yA(n,e,t,i){let r=null,s=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:mi.of(o.to+e.length),range:A.range(o.anchor+e.length,o.head+e.length)};let l=ks(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:mi.of(o.head+e.length),range:A.cursor(o.head+e.length)}:{range:r=o}});return r?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function AA(n,e,t){let i=null,r=n.changeByRange(s=>s.empty&&ks(n.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:A.cursor(s.head+t.length)}:i={range:s});return i?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function bA(n,e,t,i){let r=i.stringPrefixes||Kn.stringPrefixes,s=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:mi.of(l.to+e.length),range:A.range(l.anchor+e.length,l.head+e.length)};let a=l.head,c=ks(n.doc,a),h;if(c==e){if(Lc(n,a))return{changes:{insert:e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)};if(id(n,a)){let f=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+f.length,insert:f},range:A.cursor(a+f.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(h=Bc(n,a-2*e.length,r))>-1&&Lc(n,h))return{changes:{insert:e+e+e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)};if(n.charCategorizer(a)(c)!=ye.Word&&Bc(n,a,r)>-1&&!SA(n,a,e,r))return{changes:{insert:e+e,from:a},effects:mi.of(a+e.length),range:A.cursor(a+e.length)}}return{range:s=l}});return s?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Lc(n,e){let t=Ce(n).resolveInner(e+1);return t.parent&&t.from==e}function SA(n,e,t,i){let r=Ce(n).resolveInner(e,-1),s=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(r.from,Math.min(r.to,r.from+t.length+s)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let h=r.firstChild;for(;h&&h.from==r.from&&h.to-h.from>t.length+a;){if(n.sliceDoc(h.to-t.length,h.to)==t)return!1;h=h.firstChild}return!0}let c=r.to==e&&r.parent;if(!c)break;r=c}return!1}function Bc(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=ye.Word)return e;for(let r of t){let s=e-r.length;if(n.sliceDoc(s,e)==r&&i(n.sliceDoc(s-1,s))!=ye.Word)return s}return-1}function xA(n={}){return[Jy,Ge,Ke.of(n),Hy,wA,Hf]}const nd=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:Vy},{key:"ArrowDown",run:ur(!0)},{key:"ArrowUp",run:ur(!1)},{key:"PageDown",run:ur(!0,"page")},{key:"PageUp",run:ur(!1,"page")},{key:"Enter",run:jy}],wA=si.highest(ms.computeN([Ke],n=>n.facet(Ke).defaultKeymap?[nd]:[]));var qc={};class Nr{constructor(e,t,i,r,s,o,l,a,c,h=0,u){this.p=e,this.stack=t,this.state=i,this.reducePos=r,this.pos=s,this.score=o,this.buffer=l,this.bufferBase=a,this.curContext=c,this.lookAhead=h,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let r=e.parser.context;return new Nr(e,[],t,i,i,0,[],0,r?new Ic(r,r.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,r=e&65535,{parser:s}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[r])===null||t===void 0)&&t.isAnonymous)&&(c==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=h):this.p.lastBigReductionSizea;)this.stack.pop();this.reduceContext(r,c)}storeNode(e,t,i,r=4,s=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!s||this.pos==i)this.buffer.push(e,t,i,r);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let l=!1;for(let a=o;a>0&&this.buffer[a-2]>i;a-=4)if(this.buffer[a-1]>=0){l=!0;break}if(l)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,r>4&&(r-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=r}}shift(e,t,i,r){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let s=e,{parser:o}=this.p;this.pos=r;let l=o.stateFlag(s,1);!l&&(r>i||t<=o.maxNode)&&(this.reducePos=r),this.pushState(s,l?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,r,4)}else this.pos=r,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,r,4)}apply(e,t,i,r){e&65536?this.reduce(e):this.shift(e,t,i,r)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(i,r,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),r=e.bufferBase+t;for(;e&&r==e.bufferBase;)e=e.parent;return new Nr(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,r,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new vA(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let r=[];for(let s=0,o;sa&1&&l==o)||r.push(t[s],o)}t=r}let i=[];for(let r=0;r>19,r=t&65535,s=this.stack.length-i*3;if(s<0||e.getGoto(this.stack[s],r,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(r,s)=>{if(!t.includes(r))return t.push(r),e.allActions(r,o=>{if(!(o&393216))if(o&65536){let l=(o>>19)-s;if(l>1){let a=o&65535,c=this.stack.length-l*3;if(c>=0&&e.getGoto(this.stack[c],a,!1)>=0)return l<<19|65536|a}}else{let l=i(o,s+1);if(l!=null)return l}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class Ic{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class vA{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let r=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=r}}class Gr{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Gr(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Gr(this.stack,this.pos,this.index)}}function dn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,r=0;i=92&&o--,o>=34&&o--;let a=o-32;if(a>=46&&(a-=46,l=!0),s+=a,l)break;s*=46}t?t[r++]=s:t=new e(s)}return t}class kr{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const zc=new kr;class kA{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=zc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,r=this.rangeIndex,s=this.pos+e;for(;si.to:s>=i.to;){if(r==this.ranges.length-1)return null;let o=this.ranges[++r];s+=o.from-i.to,i=o}return s}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,r;if(t>=0&&t=this.chunk2Pos&&il.to&&(this.chunk2=this.chunk2.slice(0,l.to-i)),r=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),r}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=zc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let r of this.ranges){if(r.from>=t)break;r.to>e&&(i+=this.input.read(Math.max(r.from,e),Math.min(r.to,t)))}return i}}class Di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;rd(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}Di.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class rl{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?dn(e):e}token(e,t){let i=e.pos,r=0;for(;;){let s=e.next<0,o=e.resolveOffset(1,1);if(rd(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(s||r++,o==null)break;e.reset(o,e.token)}r&&(e.reset(i,e.token),e.acceptToken(this.elseToken,r))}}rl.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class In{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function rd(n,e,t,i,r,s){let o=0,l=1<0){let p=n[d];if(a.allows(p)&&(e.token.value==-1||e.token.value==p||QA(p,e.token.value,r,s))){e.acceptToken(p);break}}let h=e.next,u=0,f=n[o+2];if(e.next<0&&f>u&&n[c+f*3-3]==65535){o=n[c+f*3-1];continue e}for(;u>1,p=c+d+(d<<1),m=n[p],O=n[p+1]||65536;if(h=O)u=d+1;else{o=n[p+2],e.advance();continue e}}break}}function Wc(n,e,t){for(let i=e,r;(r=n[i])!=65535;i++)if(r==t)return i-e;return-1}function QA(n,e,t,i){let r=Wc(t,i,e);return r<0||Wc(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class PA{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?jc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?jc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(s instanceof ke){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(s),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+s.length}}}class CA{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new kr)}getActions(e){let t=0,i=null,{parser:r}=e.p,{tokenizers:s}=r,o=r.stateSlot(e.state,3),l=e.curContext?e.curContext.hash:0,a=0;for(let c=0;cu.end+25&&(a=Math.max(u.lookAhead,a)),u.value!=0)){let f=t;if(u.extended>-1&&(t=this.addActions(e,u.extended,u.end,t)),t=this.addActions(e,u.value,u.end,t),!h.extend&&(i=u,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return a&&e.setLookAhead(a),!i&&e.pos==this.stream.end&&(i=new kr,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new kr,{pos:i,p:r}=e;return t.start=i,t.end=Math.min(i+1,r.stream.end),t.value=i==r.stream.end?r.parser.eofTerm:0,t}updateCachedToken(e,t,i){let r=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(r,e),i),e.value>-1){let{parser:s}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(l>>1)){(l&1)==0?e.value=l>>1:e.extended=l>>1;break}}}else e.value=0,e.end=this.stream.clipPos(r+1)}putAction(e,t,i,r){for(let s=0;se.bufferLength*4?new PA(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],r,s;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(l);else{if(this.advanceStack(l,i,e))continue;{r||(r=[],s=[]),r.push(l);let a=this.tokens.getMainToken(l);s.push(a.value,a.end)}}break}}if(!i.length){let o=r&&KA(r);if(o)return nt&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw nt&&r&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&r){let o=this.stoppedAt!=null&&r[0].pos>this.stoppedAt?r[0]:this.runRecovery(r,s,i);if(o)return nt&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((l,a)=>a.score-l.score);i.length>o;)i.pop();i.some(l=>l.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&c.buffer.length>500)if((l.score-c.score||l.buffer.length-c.buffer.length)>0)i.splice(a--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,l)=>l.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&r>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let c=e.curContext&&e.curContext.tracker.strict,h=c?e.curContext.hash:0;for(let u=this.fragments.nodeAt(r);u;){let f=this.parser.nodeSet.types[u.type.id]==u.type?s.getGoto(e.state,u.type.id):-1;if(f>-1&&u.length&&(!c||(u.prop(H.contextHash)||0)==h))return e.useNode(u,f),nt&&console.log(o+this.stackID(e)+` (via reuse of ${s.getName(u.type.id)})`),!0;if(!(u instanceof ke)||u.children.length==0||u.positions[0]>0)break;let d=u.children[0];if(d instanceof ke&&u.positions[0]==0)u=d;else break}}let l=s.stateSlot(e.state,4);if(l>0)return e.reduce(l),nt&&console.log(o+this.stackID(e)+` (via always-reduce ${s.getName(l&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let a=this.tokens.getActions(e);for(let c=0;cr?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return Vc(e,t),!0}}runRecovery(e,t,i){let r=null,s=!1;for(let o=0;o ":"";if(l.deadEnd&&(s||(s=!0,l.restart(),nt&&console.log(h+this.stackID(l)+" (restarted)"),this.advanceFully(l,i))))continue;let u=l.split(),f=h;for(let d=0;d<10&&u.forceReduce()&&(nt&&console.log(f+this.stackID(u)+" (via force-reduce)"),!this.advanceFully(u,i));d++)nt&&(f=this.stackID(u)+" -> ");for(let d of l.recoverByInsert(a))nt&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>l.pos?(c==l.pos&&(c++,a=0),l.recoverByDelete(a,c),nt&&console.log(h+this.stackID(l)+` (via recover-delete ${this.parser.getName(a)})`),Vc(l,i)):(!r||r.scoren;class RA{constructor(e){this.start=e.start,this.shift=e.shift||ro,this.reduce=e.reduce||ro,this.reuse=e.reuse||ro,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class Hr extends Yu{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let l=0;le.topRules[l][1]),r=[];for(let l=0;l=0)s(h,a,l[c++]);else{let u=l[c+-h];for(let f=-h;f>0;f--)s(l[c++],a,u);c++}}}this.nodeSet=new Tl(t.map((l,a)=>et.define({name:a>=this.minRepeatTerm?void 0:l,id:a,props:r[a],top:i.indexOf(a)>-1,error:a==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(a)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=zu;let o=dn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let l=0;ltypeof l=="number"?new Di(o,l):l),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let r=new TA(this,e,t,i);for(let s of this.wrappers)r=s(r,e,t,i);return r}getGoto(e,t,i=!1){let r=this.goto;if(t>=r[0])return-1;for(let s=r[t+1];;){let o=r[s++],l=o&1,a=r[s++];if(l&&i)return a;for(let c=s+(o>>1);s0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),r=i?t(i):void 0;for(let s=this.stateSlot(e,1);r==null;s+=3){if(this.data[s]==65535)if(this.data[s+1]==1)s=Ft(this.data,s+2);else break;r=t(Ft(this.data,s+1))}return r}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ft(this.data,i+2);else break;if((this.data[i+2]&1)==0){let r=this.data[i+1];t.some((s,o)=>o&1&&s==r)||t.push(this.data[i],r)}}return t}configure(e){let t=Object.assign(Object.create(Hr.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let r=e.tokenizers.find(s=>s.from==i);return r?r.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,r)=>{let s=e.specializers.find(l=>l.from==i.external);if(!s)return i;let o=Object.assign(Object.assign({},i),{external:s.to});return t.specializers[r]=Yc(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let s of e.split(" ")){let o=t.indexOf(s);o>=0&&(i[o]=!0)}let r=null;for(let s=0;si)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const ZA=316,MA=317,Nc=1,EA=2,UA=3,FA=4,DA=318,XA=320,LA=321,BA=5,qA=6,IA=0,sl=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],sd=125,zA=59,ol=47,WA=42,jA=43,VA=45,YA=60,NA=44,GA=63,HA=46,_A=91,JA=new RA({start:!1,shift(n,e){return e==BA||e==qA||e==XA?n:e==LA},strict:!1}),eb=new In((n,e)=>{let{next:t}=n;(t==sd||t==-1||e.context)&&n.acceptToken(DA)},{contextual:!0,fallback:!0}),tb=new In((n,e)=>{let{next:t}=n,i;sl.indexOf(t)>-1||t==ol&&((i=n.peek(1))==ol||i==WA)||t!=sd&&t!=zA&&t!=-1&&!e.context&&n.acceptToken(ZA)},{contextual:!0}),ib=new In((n,e)=>{n.next==_A&&!e.context&&n.acceptToken(MA)},{contextual:!0}),nb=new In((n,e)=>{let{next:t}=n;if(t==jA||t==VA){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(Nc);n.acceptToken(i?Nc:EA)}}else t==GA&&n.peek(1)==HA&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(UA))},{contextual:!0});function so(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}const rb=new In((n,e)=>{if(n.next!=YA||!e.dialectEnabled(IA)||(n.advance(),n.next==ol))return;let t=0;for(;sl.indexOf(n.next)>-1;)n.advance(),t++;if(so(n.next,!0)){for(n.advance(),t++;so(n.next,!1);)n.advance(),t++;for(;sl.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==NA)return;for(let i=0;;i++){if(i==7){if(!so(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(FA,-t)}),sb=Nu({"get set async static":g.modifier,"for while do if else switch try catch finally return throw break continue default case defer":g.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":g.operatorKeyword,"let var const using function class extends":g.definitionKeyword,"import export from":g.moduleKeyword,"with debugger new":g.keyword,TemplateString:g.special(g.string),super:g.atom,BooleanLiteral:g.bool,this:g.self,null:g.null,Star:g.modifier,VariableName:g.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":g.function(g.variableName),VariableDefinition:g.definition(g.variableName),Label:g.labelName,PropertyName:g.propertyName,PrivatePropertyName:g.special(g.propertyName),"CallExpression/MemberExpression/PropertyName":g.function(g.propertyName),"FunctionDeclaration/VariableDefinition":g.function(g.definition(g.variableName)),"ClassDeclaration/VariableDefinition":g.definition(g.className),"NewExpression/VariableName":g.className,PropertyDefinition:g.definition(g.propertyName),PrivatePropertyDefinition:g.definition(g.special(g.propertyName)),UpdateOp:g.updateOperator,"LineComment Hashbang":g.lineComment,BlockComment:g.blockComment,Number:g.number,String:g.string,Escape:g.escape,ArithOp:g.arithmeticOperator,LogicOp:g.logicOperator,BitOp:g.bitwiseOperator,CompareOp:g.compareOperator,RegExp:g.regexp,Equals:g.definitionOperator,Arrow:g.function(g.punctuation),": Spread":g.punctuation,"( )":g.paren,"[ ]":g.squareBracket,"{ }":g.brace,"InterpolationStart InterpolationEnd":g.special(g.brace),".":g.derefOperator,", ;":g.separator,"@":g.meta,TypeName:g.typeName,TypeDefinition:g.definition(g.typeName),"type enum interface implements namespace module declare":g.definitionKeyword,"abstract global Privacy readonly override":g.modifier,"is keyof unique infer asserts":g.operatorKeyword,JSXAttributeValue:g.attributeValue,JSXText:g.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":g.angleBracket,"JSXIdentifier JSXNameSpacedName":g.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":g.attributeName,"JSXBuiltin/JSXIdentifier":g.standard(g.tagName)}),ob={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},lb={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},ab={__proto__:null,"<":193},cb=Hr.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:JA,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[sb],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[tb,ib,nb,rb,2,3,4,5,6,7,8,9,10,11,12,13,14,eb,new rl("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new rl("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>ob[n]||-1},{term:343,get:n=>lb[n]||-1},{term:95,get:n=>ab[n]||-1}],tokenPrec:15201}),od=[Ye("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),Ye("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),Ye("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),Ye("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),Ye("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),Ye(`try { - \${} -} catch (\${error}) { - \${} -}`,{label:"try",detail:"/ catch block",type:"keyword"}),Ye("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),Ye(`if (\${}) { - \${} -} else { - \${} -}`,{label:"if",detail:"/ else block",type:"keyword"}),Ye(`class \${name} { - constructor(\${params}) { - \${} - } -}`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Gc=new dg,ld=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ad(n,e){let t=Gc.get(e);if(t)return t;let i=[],r=!0;function s(o,l){let a=n.sliceString(o.from,o.to);i.push({label:a,type:l})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(r)r=!1;else if(o.name){let l=fb[o.name];if(l&&l(o,s)||ld.has(o.name))return!1}else if(o.to-o.from>8192){for(let l of ad(n,o.node))i.push(l);return!1}}),Gc.set(e,i),i}const Hc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Hc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let r=e;r;r=r.parent)ld.has(r.name)&&(i=i.concat(ad(n.state.doc,r)));return{options:i,from:t?e.from:n.pos,validFor:Hc}}const Lt=Lr.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Ns({except:/^\s*({|else\b)/}),TryStatement:Ns({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:Mg,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:Zg({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Ns({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),rf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":Dg,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Lt.configure({dialect:"ts"},"typescript"),mb=Lt.configure({dialect:"jsx",props:[Zl.add(n=>n.isTop?[hd]:void 0)]}),Ob=Lt.configure({dialect:"jsx ts",props:[Zl.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),gb=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?Ob:mb:n.typescript?pb:Lt,t=n.typescript?hb.concat(gb):od.concat(fd);return new kg(e,[Lt.data.of({autocomplete:Ty(cd,Yf(t))}),Lt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=R.inputHandler.of((n,e,t,i,r)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Lt.isActiveAt(n.state,e,-1))return!1;let s=r(),{state:o}=s,l=o.changeByRange(a=>{var c;let{head:h}=a,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:a,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:a,changes:{from:h,insert:``}}}}return{range:a}});return l.changes.empty?!1:(n.dispatch([s,o.update(l,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,r=e.length,s,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,r),this.bufferStart=i,this.normalize=s?l=>s(Jc(l)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fl(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let r=this.normalize(t);if(r.length)for(let s=0,o=i,l=!0;;s++){let a=r.charCodeAt(s),c=this.match(a,o,l,this.bufferPos+this.bufferStart,s==r.length-1);if(c)return this.value=c,this;if(s==r.length-1)break;l&&sthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,r=i+t[0].length;if(this.matchPos=_r(this.text,r+(i==r?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||r.to<=t){let l=new Xi(t,e.sliceString(t,i));return oo.set(e,l),l}if(r.from==t&&r.to==i)return r;let{text:s,from:o}=r;return o>t&&(s=e.sliceString(t,o)+s,o=t),r.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,r=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,r,t)))return this.value={from:i,to:r,precise:!0,match:t},this.matchPos=_r(this.text,r+(i==r?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Xi.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Nl),!0}catch{return!1}}function _r(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const wb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:r}=VO(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return r.then(s=>{let o=s&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(s.elements.line.value);if(!o){n.dispatch({effects:i});return}let l=e.doc.lineAt(e.selection.main.head),[,a,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:l.number;if(c&&u){let O=d/100;a&&(O=O*(a=="-"?-1:1)+l.number/e.doc.lines),d=Math.round(e.doc.lines*O)}else c&&a&&(d=d*(a=="-"?-1:1)+l.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,R.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},vb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,vb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[Rb,$b]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const $b=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let r=i.main,s,o=null;if(r.empty){if(!e.highlightWordAroundCursor)return B.none;let a=t.wordAt(r.head);if(!a)return B.none;o=t.charCategorizer(r.head),s=t.sliceDoc(a.from,a.to)}else{let a=r.to-r.from;if(a200)return B.none;if(e.wholeWords){if(s=t.sliceDoc(r.from,r.to),o=t.charCategorizer(r.head),!(eh(o,t,r.from,r.to)&&Tb(o,t,r.from,r.to)))return B.none}else if(s=t.sliceDoc(r.from,r.to),!s)return B.none}let l=[];for(let a of n.visibleRanges){let c=new Yi(t.doc,s,a.from,a.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(r.empty&&h<=r.from&&u>=r.to?l.push(Cb.range(h,u)):(h>=r.to||u<=r.from)&&l.push(Pb.range(h,u)),l.length>e.maxMatches))return B.none}}return B.set(l)}},{decorations:n=>n.decorations}),Rb=R.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(r=>n.wordAt(r.head)||A.cursor(r.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,r=n.wordAt(t.head),s=r&&r.from==t.from&&r.to==t.to;for(let o=!1,l=new Yi(n.doc,e,i[i.length-1].to);;)if(l.next(),l.done){if(o)return null;l=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(a=>a.from==l.value.from))continue;if(s){let a=n.wordAt(l.value.from);if(!a||a.from!=l.value.from||a.to!=l.value.to)continue}return l.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(s=>s.from===s.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(s=>n.sliceDoc(s.from,s.to)!=i))return!1;let r=Zb(n,i);return r?(e(n.update({selection:n.selection.addRange(A.range(r.from,r.to),!1),effects:R.scrollIntoView(r.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>R.scrollIntoView(e)})}});class Od{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` -`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Lb(this):new Fb(this)}getCursor(e,t=0,i){let r=e.doc?e:_.create({doc:e});return i==null&&(i=r.doc.length),this.regexp?Pi(this,r,t,i):Qi(this,r,t,i)}}class gd{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,r,s,o)=>{if(t&&!t(i,r,s,o))return!1;let l=i>=o&&r<=o+s.length?s.slice(i-o,r-o):e.doc.sliceString(i,r);return n(l,e,i,r)}}function Qi(n,e,t,i){let r;return n.wholeWord&&(r=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(r=Eb(n.test,e,r)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:s=>s.toLowerCase(),r)}function Ub(n,e){return(t,i,r,s)=>((s>t||s+r.length=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let s=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!s.next().done;)r(s.value.from,s.value.to)}}function Db(n,e,t){return(i,r,s)=>(!t||t(i,r,s))&&n(s[0],e,i,r)}function Pi(n,e,t,i){let r;return n.wholeWord&&(r=Xb(e.charCategorizer(e.selection.main.head))),n.test&&(r=Db(n.test,e,r)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:r},t,i)}function Jr(n,e){return n.slice(Ze(n,e,!1),e)}function es(n,e){return n.slice(e,Ze(n,e))}function Xb(n){return(e,t,i)=>!i[0].length||(n(Jr(i.input,i.index))!=ye.Word||n(es(i.input,i.index))!=ye.Word)&&(n(es(i.input,i.index+i[0].length))!=ye.Word||n(Jr(i.input,i.index+i[0].length))!=ye.Word)}class Lb extends gd{nextMatch(e,t,i){let r=Pi(this.spec,e,i,e.doc.length).next();return r.done&&(r=Pi(this.spec,e,0,t).next()),r.done?null:r.value}prevMatchInRange(e,t,i){for(let r=1;;r++){let s=Math.max(t,i-r*1e4),o=Pi(this.spec,e,s,i),l=null;for(;!o.next().done;)l=o.value;if(l&&(s==t||l.from>s+10))return l;if(s==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let r=i.length;r>0;r--){let s=+i.slice(0,r);if(s>0&&s=t)return null;r.push(i.value)}return r}highlight(e,t,i,r){let s=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!s.next().done;)r(s.value.from,s.value.to)}}const Zn=W.define(),Gl=W.define(),Ht=Te.define({create(n){return new lo(ll(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new lo(t.value.create(),n.panel):t.is(Gl)&&(n=new lo(n.query,t.value?Hl:null));return n},provide:n=>ji.from(n,e=>e.panel)});class lo{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),qb=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),Ib=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Ht))}update(n){let e=n.state.field(Ht);(e!=n.startState.field(Ht)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let r=0,s=t.visibleRanges,o=s.length;rs[r+1].from-500;)a=s[++r].to;n.highlight(t.state,l,a,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?qb:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function zn(n){return e=>{let t=e.state.field(Ht,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const ts=zn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let r=A.single(i.from,i.to),s=n.state.facet(tn);return n.dispatch({selection:r,effects:[_l(n,i),s.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),is=zn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,r=e.prevMatch(t,i,i);if(!r)return!1;let s=A.single(r.from,r.to),o=n.state.facet(tn);return n.dispatch({selection:s,effects:[_l(n,r),o.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),zb=zn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),Wb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:r}=t.main,s=[],o=0;for(let l=new Yi(n.doc,n.sliceDoc(i,r));!l.next().done;){if(s.length>1e3)return!1;l.value.from==i&&(o=s.length),s.push(A.range(l.value.from,l.value.to))}return e(n.update({selection:A.create(s,o),userEvent:"select.search.matches"})),!0},th=zn((n,{query:e})=>{let{state:t}=n,{from:i,to:r}=t.selection.main;if(t.readOnly)return!1;let s=e.nextMatch(t,i,i);if(!s)return!1;let o=s,l=[],a,c,h=[];o.precise?o.from==i&&o.to==r&&(c=t.toText(e.getReplacement(o)),l.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push(R.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(l);return o&&(a=A.single(o.from,o.to).map(u),h.push(_l(n,o)),h.push(t.facet(tn).scrollToMatch(a.main,n))),n.dispatch({changes:u,selection:a,effects:h,userEvent:"input.replace"}),!0}),jb=zn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let r of e.matchAll(n.state,1e9)){let{from:s,to:o,precise:l}=r;l&&t.push({from:s,to:o,insert:e.getReplacement(r)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:R.announce.of(i),userEvent:"input.replace.all"}),!0});function Hl(n){return n.state.facet(tn).createPanel(n)}function ll(n,e){var t,i,r,s,o;let l=n.selection.main,a=l.empty||l.to>l.from+100?"":n.sliceDoc(l.from,l.to);if(e&&!a)return e;let c=n.facet(tn);return new Od({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(r=e?.literal)!==null&&r!==void 0?r:c.literal,regexp:(s=e?.regexp)!==null&&s!==void 0?s:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Hl);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Ht,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=ll(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Gl.of(!0),e?Zn.of(ll(n.state,e.query.spec)):W.appendConfig.of(Gb)]});return!0},Sd=n=>{let e=n.state.field(Ht,!1);if(!e||!e.panel)return!1;let t=Fu(n,Hl);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Gl.of(!1)}),!0},Vb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:ts,shift:is,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:ts,shift:is,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:Wb},{key:"Mod-Alt-g",run:wb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Ht).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:rt(e,"Find"),"aria-label":rt(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:rt(e,"Replace"),"aria-label":rt(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(r,s,o){return he("button",{class:"cm-button",name:r,onclick:s,type:"button"},o)}this.dom=he("div",{onkeydown:r=>this.keydown(r),class:"cm-search"},[this.searchField,i("next",()=>ts(e),[rt(e,"next")]),i("prev",()=>is(e),[rt(e,"previous")]),i("select",()=>zb(e),[rt(e,"all")]),he("label",null,[this.caseField,rt(e,"match case")]),he("label",null,[this.reField,rt(e,"regexp")]),he("label",null,[this.wordField,rt(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[rt(e,"replace")]),i("replaceAll",()=>jb(e),[rt(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":rt(e,"close"),type:"button"},["×"])])}commit(){let e=new Od({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){rO(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?is:ts)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function rt(n,e){return n.state.phrase(e)}const fr=30,dr=/[\s\.,:;?!]/;function _l(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),r=n.state.doc.lineAt(t).to,s=Math.max(i.from,e-fr),o=Math.min(r,t+fr),l=n.state.sliceDoc(s,o);if(s!=i.from){for(let a=0;al.length-fr;a--)if(!dr.test(l[a-1])&&dr.test(l[a])){l=l.slice(0,a);break}}return R.announce.of(`${n.state.phrase("current match")}. ${l} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=R.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Gb=[Ht,si.low(Ib),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let r=i.facet(Kt).markerFilter;r&&(e=r(e,i));let s=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,l=[],a=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==s.length?null:s[d];if(!p&&!l.length)break;let m,O;if(l.length)m=a,O=l.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;O=p.to,l.push(p),d++}for(;dx.from||x.to==m))l.push(x),d++,O=Math.min(x.to,O);else{O=Math.min(x.from,O);break}}O=Math.min(O,u);let y=!1;if(l.some(x=>x.from==m&&(x.to==O||O==u))&&(y=m==O,!y&&O-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=O){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(l);if(y)o.add(m,m,B.widget({widget:new n1(b),diagnostics:l.slice()}));else{let x=l.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,O,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:l.slice(),inclusiveEnd:l.some(C=>C.to>O)}))}if(a=O,a==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(r,s,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,s,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,r=n.state.facet(Kt).hideOn(n,t,i);if(r!=null)return r;let s=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qs))||n.changes.touchesRange(s.from,Math.max(s.to,i)))}function Hb(n,e){return n.field(Ot,!1)?e:e.concat(W.appendConfig.of(Kd))}function wd(n,e){return{effects:Hb(n,[Qs.of(e)])}}const Qs=W.define(),vd=W.define(),kd=W.define(),Ot=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,r=n.panel;if(n.selected){let s=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,s)||Ni(t,null,s)}!t.size&&r&&e.state.facet(Kt).autoPanel&&(r=null),n=new di(t,r,i)}for(let t of e.effects)if(t.is(Qs)){let i=e.state.facet(Kt).autoPanel?t.value.length?ns.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(vd)?n=new di(n.diagnostics,t.value?ns.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[ji.from(n,e=>e.panel),R.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(Ot),r,s=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(a,c,{spec:h})=>{if(e>=a&&e<=c&&(a==c||(e>a||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(Ot,!1);return!e||!e.panel?!1:(n.dispatch({effects:vd.of(!1)}),!0)},e1=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(wd(this.view.state,i.reduce((r,s)=>r.concat(s))))},i=>{We(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function t1(n,e,t){let i=[],r=-1;for(let s of n)s.then(o=>{i.push(o),clearTimeout(r),i.length==n.length?e(i):r=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:rh,tooltipFilter:rh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,r,s)=>e(i,r,s)||t(i,r,s):e:t,autoPanel:(e,t)=>e||t})}}});function rh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function i1(n,e={}){return[Kt.of({source:n,config:e}),e1,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;is.toLowerCase()==r.toLowerCase())){e.push(r);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let r=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((s,o)=>{let l=!1,a=d=>{if(d.preventDefault(),l)return;l=!0;let p=Ni(n.state.field(Ot).diagnostics,e);p&&s.apply(n,p.from,p.to)},{name:c}=s,h=r[o]?c.indexOf(r[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=s.markClass?" "+s.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:a,onmousedown:a,"aria-label":` Action: ${c}${h<0?"":` (access key "${r[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class n1 extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class sh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class ns{constructor(e){this.view=e,this.items=[];let t=r=>{if(!(r.ctrlKey||r.altKey||r.metaKey)){if(r.keyCode==27)nh(this.view),this.view.focus();else if(r.keyCode==38||r.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(r.keyCode==40||r.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(r.keyCode==36)this.moveSelection(0);else if(r.keyCode==35)this.moveSelection(this.items.length-1);else if(r.keyCode==13)this.view.focus();else if(r.keyCode>=65&&r.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:s}=this.items[this.selectedIndex],o=Pd(s.actions);for(let l=0;l{for(let s=0;snh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(Ot).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),r=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),s=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:s.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:l,panel:a})=>{let c=a.height/this.list.offsetHeight;l.topa.bottom&&(this.list.scrollTop+=(l.bottom-a.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),r&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(Ot),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new ns(e)}}function Qr(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function pr(n){return Qr(``,'width="6" height="3"')}const r1=R.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:pr("#f11")},".cm-lintRange-warning":{backgroundImage:pr("orange")},".cm-lintRange-info":{backgroundImage:pr("#999")},".cm-lintRange-hint":{backgroundImage:pr("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function s1(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let r=s1(i.severity);r>t&&(t=r,e=i.severity)}return e}class $d extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,r=e.state.facet(Ps).tooltipFilter;return r&&(i=r(i,e.state)),i.length&&(t.onmouseover=()=>l1(e,t,i)),t}}function o1(n,e){let t=i=>{let r=e.getBoundingClientRect();if(!(i.clientX>r.left-10&&i.clientXr.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,o1(n,e)}let{hoverTime:r}=n.state.facet(Ps),s=setTimeout(i,r);e.onmouseout=()=>{clearTimeout(s),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(s),s=setTimeout(i,r)}}function a1(n,e){let t=Object.create(null);for(let r of e){let s=n.lineAt(r.from);(t[s.from]||(t[s.from]=[])).push(r)}let i=[];for(let r in t)i.push(new $d(t[r]).range(+r));return N.of(i,!0)}const c1=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(al),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(al).between(t.from,t.to,(r,s,o)=>{r>t.from&&ri.is(Jl)?i.value:t,n)},provide:n=>Os.from(n)}),h1=R.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qr('')},".cm-lint-marker-warning":{content:Qr('')},".cm-lint-marker-error":{content:Qr('')}}),u1=Eu(Jb,{hideOn:xd}),Kd=[Ot,R.decorations.compute([Ot],n=>{let{selected:e,panel:t}=n.field(Ot);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),u1,r1],Ps=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function f1(n={}){return[Ps.of(n),al,c1,h1,Rd]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function d1(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function p1(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,r=()=>{},s=null){if(!n){r({result:"unavailable"});return}n.callHandler(e,d1(e,t,i,s),r)}function m1(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const O1=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),cl="2026-01-01T00:00:00Z",Wt="2026-01-01T12:00:00Z",ao=(n,e)=>({value:n,unit:e,hasSamples:!0,start:cl,end:Wt}),oh=(n,e,t)=>Object.entries(e).map(([i,r])=>({id:`$${n}.${i}`,group:n,value:r,legacy:[t,i]})),g1=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:Wt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse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",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:Wt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:Wt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:Wt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:cl,end:Wt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:cl,end:Wt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:ao(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:ao(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:ao(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:Wt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],y1={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},A1=g1.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...y1[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),Re={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(O1.map(n=>[n.id,n])),...Object.fromEntries(A1.map(n=>[n.id,{documentation:n.notes,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function b1(n,e){const t=Object.entries(e.properties??{}).filter(([,r])=>r.required).map(([r,s])=>`${r}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> - \${} -`:`<${n}${i} />`}const lh=Object.entries(Re.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:b1(n,e)}));function S1(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function x1(n,e){const t=Re.components[n];return t?Object.entries({...Re.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,r])=>({label:i,type:"property",detail:r.required?`${r.type} · required`:r.type,info:r.deprecated?`Deprecated: ${r.deprecated}`:r.documentation,apply:`${i}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`})):[]}function w1(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=Re.components[e[1]]?.properties?.[e[2]]??Re.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function v1(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=w1(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:lh,validFor:/^[A-Za-z]*$/};const r=S1(e);if(r&&/(?:\s|^)\w*$/.test(r.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),l=new Set([...r.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(a=>a[1]));return{from:o?.from??n.pos,options:x1(r.name,l),validFor:/^[A-Za-z][\w]*$/}}const s=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(s){const o=s.text.slice(0,s.text.indexOf(".")+1),l=Object.entries(Re.functions).filter(([a])=>a.startsWith(o));return l.length?{from:s.from+o.length,options:l.map(([a,c])=>({label:a.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:lh,validFor:/^[A-Za-z]*$/}:null}function ah(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const r=ah(t,"JSXIdentifier")[0];r&&e.push({name:n.doc.sliceString(r.from,r.to),from:r.from,to:r.to,attributes:ah(t,"JSXAttribute").map(s=>{const o=s.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=Re.components[t.name];if(!i)continue;const r=new Set([...Object.keys(Re.globalProperties),...Object.keys(i.properties??{})]),s=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){r.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const l=i.properties?.[o.name]??Re.globalProperties[o.name];l?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${l.deprecated}`})}for(const[o,l]of Object.entries(i.properties??{}))if(l.required&&!s.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),s.has(o)){for(const a of l.requires??[])s.has(a)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${a}” property.`});for(const a of l.conflicts??[])s.has(a)&&o cannot combine “${o}” with “${a}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>s.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function k1(n,e){const t=Md(n.state).find(r=>e>=r.from&&e<=r.to);if(!t)return null;const i=Re.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const r=document.createElement("div");r.className="studio-hover";const s=document.createElement("strong");s.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,r.append(s,o),{dom:r}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function Q1(n,e){return R.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const P1=Ln.define([{tag:[g.keyword,g.controlKeyword,g.moduleKeyword,g.operatorKeyword,g.bool,g.null],color:"#FF7AB2"},{tag:[g.string,g.special(g.string)],color:"#FF8170"},{tag:[g.number,g.regexp],color:"#D9C97C"},{tag:[g.comment,g.lineComment,g.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[g.tagName,g.typeName,g.className],color:"#5DD8FF"},{tag:g.attributeName,color:"#B281EB"},{tag:[g.propertyName,g.function(g.variableName),g.function(g.propertyName)],color:"#67B7A4"},{tag:g.definition(g.variableName),color:"#4EB0CC"},{tag:[g.variableName,g.operator,g.punctuation,g.bracket],color:"#E8E8ED"},{tag:g.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[Q1(e?ch.dark:ch.light,e),Jg(e?P1:i0)]}const C1=Lt.parser.configure({dialect:"jsx"}),T1=new Map(Object.keys(Re.components).map(n=>[n.toLowerCase(),n])),$1=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),R1=512*1024,K1=512,Z1=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,r)=>{const s={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(s,r))return s[r];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(r)){const o=r[1].toLowerCase()==="x"?parseInt(r.slice(2),16):Number(r.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function wi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>R1)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=C1.parse(n);let i=!1;if(t.iterate({enter:s=>{s.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function r(s,o,l){(l>Z1||e.nodes.length>=K1)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const a=ci(s),c=a[0],h=a.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=T1.get(f.toLowerCase()),p=Re.components[d],m={...Re.globalProperties,...p?.properties??{}},O=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=O?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&O&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(s.from),parentID:o,tag:f,component:d??null,from:s.from,to:s.to,openingEnd:c.to,insertAt:c.to-(O?1:2),contentFrom:c.to,contentTo:O?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:l};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const v=ci(S),U=hi(n,v[0]),F=v[2],j=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):j,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=O?a.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(r(S,b.id,l+1).id);if(b.structure=!b.locked&&O&&$1.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(v=>v.id===S).locked),!b.locked&&d==="Text"&&O&&k.length===1){const S=k[0],v=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(v)?Fd(v):S.name==="JSXEscape"?co(v.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(s){if(s.name!=="CallExpression")return;const o=ci(s.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const l=ci(o[1]).filter(a=>!["(",")"].includes(a.name));if(l.length===1&&l[0].name==="JSXElement")return e.roots.push(r(l[0],null,0).id),!1}})}catch(s){return{...e,nodes:[],roots:[],issue:s.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function hl(n){return!n?.component||n.locked?{}:{...Re.globalProperties,...Re.components[n.component]?.properties??{}}}function M1(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(a=>a.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let r=[],s=i.from;if(t.type==="property"){const a=hl(i),c=Object.hasOwn(a,t.name)?a[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=Re.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),r=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;r=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),r=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")r=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:s};r=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],s=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const a={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(a,t.kind)||de("Unsupported new layer."),r=[{from:i.contentTo,to:i.contentTo,insert:a[t.kind]}],s=i.contentTo}else de("Unsupported layout operation.");r.sort((a,c)=>a.from-c.from);let o=e;for(const a of[...r].reverse())o=o.slice(0,a.from)+a.insert+o.slice(a.to);return wi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:r,selectedFrom:s}}const Dd=Lt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Gi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:Re.globalProperties.font.values},bodyFont:{values:Re.globalProperties.font.values},fontDesign:{values:Re.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),mr={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},rs=Object.freeze({Meadow:Object.freeze({...mr,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...mr,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...mr,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...mr,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Xd(n,e){Object.hasOwn(Gi,n)||Qe("Unknown theme token.");const t=Gi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function ea(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Gi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Xd(e,n[e]);return n}function Ld(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),ea(e.tokens),e}function E1(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Ld(t),t}function ss(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],r=[];if(t.iterate({enter(a){a.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(a.name)&&n.slice(a.from,a.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(a.from,a.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(a.name)&&(a.name==="VariableDefinition"?i:r).push(a.node)}}),!i.length&&!r.length){const a=wi(n);e.canInitialize=!a.issue&&a.roots.length===1&&!a.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;a.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froma.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const s=i[0].parent,o=Ci(s);(s.name!=="VariableDeclaration"||s.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(a=>a.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const l={};for(const a of Ci(o[3])){if(["{","}",","].includes(a.name))continue;const c=Ci(a),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(a.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(l,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Xd(u,f),l[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}ea(l);for(const a of r){const c=a.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==a.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Gi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=l}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),ea(t),{changes:Object.keys(Gi).filter(r=>t[r]!==n.tokens[r]).map(r=>({...n.ranges[r],insert:JSON.stringify(t[r])})).sort((r,s)=>r.from-s.from)}}function U1(n,e="Meadow"){(!ss(n).canInitialize||!Object.hasOwn(rs,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=wi(n),r=i.nodes[0],s=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;s.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(r,c,c,!0);r.structure&&o(r,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let l=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")l=c.to;else break;s.push({from:l,to:l,insert:` -const widgetTheme = ${JSON.stringify(rs[e],null,2)}; -`}),s.sort((c,h)=>c.from-h.from);let a=n;for(const c of[...s].reverse())a=a.slice(0,c.from)+c.insert+a.slice(c.to);return(!ss(a).tokens||wi(a).issue)&&Qe("This layout cannot be themed automatically. Your source was preserved."),{changes:s}}function Bd(n){if(!Array.isArray(n)||n.length>4096)return[];const e=new Map,t=new Set;for(const i of n){if(typeof i!="string"||new TextEncoder().encode(i).length>1024||/[\\\u0000-\u001f\u007f-\u009f]/.test(i))continue;const r=i.split("/");if(r.length!==2||r[0]!=="image"||!r[1]||new TextEncoder().encode(r[1]).length>255||r[1]!==r[1].trim()||r[1].includes("..")||!/\.(png|jpe?g|webp)$/i.test(r[1]))continue;const s=i.normalize("NFC").toLowerCase();e.has(s)&&e.get(s)!==i&&t.add(s),e.set(s,i)}return[...e].filter(([i])=>!t.has(i)).map(([,i])=>i).sort().slice(0,256)}const ta=W.define(),os=Te.define({create:()=>[],update(n,e){for(const t of e.effects)t.is(ta)&&(n=Bd(t.value));return n}});function ia(n,e){n.state.field(os,!1)!==void 0&&n.dispatch({effects:ta.of(e)})}const qd=Object.freeze({bloom:Object.freeze({name:"Bloom mark",description:"A small four-petal flower",kind:"icon"}),leaf:Object.freeze({name:"Leaf mark",description:"A tilted leaf and stem",kind:"icon"}),pebble:Object.freeze({name:"Pebble friend",description:"A quiet, round-eared companion",kind:"pet"})}),uo=`/* -ScriptWidget original geometric assets 1: Bloom mark, Leaf mark, Pebble friend. -Source: https://github.com/everettjf/scriptwidget (Editor/editorfe/src/visualAssets.js) -SPDX-License-Identifier: MIT -Copyright (c) 2021-2022 everettjf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ -`;function F1(n,e){const t=i=>e?`{widgetTheme.${i}}`:JSON.stringify(rs.Meadow[i]);if(n==="bloom")return``;if(n==="leaf")return``;if(n==="pebble")return``;throw new Error("Choose an original asset from the catalog.")}function D1(n,e,{id:t,kind:i,path:r},s=[]){if(n.source!==e||n.issue)throw new Error("Layout changed. Select the container again.");const o=n.nodes.find(f=>f.id===t);if(!o?.structure)throw new Error("Select a stack/grid with literal JSX children in Layout or Assets.");let l;if(i==="photo"){if(!Bd(s).includes(r))throw new Error("This image is no longer in the package resource list. Refresh images.");l=``}else{if(!Object.hasOwn(qd,i))throw new Error("Choose an original asset from the catalog.");l=F1(i,!!ss(e).tokens)}const a=[{from:o.contentTo,to:o.contentTo,insert:l}];let c=o.contentTo;if(i!=="photo"&&!e.includes(uo)){const f=e.startsWith("#!")?e.indexOf(` -`)+1:0;a.push({from:f,to:f,insert:uo}),c+=uo.length}a.sort((f,d)=>f.from-d.from);let h=e;for(const f of[...a].reverse())h=h.slice(0,f.from)+f.insert+h.slice(f.to);if(wi(h).issue)throw new Error("This asset would exceed the supported layout limits. Your source was preserved.");return{changes:a,selectedFrom:c}}const X1=n=>["string","number","number|string","date|number","boolean","enum","color","url","action-id","storage-key"].includes(n.type);function L(n,e,t){const i=document.createElement(n);return e&&(i.className=e),t!==void 0&&(i.textContent=t),i}function L1(n,e){const t=L("section","sw-layout"),i=L("div","sw-layout-header"),r=L("div","sw-layout-body");t.setAttribute("aria-label","Visual layout editor");let s=!1,o="layout",l=null,a=null,c="",h=null,u=!1,f=0;const d=String(Math.random()),p=(Q,D)=>P=>{if(u||!t.contains(Q)){P.preventDefault();return}return D(P)},m=(Q,D,P)=>Q.addEventListener(D,p(Q,P)),O=(Q,D,P=!1)=>{const V=L("button","sw-layout-button",Q);return V.type="button",V.disabled=P,m(V,"click",D),V},y=O("Layout",()=>{s=o==="layout"?!s:!0,o="layout",Y(),n.requestMeasure()});y.classList.add("sw-layout-toggle"),y.setAttribute("aria-expanded","false");const b=L("span","sw-layout-hint","Select layers and edit literal JSX"),x=O("Undo",()=>Xl(n)),C=O("Redo",()=>Wr(n)),k=O("Theme",()=>{s=o==="theme"?!s:!0,o="theme",Y(),n.requestMeasure()});k.setAttribute("aria-expanded","false");const S=O("Assets",()=>{s=o==="assets"?!s:!0,o="assets",Y(),n.requestMeasure()});S.setAttribute("aria-expanded","false"),i.append(y,k,S,b,x,C),t.append(i,r),r.hidden=x.hidden=C.hidden=!0;const v=L("p","sw-layout-error");v.setAttribute("role","alert"),v.hidden=!0,t.append(v);function U(){l=wi(n.state.doc.toString());const Q=L("div","sw-layout-inspector sw-theme-inspector");if(r.replaceChildren(Q),Q.append(L("div","sw-layout-title","Widget assets")),Q.append(L("p","sw-layout-notice","Insert editable original JSX or a package image. Originals follow connected theme colors; pet artwork is static. Import photos with the app's existing image tools or Web Studio's Add image.")),l.issue){Q.append(L("p","sw-layout-notice",l.issue));return}const D=l.nodes.filter(q=>q.structure),P=L("select");P.setAttribute("aria-label","Asset destination");for(const q of D){const G=L("option","",`${q.tag} · line ${n.state.doc.lineAt(q.from).number}`);G.value=q.id,P.append(G)}D.some(q=>q.id===a)?P.value=a:a=P.value,m(P,"change",()=>{a=P.value}),Q.append(P);const V=n.state.readOnly||!D.length;D.length||Q.append(L("p","sw-layout-notice","Add a stack/grid with literal JSX children in Code to insert assets."));function le(q,G){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const ce=D1(l,n.state.doc.toString(),{id:P.value,kind:q,path:G},n.state.field(os));a=P.value,v.hidden=!0,n.dispatch({changes:ce.changes,selection:{anchor:ce.selectedFrom},annotations:vr.of("full"),userEvent:"input.asset",scrollIntoView:!0})}catch(ce){v.textContent=ce.message,v.hidden=!1}}for(const[q,G]of Object.entries(qd)){const ce=L("div","sw-layout-actions");ce.append(O(`Insert ${G.name}`,()=>le(q),V),L("span","",G.description)),Q.append(ce)}Q.append(L("div","sw-layout-title","Package images"));const J=n.state.field(os),ee=L("select");ee.setAttribute("aria-label","Package image");for(const q of J){const G=L("option","",q);G.value=q,ee.append(G)}ee.disabled=!J.length,Q.append(ee,O("Insert package image",()=>le("photo",ee.value),V||!J.length)),J.length||Q.append(L("p","sw-layout-notice","No supported images in image/. Add a PNG, JPEG or WebP to the package, then refresh or reopen the editor.")),e.refreshResources&&Q.append(O("Refresh images",async()=>{const q=++f,G=n.state.doc,ce=()=>!u&&q===f&&n.state.doc===G;try{const I=await e.refreshResources();ce()&&(v.hidden=!0,ia(n,I))}catch{ce()&&(v.textContent="Images could not be refreshed. Reopen this document and try again.",v.hidden=!1)}})),Q.append(L("p","sw-layout-notice","Bloom mark, Leaf mark and Pebble friend: original ScriptWidget geometry, MIT licensed. Package photos retain their own rights. See the Studio assets documentation."))}function F(Q,D){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const P=n.state.doc.toString();if(P!==D)throw new Error("Source changed. Reopen Theme before editing.");const V=Q(P);v.hidden=!0,V.changes.length&&n.dispatch({changes:V.changes,annotations:vr.of("full"),userEvent:"input.theme"})}catch(P){v.textContent=P.message,v.hidden=!1}}function j(){const Q=n.state.doc.toString(),D=ss(Q),P=n.state.readOnly,V=L("div","sw-layout-inspector sw-theme-inspector");if(r.replaceChildren(V),V.append(L("div","sw-layout-title","Widget theme")),V.append(L("p","sw-layout-notice","Saved as ordinary JavaScript with your widget. Dynamic values stay in Code. Applying a theme changes the connected colors, fonts and spacing.")),D.issue){V.append(L("p","sw-layout-notice",D.issue));return}if(!D.tokens){V.append(O("Connect layout to Meadow theme",()=>F(ee=>U1(ee),Q),P||!D.canInitialize)),D.canInitialize||V.append(L("p","sw-layout-notice","Use a literal top-level $render layout, or define the documented widgetTheme object in Code."));return}const le=L("div","sw-layout-actions");for(const[ee,q]of Object.entries(rs))le.append(O(ee,()=>F(G=>ho(D,G,q),Q),P));V.append(le);for(const[ee,q]of Object.entries(Gi)){const G=L("form","sw-layout-form"),ce=L("label","",ee),I=L(q.values?"select":"input");if(q.values)for(const se of q.values){const Me=L("option","",se);Me.value=se,I.append(Me)}q.type==="number"&&(I.type="number",I.min="0",I.max=String(q.maximum),I.step="any"),I.value=String(D.tokens[ee]),I.setAttribute("aria-label",`Theme ${ee}`),I.disabled=P;const te=O(`Apply ${ee}`,()=>{},P);te.type="submit",G.append(ce,I,te),m(G,"submit",se=>{se.preventDefault();const Me=q.type==="number"?I.value.trim()?Number(I.value):NaN:I.value;F(ge=>ho(D,ge,{...D.tokens,[ee]:Me}),Q)}),V.append(G)}const J=L("textarea");J.rows=5,J.setAttribute("aria-label","Reusable theme JSON"),J.value=E1(D.tokens),V.append(L("label","","Copy this JSON to reuse a theme, or paste a version 1 theme and import it."),J,O("Import theme JSON",()=>F(ee=>ho(D,ee,Ld(J.value).tokens),Q),P))}function E(Q,D=l?.source){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");if(D!==n.state.doc.toString())throw new Error("Source changed during this operation. Select the layer again.");const P=M1(l,n.state.doc.toString(),Q);if(v.hidden=!0,!P.changes.length)return;n.dispatch({changes:P.changes,selection:{anchor:P.selectedFrom},annotations:vr.of("full"),userEvent:"input.layout",scrollIntoView:!0})}catch(P){v.textContent=P.message,v.hidden=!1}}function M(Q){u||(a=Q.id,c="",n.dispatch({selection:{anchor:Q.from,head:Q.to},scrollIntoView:!0,userEvent:"select.layout"}),Y())}function Y(){if(y.setAttribute("aria-expanded",String(s&&o==="layout")),k.setAttribute("aria-expanded",String(s&&o==="theme")),S.setAttribute("aria-expanded",String(s&&o==="assets")),r.hidden=!s,x.hidden=C.hidden=!s,b.hidden=s,x.disabled=n.state.readOnly||wc(n.state)===0,C.disabled=n.state.readOnly||vc(n.state)===0,!s)return;if(o==="assets"){U();return}if(o==="theme"){j();return}if(l=wi(n.state.doc.toString()),r.replaceChildren(),l.issue){r.append(L("p","sw-layout-notice",l.issue));return}const Q=n.state.selection.main.from,D=l.nodes.filter(I=>I.from<=Q&&QI.id===a&&I.from<=Q&&Q<=I.to)??D??l.nodes[0];a=P.id;const V=L("div","sw-layout-layers");V.setAttribute("role","tree"),V.setAttribute("aria-label","Layout layers");const le=n.state.readOnly,J=I=>{const te=I.text??I.properties.find(se=>se.name==="text"&&se.editable&&typeof se.value=="string")?.value;return`<${I.tag}>${te?` · ${te.slice(0,32)}`:""}${I.locked?" · locked":""}`};for(const[I,te]of l.nodes.entries()){const se=l.nodes.find(ie=>ie.id===te.parentID),Me=!le&&!te.locked&&se?.structure,ge=O(J(te),()=>M(te));ge.classList.add("sw-layout-layer"),ge.dataset.layerId=te.id,ge.style.paddingInlineStart=`${8+te.depth*14}px`,ge.setAttribute("role","treeitem"),ge.setAttribute("aria-level",String(te.depth+1)),ge.setAttribute("aria-selected",String(te.id===P.id)),ge.tabIndex=te.id===P.id?0:-1,ge.draggable=!!Me,m(ge,"keydown",ie=>{let we;ie.key==="ArrowUp"&&(we=l.nodes[Math.max(0,I-1)]),ie.key==="ArrowDown"&&(we=l.nodes[Math.min(l.nodes.length-1,I+1)]),ie.key==="ArrowLeft"&&(we=se),ie.key==="ArrowRight"&&(we=l.nodes.find(qe=>qe.id===te.children[0])),ie.key==="Home"&&(we=l.nodes[0]),ie.key==="End"&&(we=l.nodes.at(-1)),we&&(ie.preventDefault(),ie.stopPropagation(),M(we),ee().find(qe=>qe.dataset.layerId===we.id)?.focus())}),m(ge,"dragstart",ie=>{if(!Me){ie.preventDefault();return}h={id:te.id,source:l.source},ie.dataTransfer.setData("application/x-scriptwidget-layer",d),ie.dataTransfer.effectAllowed="move"}),m(ge,"dragover",ie=>{h&&se?.structure&&te.id!==h.id&&(ie.preventDefault(),ie.dataTransfer.dropEffect="move")}),m(ge,"drop",ie=>{if(!h||ie.dataTransfer.getData("application/x-scriptwidget-layer")!==d||!se?.structure)return;ie.preventDefault();const we=h;h=null,E({type:"move",id:we.id,parentID:se.id,index:se.children.filter(qe=>qe!==we.id).indexOf(te.id)},we.source)}),m(ge,"dragend",()=>{h=null}),V.append(ge)}function ee(){return[...t.querySelectorAll(".sw-layout-layer")]}const q=L("div","sw-layout-inspector"),G=L("div","sw-layout-title",`<${P.tag}>`);if(q.append(G),(le||P.locked)&&q.append(L("p","sw-layout-notice",le?"This document is read only.":P.reason)),!le&&!P.locked){let ge=function(){c=se.value;const oe=hl(P)[c],Ae=P.properties.find(tt=>tt.name===c);if(Me.replaceChildren(),te.onsubmit=tt=>tt.preventDefault(),Ae&&!Ae.editable){Me.append(L("span","sw-layout-notice","Dynamic value: edit it in Code. Connected widgetTheme tokens can be changed in Theme."));return}const ae=L(oe.values||oe.type==="boolean"?"select":"input");ae.setAttribute("aria-label","Layout property value");for(const tt of oe.values??(oe.type==="boolean"?[!0,!1]:[])){const li=L("option","",String(tt));li.value=String(tt),ae.append(li)}ae.value=Ae?String(Ae.value):oe.values?.[0]??(oe.type==="boolean"?"true":"");const Ie=O("Apply",()=>{});Ie.type="submit",Me.append(ae,Ie,O("Remove",()=>E({type:"property",id:P.id,name:c,remove:!0}),!Ae||oe.required)),te.onsubmit=p(te,tt=>{tt.preventDefault();const li=oe.type==="boolean"?ae.value==="true":oe.type==="number"?ae.value.trim()?Number(ae.value):NaN:ae.value;E({type:"property",id:P.id,name:c,value:li})})};if(P.textEditable){const oe=L("form","sw-layout-form"),Ae=L("label","","Text"),ae=L("input");ae.value=P.text,ae.setAttribute("aria-label","Layer text");const Ie=O("Apply text",()=>{});Ie.type="submit",oe.append(Ae,ae,Ie),m(oe,"submit",tt=>{tt.preventDefault(),E({type:"text",id:P.id,value:ae.value})}),q.append(oe)}const I=Object.entries(hl(P)).filter(([,oe])=>X1(oe)),te=L("form","sw-layout-form"),se=L("select");se.setAttribute("aria-label","Layout property");for(const[oe]of I){const Ae=L("option","",oe);Ae.value=oe,se.append(Ae)}I.some(([oe])=>oe===c)||(c=P.structure?"alignment":"color"),se.value=c,se.value||(se.selectedIndex=0,c=se.value);const Me=L("div","sw-layout-property");te.append(se,Me),m(se,"change",ge),ge(),q.append(te);const ie=l.nodes.find(oe=>oe.id===P.parentID),we=ie?.children.indexOf(P.id)??-1,qe=L("div","sw-layout-actions");if(qe.append(O("Move up",()=>E({type:"move",id:P.id,parentID:ie.id,index:we-1}),!ie?.structure||we<=0),O("Move down",()=>E({type:"move",id:P.id,parentID:ie.id,index:we+1}),!ie?.structure||we>=ie.children.length-1),O("Delete layer",()=>E({type:"remove",id:P.id}),!ie?.structure)),q.append(qe),ie?.structure){const oe=l.nodes.filter(ae=>ae.structure&&!(ae.from>=P.from&&ae.to<=P.to)),Ae=L("select");Ae.setAttribute("aria-label","Move layer into container");for(const ae of oe){const Ie=L("option","",`${ae.tag} · line ${n.state.doc.lineAt(ae.from).number}`);Ie.value=ae.id,Ae.append(Ie)}q.append(Ae,O("Move inside",()=>{const ae=l.nodes.find(Ie=>Ie.id===Ae.value);E({type:"move",id:P.id,parentID:ae.id,index:ae.children.filter(Ie=>Ie!==P.id).length})},!oe.length))}if(P.structure){const oe=L("div","sw-layout-actions");for(const[Ae,ae]of[["text","Add text"],["stack","Add stack"],["spacer","Add spacer"],["icon","Add icon"]])oe.append(O(ae,()=>E({type:"add",id:P.id,kind:Ae})));q.append(oe)}}const ce=P.properties.filter(I=>!I.editable).map(I=>I.name);ce.length&&q.append(L("p","sw-layout-notice",`Preserved in Code: ${ce.join(", ")}`)),!P.structure&&P.children.length&&q.append(L("p","sw-layout-notice","This child structure stays in Code. Reordering is available on literal stack/grid children.")),r.append(V,q)}return{dom:t,top:!0,update(Q){if(!s)return;const D=n.state.selection.main.from,P=l?.nodes.filter(le=>le.from<=D&&Dle.effects.some(J=>J.is(ta)));(Q.docChanged||V||Q.startState.readOnly!==n.state.readOnly||Q.selectionSet&&P!==a)&&(Q.docChanged&&o!=="assets"&&(a=null),Y()),x.disabled=n.state.readOnly||wc(n.state)===0,C.disabled=n.state.readOnly||vc(n.state)===0},destroy(){u=!0}}}const B1=R.baseTheme({".sw-layout":{fontFamily:"system-ui, sans-serif",fontSize:"12px",backgroundColor:"#f6f7fa",color:"#272a34",borderBottom:"1px solid #dce0e9"},"&dark .sw-layout":{backgroundColor:"#252830",color:"#eceef5",borderColor:"#414552"},".sw-layout-header":{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px",padding:"6px 10px"},".sw-layout-toggle":{fontWeight:"600"},".sw-layout-hint":{opacity:"0.65",fontSize:"11px"},".sw-layout-button":{fontFamily:"inherit",fontSize:"11px",color:"inherit",backgroundColor:"transparent",border:"1px solid #a0a5b655",borderRadius:"6px",padding:"4px 8px",cursor:"pointer",whiteSpace:"nowrap"},".sw-layout-button:disabled":{opacity:"0.4",cursor:"default"},".sw-layout-body":{display:"grid",gridTemplateColumns:"minmax(120px, 1fr) minmax(180px, 1.6fr)",maxHeight:"280px",overflow:"auto",borderTop:"1px solid #a0a5b633"},".sw-layout-body[hidden]":{display:"none"},".sw-layout-layers":{padding:"6px 2px",overflow:"auto",borderRight:"1px solid #a0a5b633"},".sw-layout-layer":{display:"block",border:0,borderRadius:"4px",width:"100%",textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",margin:"1px 0",paddingBlock:"6px"},'.sw-layout-layer[aria-selected="true"]':{backgroundColor:"#4085f52b",color:"inherit"},".sw-layout-inspector":{padding:"8px 10px",display:"flex",alignItems:"start",flexDirection:"column",gap:"8px",minWidth:0},".sw-theme-inspector":{gridColumn:"1 / -1"},".sw-theme-inspector textarea":{boxSizing:"border-box",width:"100%",fontFamily:"monospace",backgroundColor:"transparent",color:"inherit",border:"1px solid #a0a5b666",borderRadius:"5px"},".sw-layout-title":{fontWeight:"600"},".sw-layout-form":{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"5px",width:"100%"},".sw-layout-property,.sw-layout-actions":{display:"flex",flexWrap:"wrap",gap:"5px",alignItems:"center"},".sw-layout input,.sw-layout select":{fontFamily:"inherit",fontSize:"12px",minWidth:0,maxWidth:"100%",padding:"4px 6px",border:"1px solid #a0a5b666",borderRadius:"5px",backgroundColor:"transparent",color:"inherit"},".sw-layout-notice":{margin:"8px",lineHeight:"1.5",fontSize:"11px",opacity:"0.7"},".sw-layout-body > .sw-layout-notice":{gridColumn:"1 / -1"},".sw-layout-error":{margin:"0 10px 6px",color:"#b32636",fontSize:"12px"},"&dark .sw-layout-error":{color:"#ff99a4"},".sw-layout button:focus-visible,.sw-layout input:focus-visible,.sw-layout select:focus-visible":{outline:"2px solid #4085f5",outlineOffset:"1px"},"@media (max-width: 480px)":{".sw-layout-body":{gridTemplateColumns:"minmax(90px, 1fr) minmax(150px, 1.6fr)"},".sw-layout-hint":{display:"none"}}});function q1(n={}){return[B1,os,ji.of(e=>L1(e,n))]}const Id="scriptwidget.studio.document-state.v1.";function zd(n,e,t){if(!n||!e)return!1;try{return n.setItem(`${Id}${e}`,JSON.stringify({anchor:Number(t.anchor)||0,head:Number(t.head)||0,scrollTop:Number(t.scrollTop)||0})),!0}catch{return!1}}function I1(n,e,t){if(!n||!e)return null;try{const i=JSON.parse(n.getItem(`${Id}${e}`));if(!i||typeof i!="object")return null;const r=s=>Math.max(0,Math.min(Number(s)||0,t));return{anchor:r(i.anchor),head:r(i.head),scrollTop:Math.max(0,Number(i.scrollTop)||0)}}catch{return null}}const z1="scriptwidget.web-studio.draft.v1:";function na(n){return`${z1}${n}`}function W1(n,e){if(!e)return null;try{const t=JSON.parse(n.getItem(na(e))||"null");return t&&typeof t.content=="string"&&typeof t.baseRevision=="string"?t:null}catch{return null}}function hh(n,e,t,i,r=Date.now()){if(!e||typeof i!="string")return null;const s={documentID:e,content:t,baseRevision:i,updatedAt:r};return n.setItem(na(e),JSON.stringify(s)),s}function fo(n,e){e&&n.removeItem(na(e))}function j1(n,e,t,i){const r=W1(n,e);return!r||r.content===t?null:{...r,serverContent:t,serverRevision:i,isStale:r.baseRevision!==i}}function V1(){return{connection:"connecting",save:"idle",preview:"idle",conflict:null}}function Y1(n,e){switch(e.type){case"CONNECTED":return{...n,connection:"connected"};case"OFFLINE":return{...n,connection:"offline",save:n.save==="saving"?"draft":n.save};case"DISCONNECTED":return{...n,connection:"disconnected"};case"EDITED":return{...n,save:"draft",conflict:null};case"SAVING":return{...n,save:"saving"};case"SAVED":return{...n,save:"saved",preview:e.preview||"requested",conflict:null};case"SAVE_FAILED":return{...n,save:"error"};case"CONFLICT":return{...n,save:"conflict",conflict:e.conflict};default:return n}}class N1{constructor(e){this.send=e,this.epoch=0,this.context=null,this.inFlight=null,this.needsFlush=!1}open({documentID:e,packageID:t,path:i,revision:r,content:s}){return this.epoch+=1,this.context={documentID:e,packageID:t,path:i,revision:r,content:s,generation:0,savedGeneration:0},this.needsFlush=!1,this.snapshot()}edit(e){return this.context?(this.context.content=e,this.context.generation+=1,this.snapshot()):null}rebase(e){return this.context&&(this.context.revision=e),this.snapshot()}get isDirty(){return!!(this.context&&this.context.generation!==this.context.savedGeneration)}snapshot(){return this.context?{...this.context,dirty:this.isDirty}:null}async flush(){if(!this.context||!this.isDirty)return{skipped:!0,snapshot:this.snapshot()};if(this.inFlight)return this.needsFlush=!0,this.inFlight.then(()=>this.isDirty?this.flush():{skipped:!0,snapshot:this.snapshot()});const e=this.epoch,t={...this.context};this.needsFlush=!1,this.inFlight=this.send({documentID:t.documentID,packageID:t.packageID,path:t.path,content:t.content,baseRevision:t.revision}).then(r=>this.epoch!==e||this.context?.documentID!==t.documentID?{ignored:!0,result:r,snapshot:this.snapshot()}:(this.context.revision=r.revision,this.context.savedGeneration=t.generation,{result:r,snapshot:this.snapshot()})).finally(()=>{this.inFlight=null});const i=await this.inFlight;return this.needsFlush&&this.isDirty?this.flush():i}}function uh(n){return["draft","saving","error","conflict"].includes(n)}class G1 extends Error{constructor(e,t,i={}){super(e),this.name="StudioAPIError",this.status=t,this.body=i}}class H1{constructor({fetchImpl:e=globalThis.fetch,token:t=()=>"",onUnauthorized:i=()=>{}}={}){if(typeof e!="function")throw new TypeError("A fetch implementation is required");this.fetchImpl=e,this.token=t,this.onUnauthorized=i}async request(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t)),r=await i.json().catch(()=>({}));return this.validate(i,e,r),r}async requestBlob(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t));if(!i.ok){const r=await i.json().catch(()=>({}));this.validate(i,e,r)}return i.blob()}authorizedOptions(e){return{...e,headers:{"Content-Type":"application/json","X-Studio-Token":this.token(),...e.headers||{}}}}validate(e,t,i){if(!e.ok){const r=new G1(i.message||`Request failed (${e.status})`,e.status,i);throw e.status===401&&t!=="/api/v1/pair"&&this.onUnauthorized(r),r}}}const ra=/^https?:$/.test(window.location.protocol),_1=document.querySelector(ra?"#editor":"#native-editor"),sa=new Hi,ls=new Hi;let It=null,me=null,Et=null,lt=0,vi=0,ul=!1,Mn=null,fh=null;const dh=document.querySelector("#save-status");let Wd=null;function En(n,e="idle"){dh.textContent=n,dh.dataset.state=e}function J1(){window.clearTimeout(fh),fh=window.setTimeout(()=>{const n=z.state.selection.main;zd(window.localStorage,me,{anchor:n.anchor,head:n.head,scrollTop:z.scrollDOM.scrollTop})},180)}function jd(){return window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function oa(){window.clearTimeout(Mn),En("Saving…","saving"),Mn=window.setTimeout(()=>{const n=z.state.doc.toString(),e=lt,t=me,i=Et,r=vi;nn(It,Ue.documentSave,{content:n,version:e},t,(s={})=>{ra||t!==me||i!==Et||r!==vi||e!==lt||En(s.result==="ok"||s.result==="unavailable"?"Saved":"Save failed",s.result==="failed"?"error":"saved")},i)},700)}function eS(n){if((n.selectionSet||n.viewportChanged||n.docChanged)&&J1(),!n.docChanged||ul)return;lt+=1,Wd?.documentChanged();const e=[];n.changes.iterChanges((t,i,r,s,o)=>{e.push({from:t,to:i,insert:o.toString(),newFrom:r,newTo:s})}),nn(It,Ue.documentChanged,{changes:e,version:lt},me,void 0,Et),oa()}const Vd=[ng(),og(),xO(),v0(),q1({refreshResources:()=>new Promise((n,e)=>{const t=me,i=vi,r=Et,s=window.setTimeout(()=>e(new Error("Resource refresh timed out")),5e3);nn(It,Ue.documentResources,{},t,(o={})=>{window.clearTimeout(s),t!==me||i!==vi||o.result!=="ok"||o.documentID!==t||!Array.isArray(o.resources)?e(new Error("Document resources are unavailable")):n(o.resources)},r)})}),Gg(),hO(),OO(),_.allowMultipleSelections.of(!0),Ug(),c0(),uA(),xA({override:[v1],activateOnTyping:!0}),MO(),FO(),CO(),Qb(),f1(),i1(Ed,{delay:350}),Eu(k1),yb({jsx:!0}),ms.of([Py,...mA,...Qy,...Vb,...Z0,...jg,...nd]),sa.of(_.readOnly.of(!1)),ls.of(Ud(jd())),R.updateListener.of(eS),R.contentAttributes.of({autocapitalize:"off",autocomplete:"off",spellcheck:"false"})],z=new R({state:_.create({doc:"",extensions:Vd}),parent:_1});function _t(n,e=me,t=0,i=!1){window.clearTimeout(Mn),vi+=1;const r=z.state.selection.main;zd(window.localStorage,me,{anchor:r.anchor,head:r.head,scrollTop:z.scrollDOM.scrollTop}),ul=!0;const s=e!==me;me=e,lt=t;const o=I1(window.localStorage,me,(n??"").length),l=o?{anchor:o.anchor,head:o.head}:{anchor:0};if(s){const a=ls.get(z.state),c=z.state.readOnly;let h=_.create({doc:n??"",extensions:Vd,selection:l});h=h.update({effects:[ls.reconfigure(a),sa.reconfigure(_.readOnly.of(c))]}).state,z.setState(h)}else z.dispatch({changes:{from:0,to:z.state.doc.length,insert:n??""},selection:l,scrollIntoView:!0});o&&window.requestAnimationFrame(()=>{z.scrollDOM.scrollTop=o.scrollTop}),ul=!1,i&&nn(It,Ue.documentChanged,{content:z.state.doc.toString(),version:lt},me,void 0,Et),En("Saved","saved")}function ph(n){if(z.state.readOnly)return!1;const e=z.state.selection.main;return z.dispatch({changes:{from:e.from,to:e.to,insert:n},selection:{anchor:e.from+n.length},userEvent:"input"}),z.focus(),!0}async function as(){if(z.state.readOnly)return!1;const n=z.state.doc.toString(),e=vi,t=lt,i=()=>!z.state.readOnly&&e===vi&&t===lt&&n===z.state.doc.toString();try{const[{format:r},{default:s},{default:o}]=await Promise.all([Cs(()=>import("./standalone-Cayz_KD-.js"),[],import.meta.url),Cs(()=>import("./babel-BktJt1uC.js"),[],import.meta.url),Cs(()=>import("./estree-DFfjoHvx.js"),[],import.meta.url)]),l=await r(n,{parser:"babel",plugins:[s,o],semi:!0,singleQuote:!0,trailingComma:"es5"});return i()?(_t(l,me,lt+1,!0),oa(),!0):!1}catch(r){return i()&&nn(It,"diagnostics.publish",{message:String(r),severity:"error"},me,void 0,Et),!1}}function Li(n){z.dispatch({effects:sa.reconfigure(_.readOnly.of(!!n))})}function cs(n){const e=n==="dark"||n==="light"?n:jd();document.documentElement.dataset.theme=e,z.dispatch({effects:ls.reconfigure(Ud(e))})}function tS(n=[]){const e=n.map(t=>({from:Math.max(0,Math.min(t.from??0,z.state.doc.length)),to:Math.max(0,Math.min(t.to??t.from??0,z.state.doc.length)),severity:t.severity??"error",message:t.message??"Unknown error"}));z.dispatch(wd(z.state,e))}function st(n,e){It.registerHandler(n,async(t={},i=()=>{})=>{try{if(Et!==null&&n!==Ue.documentOpen&&n!==Ue.editorSetTheme&&(t.documentID!==me||t.sessionID!==Et))throw new Error("The editor session changed.");i({result:"ok",...await e(t)})}catch(r){i({result:"failed",message:String(r)})}})}p1(n=>{It=n,st(Ue.documentOpen,({payload:e={},documentID:t,sessionID:i=null})=>(Et=i,_t(e.content,t,e.version??0),ia(z,e.resources??[]),Li(e.readOnly),e.dirty&&(En("Restored unsaved edits","editing"),e.readOnly||oa()),{protocolVersion:Zd})),st(Ue.documentReplace,({payload:e={},documentID:t})=>{if(z.state.readOnly||e.expectedContent!==void 0&&e.expectedContent!==z.state.doc.toString())throw new Error("The file changed or is read only.");return _t(e.content,t,e.version??lt,!0),{}}),st(Ue.documentSetReadOnly,({payload:e={}})=>(Li(e.readOnly),{readOnly:!!e.readOnly})),st(Ue.editorInsert,({payload:e={}})=>({inserted:ph(e.content??"")})),st(Ue.editorFormat,async()=>({formatted:await as()})),st(Ue.editorSetTheme,({payload:e={}})=>(cs(e.theme),{})),st(Ue.editorGetState,()=>({content:z.state.doc.toString(),version:lt,documentID:me,sessionID:Et,selection:{from:z.state.selection.main.from,to:z.state.selection.main.to}})),st(Ue.diagnosticsPublish,({payload:e={}})=>(tS(e.items),{})),st("editor_setValue",({value:e})=>(_t(e),{})),st("editor_insertValue",({value:e})=>({inserted:ph(e??"")})),st("editor_getValue",()=>({value:z.state.doc.toString()})),st("editor_setReadonly",({readonly:e})=>(Li(e),{readonly:!!e})),st("editor_formatCode",async()=>({formatted:await as()})),m1(It)});ra&&(document.querySelector("#native-editor").hidden=!0,document.querySelector("#web-studio").hidden=!1,iS());async function iS(){const n=document.querySelector("#pair-dialog"),e=document.querySelector("#pair-form"),t=document.querySelector("#pair-error"),i=document.querySelector("#package-select"),r=document.querySelector("#file-select"),s=document.querySelector("#connection-status"),o=document.querySelector("#disconnect-button"),l=document.querySelector("#studio-grid"),a=document.querySelector(".editor-column"),c=document.querySelector("#recovery-banner"),h=document.querySelector("#conflict-banner"),u=document.querySelector("#command-dialog"),f=document.querySelector("#command-search"),d=document.querySelector("#command-list"),p=document.querySelector("#compare-dialog");let m=window.sessionStorage.getItem("scriptwidget.web-studio.token")||"",O=[],y=null,b=null,x=null,C=0,k=null,S="",v="",U=null,F=V1(),j="",E="",M=null;function Y(w="Session ended. Enter the new code shown on your device."){m="",window.sessionStorage.removeItem("scriptwidget.web-studio.token"),o.hidden=!0,Q({type:"DISCONNECTED"}),s.textContent=w,Li(!0),n.open||n.showModal()}function Q(w){F=Y1(F,w);const Z={connecting:"Connecting",connected:"Connected",offline:"Offline",disconnected:"Disconnected"},X={idle:"Ready",draft:"Draft saved locally",saving:"Saving…",saved:"Saved",error:"Save failed",conflict:"Conflict"};s.dataset.state=F.connection,document.querySelector("#status-connection").textContent=Z[F.connection]||F.connection,En(X[F.save]||F.save,F.save),document.querySelector("#dirty-indicator").hidden=!["draft","saving","error","conflict"].includes(F.save),document.querySelector("#status-preview").textContent=F.preview==="requested"?"Preview requested":"Preview idle",document.querySelector("#preview-detail").textContent=F.preview==="requested"?"Requested on device":"Not requested"}const D=new H1({token:()=>m,onUnauthorized:()=>Y()}),P=(w,Z)=>D.request(w,Z);M=new N1(({packageID:w,path:Z,content:X,baseRevision:ne})=>P("/api/v1/document",{method:"PUT",body:JSON.stringify({package:w,path:Z,content:X,baseRevision:ne})}));async function V(w){m=(await P("/api/v1/pair",{method:"POST",body:JSON.stringify({code:w})})).token,window.sessionStorage.setItem("scriptwidget.web-studio.token",m),o.hidden=!1,Q({type:"CONNECTED"}),le()}function le(){window.clearInterval(y),y=window.setInterval(async()=>{if(m)try{const w=await P("/api/v1/session");if(!navigator.onLine)return;I(w),Q({type:"CONNECTED"})}catch(w){w.status!==401&&(s.textContent=`Interrupted · ${w.message}`,Q({type:"OFFLINE"}))}},5e3)}async function J(){if(O=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...O.map(Z=>new Option(Z.name,Z.id))),!O.length){s.textContent="No editable widgets",Li(!0);return}await ee()}async function ee(){const w=O.find(ne=>ne.id===i.value),Z=w?.files||[];r.replaceChildren(...Z.map(ne=>new Option(ne,ne)));const X=Z.includes(w?.entry)?w.entry:Z[0];X&&(r.value=X),await G()}async function q(w=""){O=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...O.map(Oe=>new Option(Oe.name,Oe.id))),j&&(i.value=j);const X=O.find(Oe=>Oe.id===i.value),ne=X?.files||[];r.replaceChildren(...ne.map(Oe=>new Option(Oe,Oe))),r.value=ne.includes(w)?w:ne.includes(E)?E:X?.entry||ne[0]}async function G(){if(!i.value||!r.value)return;const w=new URLSearchParams({package:i.value,path:r.value}),Z=await P(`/api/v1/document?${w}`),X=`${i.value}/${r.value}`;j=i.value,E=r.value,S=Z.revision,v=Z.content,U=null,h.hidden=!0,_t(Z.content,X,0),ia(z,O.find(Oe=>Oe.id===j)?.files??[]),M.open({documentID:X,packageID:j,path:E,revision:Z.revision,content:Z.content}),Li(!!Z.readOnly),ce(Z);const ne=j1(window.localStorage,X,Z.content,Z.revision);c.hidden=!ne,c._draft=ne,document.querySelector("#recovery-message").textContent=ne?.isStale?"The device version also changed. Review before saving.":"Restore it or keep the device version.",s.textContent="Connected",Q({type:"CONNECTED"}),o.hidden=!1,ge(),le(),Me()}function ce(w){document.querySelector("#breadcrumb-package").textContent=w.packageName||i.value,document.querySelector("#breadcrumb-file").textContent=r.value,document.querySelector("#editor-tab-name").textContent=r.value,document.querySelector("#revision-detail").textContent=S?S.slice(0,8):"—",document.querySelector("#access-detail").textContent=w.readOnly?"Read only":"Editable"}function I(w){w.device&&(document.querySelector("#device-name").textContent=w.device.name||w.device.model,document.querySelector("#device-system").textContent=`${w.device.model} · ${w.device.system}`),w.preview?.package&&(document.querySelector("#preview-target").textContent=w.preview.package),w.preview?.snapshotSequence&&te()}async function te(){try{const w=await D.requestBlob("/api/v1/preview"),Z=URL.createObjectURL(w),X=document.querySelector("#device-preview"),ne=k;k=Z,X.onload=()=>{ne&&URL.revokeObjectURL(ne)},X.src=Z,X.hidden=!1,document.querySelector("#preview-detail").textContent="Rendered on device"}catch{}}function se(w){const Z=document.querySelector("#console-list"),X=document.createElement("li");for(X.className=w.level||"info",X.textContent=w.message||"",Z.append(X);Z.children.length>200;)Z.firstChild.remove();Z.scrollTop=Z.scrollHeight}function Me(){window.clearTimeout(x);const w=async()=>{if(m)try{const Z=await P(`/api/v1/events?after=${C}`);C=Z.nextSequence??C;for(const X of Z.events||[])X.type==="console"&&se(X.payload||{}),X.type==="preview.snapshot"&&te(),X.type==="preview.requested"&&(document.querySelector("#status-preview").textContent="Preview requested",document.querySelector("#preview-detail").textContent="Requested on device"),X.type==="files.changed"&&X.payload?.package===j&&q(E).catch(qe);Q({type:"CONNECTED"})}catch(Z){Z.status!==401&&Q({type:"OFFLINE"})}finally{m&&(x=window.setTimeout(w,1e3))}};w()}function ge(){const w=Ed(z);document.querySelector("#problems-list").replaceChildren(...w.map(X=>{const ne=z.state.doc.lineAt(X.from),Oe=document.createElement("li");Oe.className=`problem-item ${X.severity}`;const it=document.createElement("button");return it.type="button",it.innerHTML=`${X.severity==="error"?"●":"▲"}Ln ${ne.number}`,it.children[1].textContent=X.message,it.addEventListener("click",()=>{z.dispatch({selection:{anchor:X.from},scrollIntoView:!0}),z.focus()}),Oe.append(it),Oe})),document.querySelector("#problems-count").textContent=String(w.length),document.querySelector("#status-problem-count").textContent=String(w.length),document.querySelector("#problems-summary").textContent=w.length?`${w.filter(X=>X.severity==="error").length} errors, ${w.filter(X=>X.severity!=="error").length} warnings`:"No problems detected"}async function ie(w,Z,X=null){M.snapshot()?.content!==w&&M.edit(w),X&&M.rebase(X),Q({type:"SAVING"});try{const ne=await M.flush();if(ne.ignored){Z({result:"ok",ignored:!0});return}if(ne.skipped){Q({type:"SAVED"}),Z({result:"ok",skipped:!0});return}const Oe=ne.result||{},it=M.snapshot();S=it?.revision||S,v=it?.content||w,fo(window.localStorage,me),U=null,h.hidden=!0,document.querySelector("#revision-detail").textContent=S?.slice(0,8)||"—",Q({type:"SAVED",preview:Oe.preview?.state}),Z({result:"ok",...Oe})}catch(ne){ne.status===409?(U=ne.body,h.hidden=!1,Q({type:"CONFLICT",conflict:U})):Q({type:"SAVE_FAILED"}),Z({result:"failed",message:ne.message})}}It={registerHandler(){},callHandler(w,Z,X=()=>{}){if(w===Ue.documentSave)ie(Z.payload.content,X);else if(w===Ue.documentResources){const ne=me,Oe=j;P("/api/v1/packages").then(it=>{if(ne!==me||Z.documentID!==me||Oe!==j){X({result:"failed"});return}X({result:"ok",documentID:ne,resources:(it.packages??[]).find(Wn=>Wn.id===Oe)?.files??[]})}).catch(()=>X({result:"failed"}))}else X({result:"ok"})}},Wd={documentChanged(){const w=z.state.doc.toString();M.edit(w),hh(window.localStorage,me,w,M.snapshot()?.revision||S),Q({type:"EDITED"}),window.clearTimeout(b),b=window.setTimeout(ge,380)}};async function we(w,Z){if(!uh(F.save)){await w();return}try{if(window.clearTimeout(Mn),await ie(z.state.doc.toString(),()=>{}),!M.isDirty&&F.save!=="conflict"){await w();return}}catch{}window.confirm("This document has changes that are not saved on the device. A browser draft is available. Switch anyway?")?await w():Z()}i.addEventListener("change",()=>{const w=i.value;i.value=j,we(async()=>{i.value=w,await ee()},()=>{i.value=j}).catch(qe)}),r.addEventListener("change",()=>{const w=r.value;r.value=E,we(async()=>{r.value=w,await G()},()=>{r.value=E}).catch(qe)});function qe(w){s.textContent=w.message||String(w),Q({type:"SAVE_FAILED"})}e.addEventListener("submit",async w=>{w.preventDefault(),t.textContent="";try{await V(document.querySelector("#pair-code").value),n.close(),await J()}catch(Z){t.textContent=Z.message}}),o.addEventListener("click",async()=>{try{await P("/api/v1/session",{method:"DELETE"})}catch{}Y("Disconnected. Start a new session with the code on your device.")}),document.querySelector("#new-file").addEventListener("click",async()=>{const w=window.prompt("New package-relative text file","source/helper.js")?.trim();if(w)try{await P("/api/v1/document",{method:"POST",body:JSON.stringify({package:j,path:w})}),await q(w),await G()}catch(Z){qe(Z)}}),document.querySelector("#delete-file").addEventListener("click",async()=>{const w=O.find(Z=>Z.id===j);if(!E||E===w?.entry){window.alert("The widget entry file cannot be deleted.");return}if(window.confirm(`Delete ${E}? This cannot be undone.`))try{const Z=new URLSearchParams({package:j,path:E});await P(`/api/v1/document?${Z}`,{method:"DELETE"}),E="",await q(),await G()}catch(Z){qe(Z)}}),document.querySelector("#clear-console").addEventListener("click",()=>document.querySelector("#console-list").replaceChildren()),document.querySelector("#restore-draft").addEventListener("click",()=>{const w=c._draft;w&&(_t(w.content,w.documentID,lt+1),c.hidden=!0,hh(window.localStorage,me,w.content,S),Q({type:"EDITED"}),ge())}),document.querySelector("#discard-draft").addEventListener("click",()=>{fo(window.localStorage,me),c.hidden=!0}),document.querySelector("#reload-server").addEventListener("click",()=>{U&&(fo(window.localStorage,me),S=U.currentRevision,v=U.currentContent,_t(v,me,lt+1),M.open({documentID:me,packageID:j,path:E,revision:S,content:v}),U=null,h.hidden=!0,Q({type:"SAVED"}),ge())}),document.querySelector("#keep-local").addEventListener("click",()=>{U&&ie(z.state.doc.toString(),()=>{},U.currentRevision)}),document.querySelector("#compare-conflict").addEventListener("click",()=>{document.querySelector("#compare-local").textContent=z.state.doc.toString(),document.querySelector("#compare-server").textContent=U?.currentContent||v,p.showModal()}),p.querySelector("button").addEventListener("click",()=>p.close());function oe(){const w=a.classList.toggle("problems-collapsed");document.querySelector("#problems-toggle").setAttribute("aria-expanded",String(!w))}function Ae(w){l.classList.toggle(`show-${w}`)}document.querySelector("#problems-toggle").addEventListener("click",oe),document.querySelector("#status-problems").addEventListener("click",()=>{a.classList.remove("problems-collapsed")}),document.querySelector("#explorer-button").addEventListener("click",()=>Ae("explorer")),document.querySelector("#inspector-button").addEventListener("click",()=>Ae("inspector")),document.querySelectorAll("[data-close-panel]").forEach(w=>w.addEventListener("click",()=>l.classList.remove(`show-${w.dataset.closePanel}`)));const ae=[{name:"Save Document",keys:"⌘S",run:()=>{window.clearTimeout(Mn),ie(z.state.doc.toString(),()=>{})}},{name:"Format Document",keys:"⇧⌥F",run:as},{name:"Toggle Problems",keys:"⌘J",run:oe},{name:"Toggle Explorer",keys:"⌘⇧E",run:()=>Ae("explorer")},{name:"Toggle Inspector",keys:"",run:()=>Ae("inspector")},{name:"Use Light Theme",keys:"",run:()=>cs("light")},{name:"Use Dark Theme",keys:"",run:()=>cs("dark")}];function Ie(w=""){const Z=ae.filter(X=>X.name.toLowerCase().includes(w.toLowerCase()));d.replaceChildren(...Z.map(X=>{const ne=document.createElement("li"),Oe=document.createElement("button");Oe.type="button",Oe.className="command";const it=document.createElement("span");it.textContent=X.name;const Wn=document.createElement("kbd");return Wn.textContent=X.keys,Oe.append(it,Wn),Oe.addEventListener("click",()=>{u.close(),X.run()}),ne.append(Oe),ne}))}function tt(){Ie(),u.showModal(),f.value="",f.focus()}document.querySelector("#command-button").addEventListener("click",tt),f.addEventListener("input",()=>Ie(f.value)),document.addEventListener("keydown",w=>{const Z=w.metaKey||w.ctrlKey;Z&&w.shiftKey&&w.key.toLowerCase()==="p"?(w.preventDefault(),tt()):Z&&w.key.toLowerCase()==="s"?(w.preventDefault(),ae[0].run()):Z&&w.key.toLowerCase()==="j"?(w.preventDefault(),oe()):Z&&w.shiftKey&&w.key.toLowerCase()==="e"?(w.preventDefault(),Ae("explorer")):w.shiftKey&&w.altKey&&w.key.toLowerCase()==="f"&&(w.preventDefault(),as())}),z.dom.addEventListener("keyup",li),z.dom.addEventListener("mouseup",li);function li(){const w=z.state.selection.main.head,Z=z.state.doc.lineAt(w);document.querySelector("#cursor-position").textContent=`Ln ${Z.number}, Col ${w-Z.from+1}`}window.addEventListener("offline",()=>{s.textContent="Computer is offline",Q({type:"OFFLINE"})}),window.addEventListener("online",()=>{m&&P("/api/v1/session").then(w=>(I(w),Q({type:"CONNECTED"}),J())).catch(qe)}),window.addEventListener("beforeunload",w=>{uh(F.save)&&(w.preventDefault(),w.returnValue="")});try{await J()}catch{Y("Pair with the code shown on your device.")}}window.matchMedia?.("(prefers-color-scheme: dark)").addEventListener("change",()=>cs("system"));window.webkit||_t(`// ScriptWidget Studio -const widget = ( - - - -); -`); diff --git a/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js b/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js new file mode 100644 index 00000000..2c1a0aa7 --- /dev/null +++ b/macOS/ScriptWidgetMac/StudioEditor.bundle/assets/index-DIlVDbPO.js @@ -0,0 +1,59 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();const Yd="modulepreload",Nd=function(n,e){return new URL(n,e).href},al={},Cr=function(e,t,i){let s=Promise.resolve();if(t&&t.length>0){let c=function(h){return Promise.all(h.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const o=document.getElementsByTagName("link"),a=document.querySelector("meta[property=csp-nonce]"),l=a?.nonce||a?.getAttribute("nonce");s=c(t.map(h=>{if(h=Nd(h,i),h in al)return;al[h]=!0;const u=h.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(i)for(let p=o.length-1;p>=0;p--){const m=o[p];if(m.href===h&&(!u||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${h}"]${f}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Yd,u||(d.as="script"),d.crossOrigin="",d.href=h,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((p,m)=>{d.addEventListener("load",p),d.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${h}`)))})}))}function r(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&r(a.reason);return e().catch(r)})};let po=[],mh=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=mh[i])e=i+1;else return!0;if(e==t)return!1}}function ll(n){return n>=127462&&n<=127487}const cl=8205;function Gd(n,e,t=!0,i=!0){return(t?gh:_d)(n,e,i)}function gh(n,e,t){if(e==n.length)return e;e&&Oh(n.charCodeAt(e))&&yh(n.charCodeAt(e-1))&&e--;let i=Tr(n,e);for(e+=hl(i);e=0&&ll(Tr(n,o));)r++,o-=2;if(r%2==0)break;e+=2}else break}return e}function _d(n,e,t){for(;e>1;){let i=gh(n,e-2,t);if(i=56320&&n<57344}function yh(n){return n>=55296&&n<56320}function hl(n){return n<65536?1:2}class se{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=Bi(this,e,t);let s=[];return this.decompose(0,e,s,2),i.length&&i.decompose(0,i.length,s,3),this.decompose(t,this.length,s,1),kt.from(s,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=Bi(this,e,t);let i=[];return this.decompose(e,t,i,0),kt.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),s=new pn(this),r=new pn(e);for(let o=t,a=t;;){if(s.next(o),r.next(o),o=0,s.lineBreak!=r.lineBreak||s.done!=r.done||s.value!=r.value)return!1;if(a+=s.value.length,s.done||a>=i)return!0}}iter(e=1){return new pn(this,e)}iterRange(e,t=this.length){return new Ah(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let s=this.line(e).from;i=this.iterRange(s,Math.max(s,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new bh(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?se.empty:e.length<=32?new we(e):kt.from(we.split(e,[]))}}class we extends se{constructor(e,t=Jd(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.text[r],a=s+o.length;if((t?i:a)>=e)return new ep(s,a,i,o);s=a+1,i++}}decompose(e,t,i,s){let r=e<=0&&t>=this.length?this:new we(ul(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(s&1){let o=i.pop(),a=gs(r.text,o.text.slice(),0,r.length);if(a.length<=32)i.push(new we(a,o.length+r.length));else{let l=a.length>>1;i.push(new we(a.slice(0,l)),new we(a.slice(l)))}}else i.push(r)}replace(e,t,i){if(!(i instanceof we))return super.replace(e,t,i);[e,t]=Bi(this,e,t);let s=gs(this.text,gs(i.text,ul(this.text,0,e)),t),r=this.length+i.length-(t-e);return s.length<=32?new we(s,r):kt.from(we.split(s,[]),r)}sliceString(e,t=this.length,i=` +`){[e,t]=Bi(this,e,t);let s="";for(let r=0,o=0;r<=t&&oe&&o&&(s+=i),er&&(s+=a.slice(Math.max(0,e-r),t-r)),r=l+1}return s}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],s=-1;for(let r of e)i.push(r),s+=r.length+1,i.length==32&&(t.push(new we(i,s)),i=[],s=-1);return s>-1&&t.push(new we(i,s)),t}}class kt extends se{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,s){for(let r=0;;r++){let o=this.children[r],a=s+o.length,l=i+o.lines-1;if((t?l:a)>=e)return o.lineInner(e,t,i,s);s=a+1,i=l+1}}decompose(e,t,i,s){for(let r=0,o=0;o<=t&&r=o){let c=s&((o<=e?1:0)|(l>=t?2:0));o>=e&&l<=t&&!c?i.push(a):a.decompose(e-o,t-o,i,c)}o=l+1}}replace(e,t,i){if([e,t]=Bi(this,e,t),i.lines=r&&t<=a){let l=o.replace(e-r,t-r,i),c=this.lines-o.lines+l.lines;if(l.lines>4&&l.lines>c>>6){let h=this.children.slice();return h[s]=l,new kt(h,this.length-(t-e)+i.length)}return super.replace(r,a,l)}r=a+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` +`){[e,t]=Bi(this,e,t);let s="";for(let r=0,o=0;re&&r&&(s+=i),eo&&(s+=a.sliceString(e-o,t-o,i)),o=l+1}return s}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof kt))return 0;let i=0,[s,r,o,a]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;s+=t,r+=t){if(s==o||r==a)return i;let l=this.children[s],c=e.children[r];if(l!=c)return i+l.scanIdentical(c,t);i+=l.length+1}}static from(e,t=e.reduce((i,s)=>i+s.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new we(d,t)}let s=Math.max(32,i>>5),r=s<<1,o=s>>1,a=[],l=0,c=-1,h=[];function u(d){let p;if(d.lines>r&&d instanceof kt)for(let m of d.children)u(m);else d.lines>o&&(l>o||!l)?(f(),a.push(d)):d instanceof we&&l&&(p=h[h.length-1])instanceof we&&d.lines+p.lines<=32?(l+=d.lines,c+=d.length+1,h[h.length-1]=new we(p.text.concat(d.text),p.length+1+d.length)):(l+d.lines>s&&f(),l+=d.lines,c+=d.length+1,h.push(d))}function f(){l!=0&&(a.push(h.length==1?h[0]:kt.from(h,c)),c=-1,l=h.length=0)}for(let d of e)u(d);return f(),a.length==1?a[0]:new kt(a,t)}}se.empty=new we([""],0);function Jd(n){let e=-1;for(let t of n)e+=t.length+1;return e}function gs(n,e,t=0,i=1e9){for(let s=0,r=0,o=!0;r=t&&(l>i&&(a=a.slice(0,i-s)),s0?1:(e instanceof we?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,s=this.nodes[i],r=this.offsets[i],o=r>>1,a=s instanceof we?s.text.length:s.children.length;if(o==(t>0?a:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((r&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(s instanceof we){let l=s.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,l.length>Math.max(0,e))return this.value=e==0?l:t>0?l.slice(e):l.slice(0,l.length-e),this;e-=l.length}else{let l=s.children[o+(t<0?-1:0)];e>l.length?(e-=l.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(l),this.offsets.push(t>0?1:(l instanceof we?l.text.length:l.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class Ah{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new pn(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:s}=this.cursor.next(e);return this.pos+=(s.length+e)*t,this.value=s.length<=i?s:t<0?s.slice(s.length-i):s.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class bh{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:s}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=s,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(se.prototype[Symbol.iterator]=function(){return this.iter()},pn.prototype[Symbol.iterator]=Ah.prototype[Symbol.iterator]=bh.prototype[Symbol.iterator]=function(){return this});class ep{constructor(e,t,i,s){this.from=e,this.to=t,this.number=i,this.text=s}get length(){return this.to-this.from}}function Bi(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function Ze(n,e,t=!0,i=!0){return Gd(n,e,t,i)}function tp(n){return n>=56320&&n<57344}function ip(n){return n>=55296&&n<56320}function Ne(n,e){let t=n.charCodeAt(e);if(!ip(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return tp(i)?(t-55296<<10)+(i-56320)+65536:t}function fa(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function Qt(n){return n<65536?1:2}const mo=/\r\n?|\n/;var De=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(De||(De={}));class Zt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return r+(e-s);r+=a}else{if(i!=De.Simple&&c>=e&&(i==De.TrackDel&&se||i==De.TrackBefore&&se))return null;if(c>e||c==e&&t<0&&!a)return e==s||t<0?r:r+l;r+=l}s=c}if(e>s)throw new RangeError(`Position ${e} is out of range for changeset of length ${s}`);return r}touchesRange(e,t=e){for(let i=0,s=0;i=0&&s<=t&&a>=e)return st?"cover":!0;s=a}return!1}toString(){let e="";for(let t=0;t=0?":"+s:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new Zt(e)}static create(e){return new Zt(e)}}class Re extends Zt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return go(this,(t,i,s,r,o)=>e=e.replace(s,s+(i-t),o),!1),e}mapDesc(e,t=!1){return Oo(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let s=0,r=0;s=0){t[s]=a,t[s+1]=o;let l=s>>1;for(;i.length0&&Ht(i,t,r.text),r.forward(h),a+=h}let c=e[o++];for(;a>1].toJSON()))}return e}static of(e,t,i){let s=[],r=[],o=0,a=null;function l(h=!1){if(!h&&!s.length)return;of||u<0||f>t)throw new RangeError(`Invalid change range ${u} to ${f} (in doc of length ${t})`);let p=d?typeof d=="string"?se.of(d.split(i||mo)):d:se.empty,m=p.length;if(u==f&&m==0)return;uo&&Xe(s,u-o,-1),Xe(s,f-u,m),Ht(r,s,p),o=f}}return c(e),l(!a),a}static empty(e){return new Re(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let s=0;sa&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(r.length==1)t.push(r[0],0);else{for(;i.length=0&&t<=0&&t==n[s+1]?n[s]+=e:s>=0&&e==0&&n[s]==0?n[s+1]+=t:i?(n[s]+=e,n[s+1]+=t):n.push(e,t)}function Ht(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)a=n.sections[o++],l=n.sections[o++];e(s,c,r,h,u),s=c,r=h}}}function Oo(n,e,t,i=!1){let s=[],r=i?[]:null,o=new Sn(n),a=new Sn(e);for(let l=-1;;){if(o.done&&a.len||a.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&a.ins==-1){let c=Math.min(o.len,a.len);Xe(s,c,-1),o.forward(c),a.forward(c)}else if(a.ins>=0&&(o.ins<0||l==o.i||o.off==0&&(a.len=0&&l=0){let c=0,h=o.len;for(;h;)if(a.ins==-1){let u=Math.min(h,a.len);c+=u,h-=u,a.forward(u)}else if(a.ins==0&&a.lenl||o.ins>=0&&o.len>l)&&(a||i.length>c),r.forward2(l),o.forward(l)}}}}class Sn{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?se.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?se.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Yt{constructor(e,t,i,s){this.from=e,this.to=t,this.flags=i,this.goalColumn=s}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get undirectional(){return(this.flags&64)>0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}map(e,t=-1){let i,s;return this.empty?i=s=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),s=e.mapPos(this.to,-1)),i==this.from&&s==this.to?this:new Yt(i,s,this.flags,this.goalColumn)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return A.range(e,t,void 0,void 0,i);let s=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return A.range(this.anchor,s,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return A.range(e.anchor,e.head)}static create(e,t,i,s){return new Yt(e,t,i,s)}}class A{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:A.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new A(e.ranges.map(t=>Yt.fromJSON(t)),e.main)}static single(e,t=e){return new A([A.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,s=0;ss.from-r.from),t=e.indexOf(i);for(let s=1;sr.head?A.range(l,a):A.range(a,l))}}return new A(e,t)}}function xh(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let da=0;class K{constructor(e,t,i,s,r){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=s,this.id=da++,this.default=e([]),this.extensions=typeof r=="function"?r(this):r}get reader(){return this}static define(e={}){return new K(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:pa),!!e.static,e.enables)}of(e){return new Os([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Os(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new Os(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function pa(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class Os{constructor(e,t,i,s){this.dependencies=e,this.facet=t,this.type=i,this.value=s,this.id=da++}dynamicSlot(e){var t;let i=this.value,s=this.facet.compareInput,r=this.id,o=e[r]>>1,a=this.type==2,l=!1,c=!1,h=[];for(let u of this.dependencies)u=="doc"?l=!0:u=="selection"?c=!0:(((t=e[u.id])!==null&&t!==void 0?t:1)&1)==0&&h.push(e[u.id]);return{create(u){return u.values[o]=i(u),1},update(u,f){if(l&&f.docChanged||c&&(f.docChanged||f.selection)||yo(u,h)){let d=i(u);if(a?!fl(d,u.values[o],s):!s(d,u.values[o]))return u.values[o]=d,1}return 0},reconfigure:(u,f)=>{let d,p=f.config.address[r];if(p!=null){let m=Cs(f,p);if(this.dependencies.every(g=>g instanceof K?f.facet(g)===u.facet(g):g instanceof Te?f.field(g,!1)==u.field(g,!1):!0)||(a?fl(d=i(u),m,s):s(d=i(u),m)))return u.values[o]=m,0}else d=i(u);return u.values[o]=d,1}}}get extension(){return this}}function fl(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[l.id]),s=t.map(l=>l.type),r=i.filter(l=>!(l&1)),o=n[e.id]>>1;function a(l){let c=[];for(let h=0;hi===s),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Vn).find(i=>i.field==this);return(t?.create||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,s)=>{let r=i.values[t],o=this.updateF(r,s);return this.compareF(r,o)?0:(i.values[t]=o,1)},reconfigure:(i,s)=>{let r=i.facet(Vn),o=s.facet(Vn),a;return(a=r.find(l=>l.field==this))&&a!=o.find(l=>l.field==this)?(i.values[t]=a.create(i),1):s.config.address[this.id]!=null?(i.values[t]=s.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Vn.of({field:this,create:e})]}get extension(){return this}}const fi={lowest:4,low:3,default:2,high:1,highest:0};function sn(n){return e=>new vh(e,n)}const ri={highest:sn(fi.highest),high:sn(fi.high),default:sn(fi.default),low:sn(fi.low),lowest:sn(fi.lowest)};class vh{constructor(e,t){this.inner=e,this.prec=t}get extension(){return this}}class Gi{of(e){return new Ao(this,e)}reconfigure(e){return Gi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Ao{constructor(e,t){this.compartment=e,this.inner=t}get extension(){return this}}class Ps{constructor(e,t,i,s,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=s,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let s=[],r=Object.create(null),o=new Map;for(let f of sp(e,t,o))f instanceof Te?s.push(f):(r[f.facet.id]||(r[f.facet.id]=[])).push(f);let a=Object.create(null),l=[],c=[];for(let f of s)a[f.id]=c.length<<1,c.push(d=>f.slot(d));let h=i?.config.facets;for(let f in r){let d=r[f],p=d[0].facet,m=h&&h[f]||[];if(d.every(g=>g.type==0))if(a[p.id]=l.length<<1|1,pa(m,d))l.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));l.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(a[g.id]=l.length<<1|1,l.push(g.value)):(a[g.id]=c.length<<1,c.push(y=>g.dynamicSlot(y)));a[p.id]=c.length<<1,c.push(g=>np(g,p,d))}}let u=c.map(f=>f(a));return new Ps(e,o,u,a,l,r)}}function sp(n,e,t){let i=[[],[],[],[],[]],s=new Map;function r(o,a){let l=s.get(o);if(l!=null){if(l<=a)return;let c=i[l].indexOf(o);c>-1&&i[l].splice(c,1),o instanceof Ao&&t.delete(o.compartment)}if(s.set(o,a),Array.isArray(o))for(let c of o)r(c,a);else if(o instanceof Ao){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let c=e.get(o.compartment)||o.inner;t.set(o.compartment,c),r(c,a)}else if(o instanceof vh)r(o.inner,o.prec);else if(o instanceof Te)i[a].push(o),o.provides&&r(o.provides,a);else if(o instanceof Os)i[a].push(o),o.facet.extensions&&r(o.facet.extensions,fi.default);else{let c=o.extension;if(!c)throw new Error(`Unrecognized extension value in extension set (${o}).`);if(c==o)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(c,a)}}return r(n,fi.default),i.reduce((o,a)=>o.concat(a))}function mn(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let s=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|s}function Cs(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const wh=K.define(),bo=K.define({combine:n=>n.some(e=>e),static:!0}),kh=K.define({combine:n=>n.length?n[0]:void 0,static:!0}),Qh=K.define(),Ph=K.define(),Ch=K.define(),Th=K.define({combine:n=>n.length?n[0]:!1});class Wt{constructor(e,t){this.type=e,this.value=t}static define(){return new rp}}class rp{of(e){return new Wt(this,e)}}class op{constructor(e){this.map=e}of(e){return new z(this,e)}}class z{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new z(this.type,t)}is(e){return this.type==e}static define(e={}){return new op(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let s of e){let r=s.map(t);r&&i.push(r)}return i}}z.reconfigure=z.define();z.appendConfig=z.define();class Pe{constructor(e,t,i,s,r,o){this.startState=e,this.changes=t,this.selection=i,this.effects=s,this.annotations=r,this.scrollIntoView=o,this._doc=null,this._state=null,i&&xh(i,t.newLength),r.some(a=>a.type==Pe.time)||(this.annotations=r.concat(Pe.time.of(Date.now())))}static create(e,t,i,s,r,o){return new Pe(e,t,i,s,r,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(Pe.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}Pe.time=Wt.define();Pe.userEvent=Wt.define();Pe.addToHistory=Wt.define();Pe.remote=Wt.define();function ap(n,e){let t=[];for(let i=0,s=0;;){let r,o;if(i=n[i]))r=n[i++],o=n[i++];else if(s=0;s--){let r=i[s](n);r instanceof Pe?n=r:Array.isArray(r)&&r.length==1&&r[0]instanceof Pe?n=r[0]:n=$h(e,Zi(r),!1)}return n}function cp(n){let e=n.startState,t=e.facet(Ch),i=n;for(let s=t.length-1;s>=0;s--){let r=t[s](n);r&&Object.keys(r).length&&(i=Rh(i,So(e,r,n.changes.newLength),!0))}return i==n?n:Pe.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const hp=[];function Zi(n){return n==null?hp:Array.isArray(n)?n:[n]}var ye=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(ye||(ye={}));const up=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let xo;try{xo=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function fp(n){if(xo)return xo.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||up.test(t)))return!0}return!1}function dp(n){return e=>{if(!/\S/.test(e))return ye.Space;if(fp(e))return ye.Word;for(let t=0;t-1)return ye.Word;return ye.Other}}class _{constructor(e,t,i,s,r,o){this.config=e,this.doc=t,this.selection=i,this.values=s,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(let a=0;as.set(c,l)),t=null),s.set(a.value.compartment,a.value.extension)):a.is(z.reconfigure)?(t=null,i=a.value):a.is(z.appendConfig)&&(t=null,i=Zi(i).concat(a.value));let r;t?r=e.startState.values.slice():(t=Ps.resolve(i,s,this),r=new _(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(l,c)=>c.reconfigure(l,this),null).values);let o=e.startState.facet(bo)?e.newSelection:e.newSelection.asSingle();new _(t,e.newDoc,o,r,(a,l)=>l.update(a,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:A.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),s=this.changes(i.changes),r=[i.range],o=Zi(i.effects);for(let a=1;ao.spec.fromJSON(a,l)))}}return _.create({doc:e.doc,selection:A.fromJSON(e.selection),extensions:t.extensions?s.concat([t.extensions]):s})}static create(e={}){let t=Ps.resolve(e.extensions||[],new Map),i=e.doc instanceof se?e.doc:se.of((e.doc||"").split(t.staticFacet(_.lineSeparator)||mo)),s=e.selection?e.selection instanceof A?e.selection:A.single(e.selection.anchor,e.selection.head):A.single(0);return xh(s,i.length),t.staticFacet(bo)||(s=s.asSingle()),new _(t,i,s,t.dynamicSlots.map(()=>null),(r,o)=>o.create(r),null)}get tabSize(){return this.facet(_.tabSize)}get lineBreak(){return this.facet(_.lineSeparator)||` +`}get readOnly(){return this.facet(Th)}phrase(e,...t){for(let i of this.facet(_.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,s)=>{if(s=="$")return"$";let r=+(s||1);return!r||r>t.length?i:t[r-1]})),e}languageDataAt(e,t,i=-1){let s=[];for(let r of this.facet(wh))for(let o of r(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&s.push(o[e]);return s}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return dp(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:s}=this.doc.lineAt(e),r=this.charCategorizer(e),o=e-i,a=e-i;for(;o>0;){let l=Ze(t,o,!1);if(r(t.slice(l,o))!=ye.Word)break;o=l}for(;an.length?n[0]:4});_.lineSeparator=kh;_.readOnly=Th;_.phrases=K.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(s=>n[s]==e[s])}});_.languageData=wh;_.changeFilter=Qh;_.transactionFilter=Ph;_.transactionExtender=Ch;Gi.reconfigure=z.define();function yt(n,e,t={}){let i={};for(let s of n)for(let r of Object.keys(s)){let o=s[r],a=i[r];if(a===void 0)i[r]=o;else if(!(a===o||o===void 0))if(Object.hasOwnProperty.call(t,r))i[r]=t[r](a,o);else throw new Error("Config merge conflict for field "+r)}for(let s in e)i[s]===void 0&&(i[s]=e[s]);return i}class Jt{eq(e){return this==e}range(e,t=e){return vo.create(e,t,this)}}Jt.prototype.startSide=Jt.prototype.endSide=0;Jt.prototype.point=!1;Jt.prototype.mapMode=De.TrackDel;function ma(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let vo=class Kh{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Kh(e,t,i)}};function wo(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class ga{constructor(e,t,i,s){this.from=e,this.to=t,this.value=i,this.maxPoint=s}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,s=0){let r=i?this.to:this.from;for(let o=s,a=r.length;;){if(o==a)return o;let l=o+a>>1,c=r[l]-e||(i?this.value[l].endSide:this.value[l].startSide)-t;if(l==o)return c>=0?o:a;c>=0?a=l:o=l+1}}between(e,t,i,s){for(let r=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,r);rd||f==d&&c.startSide>0&&c.endSide<=0)continue;(d-f||c.endSide-c.startSide)<0||(o<0&&(o=f),c.point&&(a=Math.max(a,d-f)),i.push(c),s.push(f-o),r.push(d-o))}return{mapped:i.length?new ga(s,r,i,a):null,pos:o}}}class N{constructor(e,t,i,s){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=s}static create(e,t,i,s){return new N(e,t,i,s)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:s=0,filterTo:r=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(wo)),this.isEmpty)return t.length?N.of(t):this;let a=new Zh(this,null,-1).goto(0),l=0,c=[],h=new Bt;for(;a.value||l=0){let u=t[l++];h.addInner(u.from,u.to,u.value)||c.push(u)}else a.rangeIndex==1&&a.chunkIndexthis.chunkEnd(a.chunkIndex)||ra.to||r=r&&e<=r+o.length&&o.between(r,e-r,t-r,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return xn.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return xn.from(e).goto(t)}static compare(e,t,i,s,r=-1){let o=e.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),a=t.filter(u=>u.maxPoint>0||!u.isEmpty&&u.maxPoint>=r),l=dl(o,a,i),c=new rn(o,l,r),h=new rn(a,l,r);i.iterGaps((u,f,d)=>pl(c,u,h,f,d,s)),i.empty&&i.length==0&&pl(c,0,h,0,0,s)}static eq(e,t,i=0,s){s==null&&(s=999999999);let r=e.filter(h=>!h.isEmpty&&t.indexOf(h)<0),o=t.filter(h=>!h.isEmpty&&e.indexOf(h)<0);if(r.length!=o.length)return!1;if(!r.length)return!0;let a=dl(r,o),l=new rn(r,a,0).goto(i),c=new rn(o,a,0).goto(i);for(;;){if(l.to!=c.to||!ko(l.active,c.active)||l.point&&(!c.point||!ma(l.point,c.point)))return!1;if(l.to>s)return!0;l.next(),c.next()}}static spans(e,t,i,s,r=-1){let o=new rn(e,null,r).goto(t),a=t,l=o.openStart;for(;;){let c=Math.min(o.to,i);if(o.point){let h=o.activeForPoint(o.to),u=o.pointFroma&&(s.span(a,c,o.active,l),l=o.openEnd(c));if(o.to>i)return l+(o.point&&o.to>i?1:0);a=o.to,o.next()}}static of(e,t=!1){let i=new Bt;for(let s of e instanceof vo?[e]:t?pp(e):e)i.add(s.from,s.to,s.value);return i.finish()}static join(e){if(!e.length)return N.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let s=e[i];s!=N.empty;s=s.nextLayer)t=new N(s.chunkPos,s.chunk,t,Math.max(s.maxPoint,t.maxPoint));return t}}N.empty=new N([],[],null,-1);function pp(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(wo);e=i}return n}N.empty.nextLayer=N.empty;class Bt{finishChunk(e){this.chunks.push(new ga(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Bt)).add(e,t,i)}addInner(e,t,i){let s=e-this.lastTo||i.startSide-this.last.endSide;if(s<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return s<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(N.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=N.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function dl(n,e,t){let i=new Map;for(let r of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&s.push(new Zh(o,t,i,r));return s.length==1?s[0]:new xn(s)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)Rr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)Rr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),Rr(this.heap,0)}}}function Rr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let s=n[i];if(i+1=0&&(s=n[i+1],i++),t.compare(s)<0)break;n[i]=t,n[e]=s,e=i}}class rn{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=xn.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){jn(this.active,e),jn(this.activeTo,e),jn(this.activeRank,e),this.minActive=ml(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:s,rank:r}=this.cursor;for(;t0;)t++;Yn(this.active,t,i),Yn(this.activeTo,t,s),Yn(this.activeRank,t,r),e&&Yn(e,t,this.cursor.from),this.minActive=ml(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>e){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&jn(i,s)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let r=this.cursor.value;if(!r.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[s]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function pl(n,e,t,i,s,r){n.goto(e),t.goto(i);let o=i+s,a=i,l=i-e,c=!!r.boundChange;for(let h=!1;;){let u=n.to+l-t.to,f=u||n.endSide-t.endSide,d=f<0?n.to+l:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&ma(n.point,t.point)&&ko(n.activeForPoint(n.to),t.activeForPoint(t.to))||r.comparePoint(a,p,n.point,t.point),h=!1):(h&&r.boundChange(a),p>a&&!ko(n.active,t.active)&&r.compareRange(a,p,n.active,t.active),c&&po)break;a=d,f<=0&&n.next(),f>=0&&t.next()}}function ko(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function ml(n,e){let t=-1,i=1e9;for(let s=0;s=e)return s;if(s==n.length)break;r+=n.charCodeAt(s)==9?t-r%t:1,s=Ze(n,s)}return i===!0?-1:n.length}const Po="ͼ",gl=typeof Symbol>"u"?"__"+Po:Symbol.for(Po),Co=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Ol=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class ei{constructor(e,t){this.rules=[];let{finish:i}=t||{};function s(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function r(o,a,l,c){let h=[],u=/^@(\w+)\b/.exec(o[0]),f=u&&u[1]=="keyframes";if(u&&a==null)return l.push(o[0]+";");for(let d in a){let p=a[d];if(/&/.test(d))r(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,l);else if(p&&typeof p=="object"){if(!u)throw new RangeError("The value of a property ("+d+") should be a primitive value.");r(s(d),p,h,f)}else p!=null&&h.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(h.length||f)&&l.push((i&&!u&&!c?o.map(i):o).join(", ")+" {"+h.join(" ")+"}")}for(let o in e)r(s(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Ol[gl]||1;return Ol[gl]=e+1,Po+e.toString(36)}static mount(e,t,i){let s=e[Co],r=i&&i.nonce;s?r&&s.setNonce(r):s=new mp(e,r),s.mount(Array.isArray(t)?t:[t],e)}}let yl=new Map;class mp{constructor(e,t){let i=e.ownerDocument||e,s=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&s.CSSStyleSheet){let r=yl.get(i);if(r)return e[Co]=r;this.sheet=new s.CSSStyleSheet,yl.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Co]=this}mount(e,t){let i=this.sheet,s=0,r=0;for(let o=0;o-1&&(this.modules.splice(l,1),r--,l=-1),l==-1){if(this.modules.splice(r++,0,a),i)for(let c=0;c",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},Al=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),gp=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),Op=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),bl=typeof navigator<"u"&&/Mac/.test(navigator.platform),yp=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Ap=Al&&(bl||+Al[1]<57)||Op&&bl;for(var Fe=0;Fe<10;Fe++)ti[48+Fe]=ti[96+Fe]=String(Fe);for(var Fe=1;Fe<=24;Fe++)ti[Fe+111]="F"+Fe;for(var Fe=65;Fe<=90;Fe++)ti[Fe]=String.fromCharCode(Fe+32),vn[Fe]=String.fromCharCode(Fe);for(var $r in ti)vn.hasOwnProperty($r)||(vn[$r]=ti[$r]);function bp(n){var e=Ap&&(n.ctrlKey||n.altKey||n.metaKey)||(gp||yp)&&n.shiftKey&&n.key&&n.key.length==1,t=!e&&n.key||(n.shiftKey?vn:ti)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}function he(){var n=arguments[0];typeof n=="string"&&(n=document.createElement(n));var e=1,t=arguments[1];if(t&&typeof t=="object"&&t.nodeType==null&&!Array.isArray(t)){for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var s=t[i];typeof s=="string"?n.setAttribute(i,s):s!=null&&(n[i]=s)}e++}for(;e2);var R={mac:vl||/Mac/.test(We.platform),windows:/Win/.test(We.platform),linux:/Linux|X11/.test(We.platform),ie:hr,ie_version:Eh?To.documentMode||6:$o?+$o[1]:Ro?+Ro[1]:0,gecko:Sl,gecko_version:Sl?+(/Firefox\/(\d+)/.exec(We.userAgent)||[0,0])[1]:0,chrome:!!Kr,chrome_version:Kr?+Kr[1]:0,ios:vl,android:/Android\b/.test(We.userAgent),webkit:xl,webkit_version:xl?+(/\bAppleWebKit\/(\d+)/.exec(We.userAgent)||[0,0])[1]:0,safari:Ko,safari_version:Ko?+(/\bVersion\/(\d+(\.\d+)?)/.exec(We.userAgent)||[0,0])[1]:0,tabSize:To.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Oa(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const Ts=Object.create(null);function ya(n,e,t){if(n==e)return!0;n||(n=Ts),e||(e=Ts);let i=Object.keys(n),s=Object.keys(e);if(i.length-0!=s.length-0)return!1;for(let r of i)if(r!=t&&(s.indexOf(r)==-1||n[r]!==e[r]))return!1;return!0}function Sp(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function wl(n,e,t){let i=!1;if(e)for(let s in e)t&&s in t||(i=!0,s=="style"?n.style.cssText="":n.removeAttribute(s));if(t)for(let s in t)e&&e[s]==t[s]||(i=!0,s=="style"?n.style.cssText=t[s]:n.setAttribute(s,t[s]));return i}function xp(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Ai(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,s;if(e.isBlockGap)i=-5e8,s=4e8;else{let{start:r,end:o}=Uh(e,t);i=(r?t?-3e8:-1:5e8)-1,s=(o?t?2e8:1:-6e8)+1}return new Ai(e,i,s,t,e.widget||null,!0)}static line(e){return new Fn(e)}static set(e,t=!1){return N.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}B.none=N.empty;class Un extends B{constructor(e){let{start:t,end:i}=Uh(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Oa(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Ts}eq(e){return this==e||e instanceof Un&&this.tagName==e.tagName&&ya(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Un.prototype.point=!1;class Fn extends B{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof Fn&&this.spec.class==e.spec.class&&ya(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}Fn.prototype.mapMode=De.TrackBefore;Fn.prototype.point=!0;class Ai extends B{constructor(e,t,i,s,r,o){super(t,i,r,e),this.block=s,this.isReplace=o,this.mapMode=s?t<=0?De.TrackBefore:De.TrackAfter:De.TrackDel}get type(){return this.startSide!=this.endSide?Le.WidgetRange:this.startSide<=0?Le.WidgetBefore:Le.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Ai&&vp(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Ai.prototype.point=!0;function Uh(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function vp(n,e){return n==e||!!(n&&e&&n.compare(e))}function Mi(n,e,t,i=0){let s=t.length-1;s>=0&&t[s]+i>=n?t[s]=Math.max(t[s],e):t.push(n,e)}class wn extends Jt{constructor(e,t,i){super(),this.tagName=e,this.attributes=t,this.rank=i}eq(e){return e==this||e instanceof wn&&this.tagName==e.tagName&&ya(this.attributes,e.attributes)}static create(e){return new wn(e.tagName,e.attributes||Ts,e.rank==null?50:Math.max(0,Math.min(e.rank,100)))}static set(e,t=!1){return N.of(e,t)}}wn.prototype.startSide=wn.prototype.endSide=-1;function kn(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function Zo(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function gn(n,e){if(!e.anchorNode)return!1;try{return Zo(n,e.anchorNode)}catch{return!1}}function ys(n){return n.nodeType==3?Qn(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function On(n,e,t,i){return t?kl(n,e,t,i,-1)||kl(n,e,t,i,1):!1}function ii(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Rs(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function kl(n,e,t,i,s){for(;;){if(n==t&&e==i)return!0;if(e==(s<0?0:It(n))){if(n.nodeName=="DIV")return!1;let r=n.parentNode;if(!r||r.nodeType!=1)return!1;e=ii(n)+(s<0?0:1),n=r}else if(n.nodeType==1){if(n=n.childNodes[e+(s<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=s<0?It(n):0}else return!1}}function It(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function $s(n,e){let{left:t,right:i}=n;if(t==i)return n;let s=e?t:i;return{left:s,right:s,top:n.top,bottom:n.bottom}}function wp(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function Fh(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function kp(n,e,t,i,s,r,o,a){let l=n.ownerDocument,c=l.defaultView||window;for(let h=n,u=!1;h&&!u;)if(h.nodeType==1){let f,d=h==l.body,p=1,m=1;if(d)f=wp(c);else{if(/^(fixed|sticky)$/.test(getComputedStyle(h).position)&&(u=!0),h.scrollHeight<=h.clientHeight&&h.scrollWidth<=h.clientWidth){h=h.assignedSlot||h.parentNode;continue}let b=h.getBoundingClientRect();({scaleX:p,scaleY:m}=Fh(h,b)),f={left:b.left,right:b.left+h.clientWidth*p,top:b.top,bottom:b.top+h.clientHeight*m}}let g=0,y=0;if(s=="nearest")e.top0&&e.bottom>f.bottom+y&&(y=e.bottom-f.bottom+o)):e.bottom>f.bottom-o&&(y=e.bottom-f.bottom+o,t<0&&e.top-y0&&e.right>f.right+g&&(g=e.right-f.right+r)):e.right>f.right-r&&(g=e.right-f.right+r,t<0&&e.leftf.bottom||e.leftf.right)&&(e={left:Math.max(e.left,f.left),right:Math.min(e.right,f.right),top:Math.max(e.top,f.top),bottom:Math.min(e.bottom,f.bottom)}),h=h.assignedSlot||h.parentNode}else if(h.nodeType==11)h=h.host;else break}function Dh(n,e=!0){let t=n.ownerDocument,i=null,s=null;for(let r=n.parentNode;r&&!(r==t.body||(!e||i)&&s);)if(r.nodeType==1)!s&&r.scrollHeight>r.clientHeight&&(s=r),e&&!i&&r.scrollWidth>r.clientWidth&&(i=r),r=r.assignedSlot||r.parentNode;else if(r.nodeType==11)r=r.host;else break;return{x:i,y:s}}class Qp{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?It(t):0),i,Math.min(e.focusOffset,i?It(i):0))}set(e,t,i,s){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=s}}function Lh(n){let e=[];for(let t=n;t;t=t.nodeType==11?t.host:t.parentNode)t.nodeType==1&&e.push({node:t,left:t.scrollLeft,top:t.scrollTop});return e}function Xh(n,e=!0){for(let{node:t,left:i,top:s}of n)e&&t.scrollTop!=s&&(t.scrollTop=s),t.scrollLeft!=i&&(t.scrollLeft=i)}let ui=null;R.safari&&R.safari_version>=26&&(ui=!1);function Bh(n){if(n.setActive)return n.setActive();if(ui)return n.focus(ui);let e=Lh(n);n.focus(ui==null?{get preventScroll(){return ui={preventScroll:!0},!0}}:void 0),ui||(ui=!1,Xh(e))}let Ql;function Qn(n,e,t=e){let i=Ql||(Ql=document.createRange());return i.setEnd(n,t),i.setStart(n,e),i}function Ei(n,e,t,i){let s={key:e,code:e,keyCode:t,which:t,cancelable:!0};i&&({altKey:s.altKey,ctrlKey:s.ctrlKey,shiftKey:s.shiftKey,metaKey:s.metaKey}=i);let r=new KeyboardEvent("keydown",s);r.synthetic=!0,n.dispatchEvent(r);let o=new KeyboardEvent("keyup",s);return o.synthetic=!0,n.dispatchEvent(o),r.defaultPrevented||o.defaultPrevented}function Pp(n){for(;n;){if(n&&(n.nodeType==9||n.nodeType==11&&n.host))return n;n=n.assignedSlot||n.parentNode}return null}function Cp(n,e){let t=e.focusNode,i=e.focusOffset;if(!t||e.anchorNode!=t||e.anchorOffset!=i)return!1;for(i=Math.min(i,It(t));;)if(i){if(t.nodeType!=1)return!1;let s=t.childNodes[i-1];s.contentEditable=="false"?i--:(t=s,i=It(t))}else{if(t==n)return!0;i=ii(t),t=t.parentNode}}function Ih(n){return n instanceof Window?n.pageYOffset>Math.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function qh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=It(t)}else if(t.parentNode&&!Rs(t))i=ii(t),t=t.parentNode;else return null}}function Wh(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(a.level==i)return o;(r<0||(s!=0?s<0?a.fromt:e[r].level>a.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r}}function jh(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(St[m+1]==-d){let g=St[m+2],y=g&2?s:g&4?g&1?r:s:0;y&&(ue[u]=ue[St[m]]=y),a=m;break}}else{if(St.length==189)break;St[a++]=u,St[a++]=f,St[a++]=l}else if((p=ue[u])==2||p==1){let m=p==s;l=m?0:1;for(let g=a-3;g>=0;g-=3){let y=St[g+2];if(y&2)break;if(m)St[g+2]|=2;else{if(y&4)break;St[g+2]|=4}}}}}function Mp(n,e,t,i){for(let s=0,r=i;s<=t.length;s++){let o=s?t[s-1].to:n,a=sl;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),ue[--p]=d;l=h}else r=c,l++}}}function Eo(n,e,t,i,s,r,o){let a=i%2?2:1;if(i%2==s%2)for(let l=e,c=0;ll&&o.push(new Ct(l,m.from,d));let g=m.direction==bi!=!(d%2);Uo(n,g?i+1:i,s,m.inner,m.from,m.to,o),l=m.to}p=m.to}else{if(p==t||(h?ue[p]!=a:ue[p]==a))break;p++}f?Eo(n,l,p,i+1,s,f,o):le;){let h=!0,u=!1;if(!c||l>r[c-1].to){let m=ue[l-1];m!=a&&(h=!1,u=m==16)}let f=!h&&a==1?[]:null,d=h?i:i+1,p=l;e:for(;;)if(c&&p==r[c-1].to){if(u)break e;let m=r[--c];if(!h)for(let g=m.from,y=c;;){if(g==e)break e;if(y&&r[y-1].to==g)g=r[--y].from;else{if(ue[g-1]==a)break e;break}}if(f)f.push(m);else{m.toue.length;)ue[ue.length]=256;let i=[],s=e==bi?0:1;return Uo(n,s,s,t,0,n.length,i),i}function Yh(n){return[new Ct(0,n,0)]}let Nh="";function Up(n,e,t,i,s){var r;let o=i.head-n.from,a=Ct.find(e,o,(r=i.bidiLevel)!==null&&r!==void 0?r:-1,i.assoc),l=e[a],c=l.side(s,t);if(o==c){let f=a+=s?1:-1;if(f<0||f>=e.length)return null;l=e[a=f],o=l.side(!s,t),c=l.side(s,t)}let h=Ze(n.text,o,l.forward(s,t));(hl.to)&&(h=c),Nh=n.text.slice(Math.min(o,h),Math.max(o,h));let u=a==(s?e.length-1:0)?null:e[a+(s?1:-1)];return u&&h==c&&u.level+(s?0:1)n.some(e=>e)}),nu=K.define({combine:n=>n.some(e=>e)}),su=K.define();class Ui{constructor(e,t,i,s,r,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=s,this.xMargin=r,this.isSnapshot=o}map(e){return e.empty?this:new Ui(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Ui(A.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const Nn=z.define({map:(n,e)=>n.map(e)}),ru=z.define();function ze(n,e,t){let i=n.facet(Jh);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const Dt=K.define({combine:n=>n.length?n[0]:!0});let Dp=0;const Ti=K.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let l=[];return o&&l.push(ur.of(c=>{let h=c.plugin(a);return h?o(h):B.none})),r&&l.push(r(a)),l})}static fromClass(e,t){return xe.define((i,s)=>new e(i,s),t)}}class Zr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(ze(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){ze(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){ze(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const ou=K.define(),xa=K.define(),ur=K.define(),au=K.define(),va=K.define(),Dn=K.define(),lu=K.define();function Pl(n,e){let t=n.state.facet(lu);if(!t.length)return t;let i=t.map(r=>r instanceof Function?r(n):r),s=[];return N.spans(i,e.from,e.to,{point(){},span(r,o,a,l){let c=r-e.from,h=o-e.from,u=s;for(let f=a.length-1;f>=0;f--,l--){let d=a[f].spec.bidiIsolate,p;if(d==null&&(d=Fp(e.text,c,h)),l>0&&u.length&&(p=u[u.length-1]).to==c&&p.direction==d)p.to=h,u=p.inner;else{let m={from:c,to:h,direction:d,inner:[]};u.push(m),u=m.inner}}}}),s}const cu=K.define();function wa(n){let e=0,t=0,i=0,s=0;for(let r of n.state.facet(cu)){let o=r(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(s=Math.max(s,o.bottom)))}return{left:e,right:t,top:i,bottom:s}}const hn=K.define();class ct{constructor(e,t,i,s){this.fromA=e,this.toA=t,this.fromB=i,this.toB=s}join(e){return new ct(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let s=e[t-1];if(!(s.fromA>i.toA)){if(s.toAs.push(new ct(r,o,a,l))),this.changedRanges=s}static create(e,t,i){return new Ks(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const Lp=[];class Se{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Lp}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Sp(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let s of this.children){if(s==e)return i;i+=s.length+s.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t,i){return null}domPosFor(e,t){let i=ii(this.dom),s=this.length?e>0:t>0;return new pt(this.parent.dom,i+(s?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof dr)return e;return null}static get(e){return e.cmTile}}class fr extends Se{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,s,r=e?.node==t?e:null,o=0;for(let a of this.children){if(a.sync(e),o+=a.length+a.breakAfter,s=i?i.nextSibling:t.firstChild,r&&s!=a.dom&&(r.written=!0),a.dom.parentNode==t)for(;s&&s!=a.dom;)s=Cl(s);else t.insertBefore(a.dom,s);i=a.dom}for(s=i?i.nextSibling:t.firstChild,r&&s&&(r.written=!0);s;)s=Cl(s);this.length=o}}function Cl(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class dr extends fr{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=Se.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,s=0,r=0;;)if(s==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&r++,s=t.pop()}else{let o=i.children[s++];if(o instanceof Lt)t.push(s),i=o,s=0;else{let a=r+o.length,l=e(o,r);if(l!==void 0)return l;r=a+o.breakAfter}}}resolveBlock(e,t){let i,s=-1,r,o=-1;if(this.blockTiles((a,l)=>{let c=l+a.length;if(e>=l&&e<=c){if(a.isWidget()&&t>=-1&&t<=1){if(a.flags&32)return!0;a.flags&16&&(i=void 0)}(le||e==l&&(t>1?a.length:a.covers(-1)))&&(!r||!a.isWidget()&&r.isWidget())&&(r=a,o=e-l)}}),!i&&!r)throw new Error("No tile at position "+e);return i&&t<0||!r?{tile:i,offset:s}:{tile:r,offset:o}}}class Lt extends fr{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new Lt(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class Ii extends fr{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let s=new Ii(t||document.createElement("div"),e);return(!t||!i)&&(s.flags|=4),s}get domAttrs(){return this.attrs}resolveInline(e,t,i){let s=null,r=-1,o=null,a=-1;function l(h,u){for(let f=0,d=0;f=u&&(p.isComposite()?l(p,u-d):(!o||o.isHidden&&(t>0&&!(o.flags&32)||i&&Bp(o,p)))&&(m>u||p.flags&32&&t<=1)?(o=p,a=u-d):(d=-1)&&(s=p,r=u-d)),d=m}}l(this,e);let c=(t<0?s:o)||s||o;return c?{tile:c,offset:c==s?r:a}:null}coordsIn(e,t,i){let s=this.resolveInline(e,t,!0);return s?s.tile.coordsIn(Math.max(0,s.offset),t,i):Xp(this)}domIn(e,t){let i=this.resolveInline(e,t);if(i){let{tile:s,offset:r}=i;if(this.dom.contains(s.dom))return s.isText()?new pt(s.dom,Math.min(s.dom.nodeValue.length,r)):s.domPosFor(r,s.flags&16?1:s.flags&32?-1:t);let o=i.tile.parent,a=!1;for(let l of o.children){if(a)return new pt(l.dom,0);l==i.tile&&(a=!0)}}return new pt(this.dom,0)}}function Xp(n){let e=n.dom.lastChild;if(!e)return n.dom.getBoundingClientRect();let t=ys(e);return t[t.length-1]||null}function Bp(n,e){let t=n.coordsIn(0,1),i=e.coordsIn(0,1);return t&&i&&i.tops&&(e=s);let r=e,o=e,a=0;e==0&&t<0||e==s&&t>=0?R.chrome||R.gecko||(e?(r--,a=1):o=0)?0:l.length-1];return R.safari&&!a&&c.width==0&&(c=Array.prototype.find.call(l,h=>h.width)||c),i==null?c:$s(c,(a?a>0:t<0)==i)}static of(e,t){let i=new pi(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class Si extends Se{constructor(e,t,i,s){super(e,t,s),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let s=this.widget.coordsAt(this.dom,e,t);if(s)return s;if(i)return $s(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let r=this.dom.getClientRects(),o=null;if(!r.length)return null;let a=this.flags&16?!0:this.flags&32?!1:e>0;for(let l=a?r.length-1:0;o=r[l],!(e>0?l==0:l==r.length-1||o.top0==i)}}class Ip{constructor(e){this.index=0,this.beforeBreak=!1,this.parents=[],this.tile=e}advance(e,t,i){let{tile:s,index:r,beforeBreak:o,parents:a}=this;for(;e||t>0;)if(s.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(r==s.children.length){if(!e&&!a.length)break;i&&i.leave(s),o=!!s.breakAfter,{tile:s,index:r}=a.pop(),r++}else{let l=s.children[r],c=l.breakAfter;(t>0?l.length<=e:l.length=0;a--){let l=t.marks[a],c=s.lastChild;if(c instanceof Ge&&c.mark.eq(l.mark))c.dom!=l.dom&&c.setDOM(Mr(l.dom)),s=c;else{if(this.cache.reused.get(l)){let u=Se.get(l.dom);u&&u.setDOM(Mr(l.dom))}let h=Ge.of(l.mark,l.dom);s.append(h),s=h}this.cache.reused.set(l,2)}let r=Se.get(e.text);r&&this.cache.reused.set(r,2);let o=new pi(e.text,e.text.nodeValue);o.flags|=8,this.pos=e.range.toB,s.append(o)}addInlineWidget(e,t,i){let s=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);s||this.flushBuffer();let r=this.ensureMarks(t,i);!s&&!(e.flags&16)&&r.append(this.getBuffer(1)),r.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=hu);let s=Ii.start(e,t||((i=this.cache.find(Ii))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=s)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let s=this.curLine;for(let r=e.length-1;r>=0;r--){let o=e[r],a;if(t>0&&(a=s.lastChild)&&a instanceof Ge&&a.mark.eq(o))s=a,t--;else{let l=Ge.of(o,(i=this.cache.find(Ge,c=>c.mark.eq(o)))===null||i===void 0?void 0:i.dom);s.append(l),s=l,t=0}}return s}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Tl(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(R.ios&&Tl(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(Er,0,32)||new Si(Er.toDOM(),0,Er,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=e.rank*102+e.value.rank,i=new qp(e.from,e.to,e.value,t),s=this.wrappers.length;for(;s>0&&(this.wrappers[s-1].rank-i.rank||this.wrappers[s-1].to-i.to)<0;)s--;this.wrappers.splice(s,0,i)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let s=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(r),t=r}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Zs,void 0,1);return i&&(i.flags=t),i||new Zs(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class zp{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:s,lineBreak:r,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=s;let a=this.textOff=Math.min(e,s.length);return r?null:s.slice(0,a)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Ms=[Si,Ii,pi,Ge,Zs,Lt,dr];for(let n=0;n[]),this.index=Ms.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let s=e.bucket,r=this.buckets[s],o=this.index[s];for(let a=0;a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let s=0,r=0,o=0;;){let a=os){let c=l-s;this.preserve(c,!o,!a),s=l,r+=c}if(!a)break;t&&a.fromA<=t.range.fromA&&a.toA>=t.range.toA?(this.forward(a.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(l-a);else{let c=l>0||a{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof Ge&&s.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?s.length&&(s.length=r=0):o instanceof Ge&&(s.shift(),r=Math.min(r,s.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,s=this.builder,r=-1,o=N.spans(this.decorations,e,t,{point:(a,l,c,h,u,f)=>{if(c instanceof Ai){if(this.disallowBlockEffectsFor[f]){if(c.block)throw new RangeError("Block decorations may not be specified via plugins");if(l>this.view.state.doc.lineAt(a).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(r=h.length,u>h.length)s.continueWidget(l-a);else{let d=c.widget||(c.block?qi.block:qi.inline),p=Yp(c),m=this.cache.findWidget(d,l-a,p)||Si.of(d,this.view,l-a,p);c.block?(c.startSide>0&&s.addLineStartIfNotCovered(i),s.addBlockWidget(m)):(s.ensureLine(i),s.addInlineWidget(m,h,u))}i=null}else i=Np(i,c);l>a&&this.text.skip(l-a)},span:(a,l,c,h)=>{for(let u=a;u-1&&(this.openWidget=o>r),this.openWidget||s.addLineStartIfNotCovered(i),this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let s=e.parentNode;;s=s.parentNode){let r=Se.get(s);if(s==this.view.contentDOM)break;r instanceof Ge?t.push(r):r?.isLine()?i=r:r instanceof Lt||(s.nodeName=="DIV"&&!i&&s!=this.view.contentDOM?i=new Ii(s,hu):i||t.push(Ge.of(new Un({tagName:s.nodeName.toLowerCase(),attributes:xp(s)}),s)))}return{line:i,marks:t}}}function Tl(n,e){let t=i=>{for(let s of i.children)if((e?s.isText():s.length)||t(s))return!0;return!1};return t(n)}function Yp(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const hu={class:"cm-line"};function Np(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&Oa(t,n),i&&(n.class+=" "+i)),n}function Hp(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof Ge&&e.push(i.mark)}return e}function Mr(n){let e=Se.get(n);return e&&e.setDOM(n.cloneNode()),n}class qi extends Ut{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}qi.inline=new qi("span");qi.block=new qi("div");const Er=new class extends Ut{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Rl{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=B.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new dr(e,e.contentDOM),this.updateInner([new ct(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:h,toA:u})=>uthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let s=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?s=this.domChanged.newSel.head:!rm(e.changes,this.hasComposition)&&!e.selectionSet&&(s=e.state.selection.main.head));let r=s>-1?_p(this.view,e.changes,s):null;if(this.domChanged=null,this.hasComposition){let{from:h,to:u}=this.hasComposition;i=new ct(h,u,e.changes.mapPos(h,-1),e.changes.mapPos(u,1)).addToSet(i.slice())}this.hasComposition=r?{from:r.range.fromB,to:r.range.toB}:null,(R.ie||R.chrome)&&!r&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,a=this.blockWrappers;this.updateDeco();let l=tm(o,this.decorations,e.changes);l.length&&(i=ct.extendWithRanges(i,l));let c=nm(a,this.blockWrappers,e.changes);return c.length&&(i=ct.extendWithRanges(i,c)),r&&!i.some(h=>h.fromA<=r.range.fromA&&h.toA>=r.range.toA)&&(i=r.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,r),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,a=new jp(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&Se.get(t.text)&&a.cache.reused.set(Se.get(t.text),2),this.tile=a.run(e,t),Do(o,a.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let r=R.chrome||R.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(r),r&&(r.written||i.selectionRange.focusNode!=r.node||!this.tile.dom.contains(r.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let s=[];if(this.view.viewport.from||this.view.viewport.to-1)&&gn(i,this.view.observer.selectionRange)&&!(s&&i.contains(s));if(!(r||t||o))return;let a=this.forceSelection;this.forceSelection=!1;let l=this.view.state.selection.main,c,h;if(l.empty?h=c=this.inlineDOMNearPos(l.anchor,l.assoc||1):(h=this.inlineDOMNearPos(l.head,l.head==l.from?1:-1),c=this.inlineDOMNearPos(l.anchor,l.anchor==l.from?1:-1)),R.gecko&&l.empty&&!this.hasComposition&&Gp(c)){let f=document.createTextNode("");this.view.observer.ignore(()=>c.node.insertBefore(f,c.node.childNodes[c.offset]||null)),c=h=new pt(f,0),a=!0}let u=this.view.observer.selectionRange;(a||!u.focusNode||(!On(c.node,c.offset,u.anchorNode,u.anchorOffset)||!On(h.node,h.offset,u.focusNode,u.focusOffset))&&!this.suppressWidgetCursorChange(u,l))&&(this.view.observer.ignore(()=>{R.android&&R.chrome&&i.contains(u.focusNode)&&sm(u.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let f=kn(this.view.root);if(f)if(l.empty){if(R.gecko){let d=Jp(c.node,c.offset);if(d&&d!=3){let p=(d==1?qh:Wh)(c.node,c.offset);p&&(c=new pt(p.node,p.offset))}}f.collapse(c.node,c.offset),l.bidiLevel!=null&&f.caretBidiLevel!==void 0&&(f.caretBidiLevel=l.bidiLevel)}else if(f.extend){f.collapse(c.node,c.offset);try{f.extend(h.node,h.offset)}catch{}}else{let d=document.createRange();l.anchor>l.head&&([c,h]=[h,c]),d.setEnd(h.node,h.offset),d.setStart(c.node,c.offset),f.removeAllRanges(),f.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),s&&s.focus())}),this.view.observer.setSelectionRange(c,h)),this.impreciseAnchor=c.precise?null:new pt(u.anchorNode,u.anchorOffset),this.impreciseHead=h.precise?null:new pt(u.focusNode,u.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&On(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=kn(e.root),{anchorNode:s,anchorOffset:r}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let a=o.posAtStart;if(t.head==a||t.head==a+o.length)return;let l=this.coordsAt(t.head,-1),c=this.coordsAt(t.head,1);if(!l||!c||l.bottom>c.top)return;let h=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(h.node,h.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let u=e.observer.selectionRange;e.docView.posFromDOM(u.anchorNode,u.anchorOffset)!=t.from&&i.collapse(s,r)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let s=i.posAtStart;if(i.isComposite()){let r;if(e==i.dom)r=i.dom.childNodes[t];else{let o=It(e)==0?0:t==0?-1:1;for(;;){let a=e.parentNode;if(a==i.dom)break;o==0&&a.firstChild!=a.lastChild&&(e==a.firstChild?o=-1:o=1),e=a}o<0?r=e:r=e.nextSibling}if(r==i.dom.firstChild)return s;for(;r&&!Se.get(r);)r=r.nextSibling;if(!r)return s+i.length;for(let o=0,a=s;;o++){let l=i.children[o];if(l.dom==r)return a;a+=l.length+l.breakAfter}}else return i.isText()?e==i.dom?s+t:s+(t?i.length:0):s}domAtPos(e,t){let{tile:i,offset:s}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(s,t):i.domIn(s,t)}inlineDOMNearPos(e,t){let i,s=-1,r=!1,o,a=-1,l=!1;return this.tile.blockTiles((c,h)=>{if(c.isWidget()){if(c.flags&32&&h>=e)return!0;c.flags&16&&(r=!0)}else{let u=h+c.length;if(h<=e&&(i=c,s=e-h,r=u=e&&!o&&(o=c,a=e-h,l=h>e),h>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(r&&o?i=null:l&&i&&(o=null),i&&t<0||!o?i.domIn(s,t):o.domIn(a,t))}coordsAt(e,t,i){let{tile:s,offset:r}=this.tile.resolveBlock(e,t);return s.isWidget()?s.widget instanceof Ur?null:s.coordsInWidget(r,t,!0):s.coordsIn(r,t,i)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function s(r,o){if(r.isComposite())for(let a of r.children){if(a.length>=o){let l=s(a,o);if(l)return l}if(o-=a.length,o<0)break}else if(r.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,a=-1,l=this.view.textDirection==fe.LTR,c=0,h=(u,f,d)=>{for(let p=0;ps);p++){let m=u.children[p],g=f+m.length,y=m.dom.getBoundingClientRect(),{height:b}=y;if(d&&!p&&(c+=y.top-d.top),m instanceof Lt)g>i&&h(m,f,y);else if(f>=i&&(c>0&&t.push(-c),t.push(b+c),c=0,o)){let x=m.dom.lastChild,C=x?ys(x):[];if(C.length){let k=C[C.length-1],S=l?k.right-y.left:y.right-k.left;S>a&&(a=S,this.minWidth=r,this.minWidthFrom=f,this.minWidthTo=g)}}d&&p==u.children.length-1&&(c+=d.bottom-y.bottom),f=g+m.breakAfter}};return h(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?fe.RTL:fe.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let a=0,l;for(let c of o.children){if(!c.isText()||/[^ -~]/.test(c.text))return;let h=ys(c.dom);if(h.length!=1)return;a+=h[0].width,l=h[0].height}if(a)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:a/o.length,textHeight:l}}});if(e)return e;let t=document.createElement("div"),i,s,r;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=ys(t.firstChild)[0];i=t.getBoundingClientRect().height,s=o&&o.width?o.width/27:7,r=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:s,textHeight:r}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,s=0;;s++){let r=s==t.viewports.length?null:t.viewports[s],o=r?r.from-1:this.view.state.doc.length;if(o>i){let a=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(B.replace({widget:new Ur(a),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!r)break;i=r.to+1}return B.set(e)}updateDeco(){let e=1,t=this.view.state.facet(ur).map(r=>(this.dynamicDecorationMap[e++]=typeof r=="function")?r(this.view):r),i=!1,s=this.view.state.facet(va).map((r,o)=>{let a=typeof r=="function";return a&&(i=!0),a?r(this.view):r});for(s.length&&(this.dynamicDecorationMap[e++]=i,t.push(N.join(s))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof r=="function"?r(this.view):r)}scrollIntoView(e){if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(su))try{if(c(this.view,e.range,e))return!0}catch(h){ze(this.view.state,h,"scroll handler")}let{range:t}=e,i=this.coordsAt(t.head,t.assoc||(t.head>t.anchor?-1:1)),s;if(!i)return;!t.empty&&(s=this.coordsAt(t.anchor,t.anchor>t.head?-1:1))&&(i={left:Math.min(i.left,s.left),top:Math.min(i.top,s.top),right:Math.max(i.right,s.right),bottom:Math.max(i.bottom,s.bottom)});let r=wa(this.view),o={left:i.left-r.left,top:i.top-r.top,right:i.right+r.right,bottom:i.bottom+r.bottom},{offsetWidth:a,offsetHeight:l}=this.view.scrollDOM;if(kp(this.view.scrollDOM,o,t.head1&&(i.top>window.visualViewport.offsetTop+window.visualViewport.height||i.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){Do(this.tile)}}function Do(n,e){let t=e?.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)Do(i,e)}}function Gp(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function uu(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=qh(t.focusNode,t.focusOffset),s=Wh(t.focusNode,t.focusOffset),r=i||s;if(s&&i&&s.node!=i.node){let a=Se.get(s.node);if(!a||a.isText()&&a.text!=s.node.nodeValue)r=s;else if(n.docView.lastCompositionAfterCursor){let l=Se.get(i.node);!l||l.isText()&&l.text!=i.node.nodeValue||(r=s)}}if(n.docView.lastCompositionAfterCursor=r!=i,!r)return null;let o=e-r.offset;return{from:o,to:o+r.node.nodeValue.length,node:r.node}}function _p(n,e,t){let i=uu(n,t);if(!i)return null;let{node:s,from:r,to:o}=i,a=s.nodeValue;if(/[\n\r]/.test(a)||n.state.doc.sliceString(i.from,i.to)!=a)return null;let l=e.invertedDesc;return{range:new ct(l.mapPos(r),l.mapPos(o),r,o),text:s}}function Jp(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class Ur extends Ut{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function om(n,e,t=1){let i=n.charCategorizer(e),s=n.doc.lineAt(e),r=e-s.from;if(s.length==0)return A.cursor(e);r==0?t=1:r==s.length&&(t=-1);let o=r,a=r;t<0?o=Ze(s.text,r,!1):a=Ze(s.text,r);let l=i(s.text.slice(o,a));for(;o>0;){let c=Ze(s.text,o,!1);if(i(s.text.slice(c,o))!=l)break;o=c}for(;an.defaultLineHeight*1.5){let a=n.viewState.heightOracle.textHeight,l=Math.floor((s-t.top-(n.defaultLineHeight-a)*.5)/a);r+=l*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+Qo(o,r,n.state.tabSize)}function Lo(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let s;for(let r of i.type){if(r.from>e)break;if(!(r.toe)return r;(!s||r.type==Le.Text&&(s.type!=r.type||(t<0?r.frome)))&&(s=r)}}return s||i}return i}function lm(n,e,t,i){let s=Lo(n,e.head,e.assoc||-1),r=!i||s.type!=Le.Text||!(n.lineWrapping||s.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head);if(r){let o=n.dom.getBoundingClientRect(),a=n.textDirectionAt(s.from),l=n.posAtCoords({x:t==(a==fe.LTR)?o.right-1:o.left+1,y:(r.top+r.bottom)/2});if(l!=null)return A.cursor(l,t?-1:1)}return A.cursor(t?s.to:s.from,t?-1:1)}function $l(n,e,t,i){let s=n.state.doc.lineAt(e.head),r=n.bidiSpans(s),o=n.textDirectionAt(s.from);for(let a=e,l=null;;){let c=Up(s,r,o,a,t),h=Nh;if(!c){if(s.number==(t?n.state.doc.lines:1))return a;h=` +`,s=n.state.doc.line(s.number+(t?1:-1)),r=n.bidiSpans(s),c=n.visualLineSide(s,!t)}if(l){if(!l(h))return a}else{if(!i)return c;l=i(h)}a=c}}function cm(n,e,t){let i=n.state.charCategorizer(e),s=i(t);return r=>{let o=i(r);return s==ye.Space&&(s=o),s==o}}function hm(n,e,t,i){let s=e.head,r=t?1:-1;if(s==(t?n.state.doc.length:0))return A.cursor(s,e.assoc);let o=e.goalColumn,a,l=n.contentDOM.getBoundingClientRect(),c=n.coordsAtPos(s,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),h=n.documentTop;if(c)o==null&&(o=c.left-l.left),a=r<0?c.top:c.bottom;else{let p=n.viewState.lineBlockAt(s);o==null&&(o=Math.min(l.right-l.left,n.defaultCharacterWidth*(s-p.from))),a=(r<0?p.top:p.bottom)+h}let u=l.left+o,f=n.viewState.heightOracle.textHeight>>1,d=i??f;for(let p=0;;p+=f){let m=a+(d+p)*r,g=Xo(n,{x:u,y:m},!1,r);if(t?m>l.bottom:ma:b{if(e>r&&es(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:A.cursor(i,in.viewState.docHeight)return new Pt(n.state.doc.length,-1);if(c=n.elementAtHeight(l),i==null)break;if(c.type==Le.Text){if(i<0?c.ton.viewport.to)break;let f=n.docView.coordsAt(i<0?c.from:c.to,i>0?-1:1);if(f&&(i<0?f.top<=l+r:f.bottom>=l+r))break}let u=n.viewState.heightOracle.textHeight/2;l=i>0?c.bottom+u:c.top-u}if(n.viewport.from>=c.to||n.viewport.to<=c.from){if(t)return null;if(c.type==Le.Text){let u=am(n,s,c,o,a);return new Pt(u,u==c.from?1:-1)}}if(c.type!=Le.Text)return l<(c.top+c.bottom)/2?new Pt(c.from,1):new Pt(c.to,-1);let h=n.docView.lineAt(c.from,2);return(!h||h.length!=c.length)&&(h=n.docView.lineAt(c.from,-2)),new um(n,o,a,n.textDirectionAt(c.from)).scanTile(h,c.from)}class um{constructor(e,t,i,s){this.view=e,this.x=t,this.y=i,this.baseDir=s,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+s.from>1;t:if(o.has(m)){for(let b=1;b=r&&(x-=p),!o.has(x)){m=x;break t}}break e}o.add(m);let g=t(m),y=0;if(g)for(let b=0;b1))if(x.bottomthis.y)(!c||c.top>x.top)&&(c=x),y=-1;else{let C=x.left>this.x?this.x-x.left:x.right(p+p+m)/3)return this.y=l.bottom-1,this.scan(e,t,!0);if(c&&c.top<(p+m+m)/3)return this.y=c.top+1,this.scan(e,t,!0)}let d=(a?this.dirAt(e[h],1):this.baseDir)==fe.LTR;return{i:h,after:this.x>(f.left+f.right)/2==d}}scanText(e,t){let i=[];for(let r=0;r{let o=i[r]-t,a=i[r+1]-t;return Qn(e.dom,o,a).getClientRects()});return s.after?new Pt(i[s.i+1],-1):new Pt(i[s.i],1)}scanTile(e,t){if(!e.length)return new Pt(t,1);if(e.children.length==1){let a=e.children[0];if(a.isText())return this.scanText(a,t);if(a.isComposite())return this.scanTile(a,t)}let i=[t];for(let a=0,l=t;a{let l=e.children[a];return l.flags&48?null:(l.dom.nodeType==1?l.dom:Qn(l.dom,0,l.length)).getClientRects()}),r=e.children[s.i],o=i[s.i];return r.isText()?this.scanText(r,o):r.isComposite()?this.scanTile(r,o):s.after?new Pt(i[s.i+1],-1):new Pt(o,1)}}const ki="￿";class fm{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(_.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=ki}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let s=e;;){this.findPointBefore(i,s);let r=this.text.length;this.readNode(s);let o=Se.get(s),a=s.nextSibling;if(a==t){o?.breakAfter&&!a&&i!=this.view.contentDOM&&this.lineBreak();break}let l=Se.get(a);(o&&l?o.breakAfter:(o?o.breakAfter:Rs(s))||Rs(a)&&(s.nodeName!="BR"||o?.isWidget())&&this.text.length>r)&&!pm(a,t)&&this.lineBreak(),s=a}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,s=this.lineSeparator?null:/\r\n?|\n/g;;){let r=-1,o=1,a;if(this.lineSeparator?(r=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(a=s.exec(t))&&(r=a.index,o=a[0].length),this.append(t.slice(i,r<0?t.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let l of this.points)l.node==e&&l.pos>this.text.length&&(l.pos-=o-1);i=r+o}}readNode(e){let t=Se.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let s=i.iter();!s.next().done;)s.lineBreak?this.lineBreak():this.append(s.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(dm(e,i.node,i.offset)?t:0))}}function dm(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:r,impreciseAnchor:o}=e.docView,a=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=du(e.docView.tile,t,i,0))){let l=r||o?[]:Om(e),c=new fm(l,e);c.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=c.text,this.newSel=ym(l,this.bounds.from)}else{let l=e.observer.selectionRange,c=r&&r.node==l.focusNode&&r.offset==l.focusOffset||!Zo(e.contentDOM,l.focusNode)?a.main.head:e.docView.posFromDOM(l.focusNode,l.focusOffset),h=o&&o.node==l.anchorNode&&o.offset==l.anchorOffset||!Zo(e.contentDOM,l.anchorNode)?a.main.anchor:e.docView.posFromDOM(l.anchorNode,l.anchorOffset),u=e.viewport;if((R.ios||R.chrome)&&c!=h&&Math.min(c,h)<=a.main.from&&Math.max(c,h)>=a.main.to&&(u.from>0||u.to-1&&a.ranges.length>1)this.newSel=a.replaceRange(A.range(h,c));else if(e.lineWrapping&&h==c&&!(a.main.empty&&a.main.head==c)&&e.inputState.lastTouchTime>Date.now()-100){let f=e.coordsAtPos(c,-1),d=0;f&&(d=e.inputState.lastTouchY<=f.bottom?-1:1),this.newSel=A.create([A.cursor(c,d)])}else this.newSel=A.single(h,c)}}}function du(n,e,t,i){if(n.isComposite()){let s=-1,r=-1,o=-1,a=-1;for(let l=0,c=i,h=i;lt)return du(u,e,t,c);if(f>=e&&s==-1&&(s=l,r=c),c>t&&u.dom.parentNode==n.dom){o=l,a=h;break}h=f,c=f+u.breakAfter}return{from:r,to:a<0?i+n.length:a,startDOM:(s?n.children[s-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function pu(n,e){let t,{newSel:i}=e,{state:s}=n,r=s.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:a,to:l}=e.bounds,c=r.from,h=null;(o===8||R.android&&e.text.length=a&&r.to<=l&&(e.typeOver||u!=e.text)&&u.slice(0,r.from-a)==e.text.slice(0,r.from-a)&&u.slice(r.to-a)==e.text.slice(f=e.text.length-(u.length-(r.to-a)))?t={from:r.from,to:r.to,insert:se.of(e.text.slice(r.from-a,f).split(ki))}:(d=mu(u,e.text,c-a,h))&&(R.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==ki+ki&&d.toB--,t={from:a+d.from,to:a+d.toA,insert:se.of(e.text.slice(d.from,d.toB).split(ki))})}else i&&(!n.hasFocus&&s.facet(Dt)||Es(i,r))&&(i=null);if(!t&&!i)return!1;if((R.mac||R.android)&&t&&t.from==t.to&&t.from==r.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:se.of([t.insert.toString().replace("."," ")])}):s.doc.lineAt(r.from).toDate.now()-50?t={from:r.from,to:r.to,insert:s.toText(n.inputState.insertingText)}:R.chrome&&t&&t.from==t.to&&t.from==r.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=A.single(i.main.anchor-1,i.main.head-1)),t={from:r.from,to:r.to,insert:se.of([" "])}),t)return ka(n,t,i,o);if(i&&!Es(i,r)){let a=!1,l="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(a=!0),l=n.inputState.lastSelectionOrigin,l=="select.pointer"&&(i=fu(s.facet(Dn).map(c=>c(n)),i))),n.dispatch({selection:i,scrollIntoView:a,userEvent:l}),!0}else return!1}function ka(n,e,t,i=-1){if(R.ios&&n.inputState.flushIOSKey(e))return!0;let s=n.state.selection.main;if(R.android&&(e.to==s.to&&(e.from==s.from||e.from==s.from-1&&n.state.sliceDoc(e.from,s.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Ei(n.contentDOM,"Enter",13)||(e.from==s.from-1&&e.to==s.to&&e.insert.length==0||i==8&&e.insert.lengths.head)&&Ei(n.contentDOM,"Backspace",8)||e.from==s.from&&e.to==s.to+1&&e.insert.length==0&&Ei(n.contentDOM,"Delete",46)))return!0;let r=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,a=()=>o||(o=gm(n,e,t));return n.state.facet(eu).some(l=>l(n,e.from,e.to,r,a))||n.dispatch(a()),!0}function gm(n,e,t){let i,s=n.state,r=s.selection.main,o=-1;if(e.from==e.to&&e.fromr.to){let l=e.fromu(n)),c,l);e.from==h&&(o=h)}if(o>-1)i={changes:e,selection:A.cursor(e.from+e.insert.length,-1)};else if(e.from>=r.from&&e.to<=r.to&&e.to-e.from>=(r.to-r.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let l=r.frome.to?s.sliceDoc(e.to,r.to):"";i=s.replaceSelection(n.state.toText(l+e.insert.sliceString(0,void 0,n.state.lineBreak)+c))}else{let l=s.changes(e),c=t&&t.main.to<=l.newLength?t.main:void 0;if(s.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=r.to+10&&e.to>=r.to-10){let h=n.state.sliceDoc(e.from,e.to),u,f=t&&uu(n,t.main.head);if(f){let p=e.insert.length-(e.to-e.from);u={from:f.from,to:f.to-p}}else u=n.state.doc.lineAt(r.head);let d=r.to-e.to;i=s.changeByRange(p=>{if(p.from==r.from&&p.to==r.to)return{changes:l,range:c||p.map(l)};let m=p.to-d,g=m-h.length;if(n.state.sliceDoc(g,m)!=h||m>=u.from&&g<=u.to)return{range:p};let y=s.changes({from:g,to:m,insert:e.insert}),b=p.to-r.to;return{changes:y,range:c?A.range(Math.max(0,c.anchor+b),Math.max(0,c.head+b)):p.map(y)}})}else i={changes:l,selection:c&&s.selection.replaceRange(c)}}let a="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,a+=".compose",n.inputState.compositionFirstChange&&(a+=".start",n.inputState.compositionFirstChange=!1)),s.update(i,{userEvent:a,scrollIntoView:!0})}function mu(n,e,t,i){let s=Math.min(n.length,e.length),r=0;for(;r0&&a>0&&n.charCodeAt(o-1)==e.charCodeAt(a-1);)o--,a--;if(i=="end"){let l=Math.max(0,r-Math.min(o,a));t-=o+l-r}if(o=o?r-t:0;r-=l,a=r+(a-o),o=r}else if(a=a?r-t:0;r-=l,o=r+(o-a),a=r}return{from:r,toA:o,toB:a}}function Om(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}=n.observer.selectionRange;return t&&(e.push(new Kl(t,i)),(s!=t||r!=i)&&e.push(new Kl(s,r))),e}function ym(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?A.single(t+e,i+e):null}function Es(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class Am{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.touchActive=!1,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.lastIOSMomentumScroll=0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,R.safari&&e.contentDOM.addEventListener("input",()=>null),R.gecko&&Em(e.contentDOM.ownerDocument)}handleEvent(e){!Cm(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let s of i.observers)s(this.view,t);for(let s of i.handlers){if(t.defaultPrevented)break;if(s(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Sm(e),i=this.handlers,s=this.view.contentDOM;for(let r in t)if(r!="scroll"){let o=!t[r].handlers.length,a=i[r];a&&o!=!a.handlers.length&&(s.removeEventListener(r,this.handleEvent),a=null),a||s.addEventListener(r,this.handleEvent,{passive:o})}for(let r in i)r!="scroll"&&!t[r]&&s.removeEventListener(r,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Ou.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),R.android&&R.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;if(R.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&(gu.some(t=>t.keyCode==e.keyCode)&&!e.ctrlKey||xm.indexOf(e.key)>-1&&e.ctrlKey)){let t={ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey};return t.shiftKey&&R.ios&&!/^(off|none)$/.test(this.view.contentDOM.autocapitalize)&&bm(this.view.win)&&(t.shiftKey=!1),this.pendingIOSKey={key:e.key,keyCode:e.keyCode,mods:t},setTimeout(()=>this.flushIOSKey(),250),!0}return e.keyCode!=229&&this.view.observer.forceFlush(),!1}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:R.safari&&!R.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function bm(n){return n.visualViewport?n.visualViewport.height*n.visualViewport.scale/n.document.documentElement.clientHeight<.85:!1}function Zl(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(s){ze(t.state,s)}}}function Sm(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let s=i.spec,r=s&&s.plugin.domEventHandlers,o=s&&s.plugin.domEventObservers;if(r)for(let a in r){let l=r[a];l&&t(a).handlers.push(Zl(i.value,l))}if(o)for(let a in o){let l=o[a];l&&t(a).observers.push(Zl(i.value,l))}}for(let i in Ot)t(i).handlers.push(Ot[i]);for(let i in je)t(i).observers.push(je[i]);return e}const gu=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],xm="dthko",Ou=[16,17,18,20,91,92,224,225],Hn=6;function Gn(n){return Math.max(0,n)*.7+8}function vm(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class wm{constructor(e,t,i,s){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=s,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Dh(e.contentDOM),this.atoms=e.state.facet(Dn).map(o=>o(e));let r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(_.allowMultipleSelections)&&km(e,t),this.dragging=Pm(e,t)&&bu(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&vm(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,s=0,r=0,o=this.view.win.innerWidth,a=this.view.win.innerHeight;this.scrollParents.x&&({left:s,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:r,bottom:a}=this.scrollParents.y.getBoundingClientRect());let l=wa(this.view);e.clientX-l.left<=s+Hn?t=-Gn(s-e.clientX):e.clientX+l.right>=o-Hn&&(t=Gn(e.clientX-o)),e.clientY-l.top<=r+Hn?i=-Gn(r-e.clientY):e.clientY+l.bottom>=a-Hn&&(i=Gn(e.clientY-a)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=fu(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function km(n,e){let t=n.state.facet(Hh);return t.length?t[0](e):R.mac?e.metaKey:e.ctrlKey}function Qm(n,e){let t=n.state.facet(Gh);return t.length?t[0](e):R.mac?!e.altKey:!e.ctrlKey}function Pm(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=kn(n.root);if(!i||i.rangeCount==0)return!0;let s=i.getRangeAt(0).getClientRects();for(let r=0;r=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Cm(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=Se.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const Ot=Object.create(null),je=Object.create(null),yu=R.ie&&R.ie_version<15||R.ios&&R.webkit_version<604;function Tm(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Au(n,t.value)},50)}function pr(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Au(n,e){e=pr(n.state,ba,e);let{state:t}=n,i,s=1,r=t.toText(e),o=r.lines==t.selection.ranges.length;if(Bo!=null&&t.selection.ranges.every(l=>l.empty)&&Bo==r.toString()){let l=-1;i=t.changeByRange(c=>{let h=t.doc.lineAt(c.from);if(h.from==l)return{range:c};l=h.from;let u=t.toText((o?r.line(s++).text:e)+t.lineBreak);return{changes:{from:h.from,insert:u},range:A.cursor(c.from+u.length)}})}else o?i=t.changeByRange(l=>{let c=r.line(s++);return{changes:{from:l.from,to:l.to,insert:c.text},range:A.cursor(l.from+c.length)}}):i=t.replaceSelection(r);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}je.scroll=n=>{let e=n.inputState;e.lastScrollTop=n.scrollDOM.scrollTop,e.lastScrollLeft=n.scrollDOM.scrollLeft,R.ios&&!e.touchActive&&(e.lastIOSMomentumScroll=Date.now())};je.wheel=je.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ot.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);je.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.touchActive=!0,t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};je.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};je.touchend=(n,e)=>{n.inputState.touchActive=!1};Ot.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(_h))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=$m(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new wm(n,e,t,i)),i&&n.observer.ignore(()=>{Bh(n.contentDOM);let r=n.root.activeElement;r&&!r.contains(n.contentDOM)&&r.blur()});let s=n.inputState.mouseSelection;if(s)return s.start(e),s.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ml(n,e,t,i){if(i==1)return A.cursor(e,t);if(i==2)return om(n.state,e,t);{let s=n.docView.lineAt(e,t),r=n.state.doc.lineAt(s?s.posAtEnd:e),o=s?s.posAtStart:r.from,a=s?s.posAtEnd:r.to;return aDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Ul+1)%3:1}function $m(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=bu(e),s=n.state.selection;return{update(r){r.docChanged&&(t.pos=r.changes.mapPos(t.pos),s=s.map(r.changes))},get(r,o,a){let l=n.posAndSideAtCoords({x:r.clientX,y:r.clientY},!1),c,h=Ml(n,l.pos,l.assoc,i);if(t.pos!=l.pos&&!o){let u=Ml(n,t.pos,t.assoc,i),f=Math.min(u.from,h.from),d=Math.max(u.to,h.to);h=f1&&(c=Km(s,l.pos))?c:a?s.addRange(h):A.create([h])}}}function Km(n,e){for(let t=0;t=e)return A.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ot.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let s=n.docView.tile.nearest(e.target);if(s&&s.isWidget()){let r=s.posAtStart,o=r+s.length;(r>=t.to||o<=t.from)&&(t=A.undirectionalRange(r,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",pr(n.state,Sa,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ot.dragend=n=>(n.inputState.draggedContent=null,!1);function Dl(n,e,t,i){if(t=pr(n.state,ba,t),!t)return;let s=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:r}=n.inputState,o=i&&r&&Qm(n,e)?{from:r.from,to:r.to}:null,a={from:s,insert:t},l=n.state.changes(o?[o,a]:a);n.focus(),n.dispatch({changes:l,selection:{anchor:l.mapPos(s,-1),head:l.mapPos(s,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ot.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),s=0,r=()=>{++s==t.length&&Dl(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(a.result)||(i[o]=a.result),r()},a.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Dl(n,e,i,!0),!0}return!1};Ot.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=yu?null:e.clipboardData;return t?(Au(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(Tm(n),!1)};function Zm(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Mm(n){let e=[],t=[],i=!1;for(let s of n.selection.ranges)s.empty||(e.push(n.sliceDoc(s.from,s.to)),t.push(s));if(!e.length){let s=-1;for(let{from:r}of n.selection.ranges){let o=n.doc.lineAt(r);o.number>s&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),s=o.number}i=!0}return{text:pr(n,Sa,e.join(n.lineBreak)),ranges:t,linewise:i}}let Bo=null;Ot.copy=Ot.cut=(n,e)=>{if(!gn(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:s}=Mm(n.state);if(!t&&!s)return!1;Bo=s?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let r=yu?null:e.clipboardData;return r?(r.clearData(),r.setData("text/plain",t),!0):(Zm(n,t),!1)};const Su=Wt.define();function xu(n,e){let t=[];for(let i of n.facet(tu)){let s=i(n,e);s&&t.push(s)}return t.length?n.update({effects:t,annotations:Su.of(!0)}):null}function vu(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=xu(n.state,e);t?n.dispatch(t):n.update([])}},10)}je.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),vu(n)};je.blur=n=>{n.observer.clearSelectionRange(),vu(n)};je.compositionstart=je.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};je.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,R.chrome&&R.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};je.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ot.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let r=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(r&&o.length){let a=o[0],l=n.posAtDOM(a.startContainer,a.startOffset),c=n.posAtDOM(a.endContainer,a.endOffset);return ka(n,{from:l,to:c,insert:n.state.toText(r)},null),!0}}let s;if(R.chrome&&R.android&&(s=gu.find(r=>r.inputType==e.inputType))&&(n.observer.delayAndroidKey(s.key,s.keyCode),s.key=="Backspace"||s.key=="Delete")){let r=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>r+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return R.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),R.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>je.compositionend(n,e),20),!1};const Ll=new Set;function Em(n){Ll.has(n)||(Ll.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const Xl=["pre-wrap","normal","pre-line","break-spaces"];let Wi=!1;function Bl(){Wi=!1}class Um{constructor(e){this.lineWrapping=e,this.doc=se.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Xl.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,l=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=a;if(this.lineWrapping=a,this.lineHeight=t,this.charWidth=i,this.textHeight=s,this.lineLength=r,l){this.heightSamples={};for(let c=0;c0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>As&&(Wi=!0),this.height=e)}replace(e,t,i){return Ve.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,s){let r=this,o=i.doc;for(let a=s.length-1;a>=0;a--){let{fromA:l,toA:c,fromB:h,toB:u}=s[a],f=r.lineAt(l,pe.ByPosNoHeight,i.setDoc(t),0,0),d=f.to>=c?f:r.lineAt(c,pe.ByPosNoHeight,i,0,0);for(u+=d.to-c,c=d.to;a>0&&f.from<=s[a-1].toA;)l=s[a-1].fromA,h=s[a-1].fromB,a--,lr*2){let a=e[t-1];a.break?e.splice(--t,1,a.left,null,a.right):e.splice(--t,1,a.left,a.right),i+=1+a.break,s-=a.size}else if(r>s*2){let a=e[i];a.break?e.splice(i,1,a.left,null,a.right):e.splice(i,1,a.left,a.right),i+=2+a.break,r-=a.size}else break;else if(s=r&&o(this.lineAt(0,pe.ByPos,i,s,r))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more&&this.setMeasuredHeight(s),this.outdated=!1,this}toString(){return`block(${this.length})`}}class ot extends wu{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new dt(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let s=i[0];return i.length==1&&(s instanceof ot||s instanceof Ee&&s.flags&4)&&Math.abs(this.length-s.length)<10?(s instanceof Ee?s=new ot(s.length,this.height,this.spaceAbove):s.height=this.height,this.outdated||(s.outdated=!1),s):Ve.of(i)}updateHeight(e,t=0,i=!1,s){return s&&s.from<=t&&s.more?this.setMeasuredHeight(s):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class Ee extends Ve{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,s=e.doc.lineAt(t+this.length).number,r=s-i+1,o,a=0;if(e.lineWrapping){let l=Math.min(this.height,e.lineHeight*r);o=l/r,this.length>r+1&&(a=(this.height-l)/(this.length-r-1))}else o=this.height/r;return{firstLine:i,lastLine:s,perLine:o,perChar:a}}blockAt(e,t,i,s){let{firstLine:r,lastLine:o,perLine:a,perChar:l}=this.heightMetrics(t,s);if(t.lineWrapping){let c=s+(e0){let r=i[i.length-1];r instanceof Ee?i[i.length-1]=new Ee(r.length+s):i.push(null,new Ee(s-1))}if(e>0){let r=i[0];r instanceof Ee?i[0]=new Ee(e+r.length):i.unshift(new Ee(e-1),null)}return Ve.of(i)}decomposeLeft(e,t){t.push(new Ee(e-1),null)}decomposeRight(e,t){t.push(null,new Ee(this.length-e-1))}updateHeight(e,t=0,i=!1,s){let r=t+this.length;if(s&&s.from<=t+this.length&&s.more){let o=[],a=Math.max(t,s.from),l=-1;for(s.from>t&&o.push(new Ee(s.from-t-1).updateHeight(e,t));a<=r&&s.more;){let h=e.doc.lineAt(a).length;o.length&&o.push(null);let u=s.heights[s.index++],f=0;u<0&&(f=-u,u=s.heights[s.index++]),l==-1?l=u:Math.abs(u-l)>=As&&(l=-2);let d=new ot(h,u,f);d.outdated=!1,o.push(d),a+=h+1}a<=r&&o.push(null,new Ee(r-a).updateHeight(e,a));let c=Ve.of(o);return(l<0||Math.abs(c.height-this.height)>=As||Math.abs(l-this.heightMetrics(e,t).perLine)>=As)&&(Wi=!0),Us(this,c)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class Lm extends Ve{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,s){let r=i+this.left.height;return ea))return c;let h=t==pe.ByPosNoHeight?pe.ByPosNoHeight:pe.ByPos;return l?c.join(this.right.lineAt(a,h,i,o,a)):this.left.lineAt(a,h,i,s,r).join(c)}forEachLine(e,t,i,s,r,o){let a=s+this.left.height,l=r+this.left.length+this.break;if(this.break)e=l&&this.right.forEachLine(e,t,i,a,l,o);else{let c=this.lineAt(l,pe.ByPos,i,s,r);e=e&&c.from<=t&&o(c),t>c.to&&this.right.forEachLine(c.to+1,t,i,a,l,o)}}replace(e,t,i){let s=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-s,t-s,i));let r=[];e>0&&this.decomposeLeft(e,r);let o=r.length;for(let a of i)r.push(a);if(e>0&&Il(r,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,s=i+this.break;if(e>=s)return this.right.decomposeRight(e-s,t);e2*t.size||t.size>2*e.size?Ve.of(this.break?[e,null,t]:[e,t]):(this.left=Us(this.left,e),this.right=Us(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,s){let{left:r,right:o}=this,a=t+r.length+this.break,l=null;return s&&s.from<=t+r.length&&s.more?l=r=r.updateHeight(e,t,i,s):r.updateHeight(e,t,i),s&&s.from<=a+o.length&&s.more?l=o=o.updateHeight(e,a,i,s):o.updateHeight(e,a,i),l?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function Il(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof Ee&&(i=n[e+1])instanceof Ee&&n.splice(e-1,3,new Ee(t.length+1+i.length))}const Xm=5;class Qa{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),s=this.nodes[this.nodes.length-1];s instanceof ot?s.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new ot(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=Xm)&&this.addLineDeco(s,r,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new ot(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new Ee(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof ot)return e;let t=new ot(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let s=this.ensureLine();s.length+=i,s.collapsed+=i,s.widgetHeight=Math.max(s.widgetHeight,e),s.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof ot)&&!this.isCovered?this.nodes.push(new ot(0,-1,0)):(this.writtenToh.clientHeight||h.scrollWidth>h.clientWidth)&&u.overflow!="visible"){let f=h.getBoundingClientRect();r=Math.max(r,f.left),o=Math.min(o,f.right),a=Math.max(a,f.top),l=Math.min(c==n.parentNode?s.innerHeight:l,f.bottom)}c=u.position=="absolute"||u.position=="fixed"?h.offsetParent:h.parentNode}else if(c.nodeType==11)c=c.host;else break;return{left:r-t.left,right:Math.max(r,o)-t.left,top:a-(t.top+e),bottom:Math.max(a,l)-(t.top+e)}}function Wm(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function zm(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Dr{constructor(e,t,i,s){this.from=e,this.to=t,this.size=i,this.displaySize=s}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof s!="function"&&s.class=="cm-lineWrapping");this.heightOracle=new Um(i),this.stateDeco=zl(t),this.heightMap=Ve.empty().applyChanges(this.stateDeco,se.empty,this.heightOracle.setDoc(t.doc),[new ct(0,0,0,t.doc.length)]);for(let s=0;s<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());s++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=B.set(this.lineGaps.map(s=>s.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let s=i?t.head:t.anchor;if(!e.some(({from:r,to:o})=>s>=r&&s<=o)){let{from:r,to:o}=this.lineBlockAt(s);e.push(new _n(r,o))}}return this.viewports=e.sort((i,s)=>i.from-s.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Wl:new Pa(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(un(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=zl(this.state);let s=e.changedRanges,r=ct.extendWithRanges(s,Bm(i,this.stateDeco,e?e.changes:Re.empty(this.state.doc.length))),o=this.heightMap.height,a=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Bl(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),r),(this.heightMap.height!=o||Wi)&&(e.flags|=2),a?(this.scrollAnchorPos=e.changes.mapPos(a.from,-1),this.scrollAnchorHeight=a.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let l=r.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headl.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,t));let c=l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,e.flags|=this.updateForViewport(),(c||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(nu)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),s=this.heightOracle,r=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?fe.RTL:fe.LTR;let o=this.heightOracle.mustRefreshForWrapping(r)||this.mustMeasureContent==="refresh",a=t.getBoundingClientRect(),l=o||this.mustMeasureContent||this.contentDOMHeight!=a.height;this.contentDOMHeight=a.height,this.mustMeasureContent=!1;let c=0,h=0;if(a.width&&a.height){let{scaleX:k,scaleY:S}=Fh(t,a);(k>.005&&Math.abs(this.scaleX-k)>.005||S>.005&&Math.abs(this.scaleY-S)>.005)&&(this.scaleX=k,this.scaleY=S,c|=16,o=l=!0)}let u=(parseInt(i.paddingTop)||0)*this.scaleY,f=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=u||this.paddingBottom!=f)&&(this.paddingTop=u,this.paddingBottom=f,c|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(s.lineWrapping&&(l=!0),this.editorWidth=e.scrollDOM.clientWidth,c|=16);let d=Dh(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=Ih(this.scrollParent||e.win);let m=(this.printing?zm:qm)(t,this.paddingTop),g=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let b=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(b!=this.inView&&(this.inView=b,b&&(l=!0)),!this.inView&&!this.scrollTarget&&!Wm(e.dom))return 0;let x=a.width;if((this.contentDOMWidth!=x||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=a.width,this.editorHeight=e.scrollDOM.clientHeight,c|=16),l){let k=e.docView.measureVisibleLineHeights(this.viewport);if(s.mustRefreshForHeights(k)&&(o=!0),o||s.lineWrapping&&Math.abs(x-this.contentDOMWidth)>s.charWidth){let{lineHeight:S,charWidth:w,textHeight:U}=e.docView.measureTextSize();o=S>0&&s.refresh(r,S,w,U,Math.max(5,x/w),k),o&&(e.docView.minWidth=0,c|=16)}g>0&&y>0?h=Math.max(g,y):g<0&&y<0&&(h=Math.min(g,y)),Bl();for(let S of this.viewports){let w=S.from==this.viewport.from?k:e.docView.measureVisibleLineHeights(S);this.heightMap=(o?Ve.empty().applyChanges(this.stateDeco,se.empty,this.heightOracle,[new ct(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(s,0,o,new Fm(S.from,w))}Wi&&(c|=2)}let C=!this.viewportIsAppropriate(this.viewport,h)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return C&&(c&2&&(c|=this.updateScaler()),this.viewport=this.getViewport(h,this.scrollTarget),c|=this.updateForViewport()),(c&2||C)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),c|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),c}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),s=this.heightMap,r=this.heightOracle,{visibleTop:o,visibleBottom:a}=this,l=new _n(s.lineAt(o-i*1e3,pe.ByHeight,r,0,0).from,s.lineAt(a+(1-i)*1e3,pe.ByHeight,r,0,0).to);if(t){let{head:c}=t.range;if(cl.to){let h=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),u=s.lineAt(c,pe.ByPos,r,0,0),f;t.y=="center"?f=(u.top+u.bottom)/2-h/2:t.y=="start"||t.y=="nearest"&&c=a+Math.max(10,Math.min(i,250)))&&s>o-2*1e3&&r>1,o=s<<1;if(this.defaultTextDirection!=fe.LTR&&!i)return[];let a=[],l=(h,u,f,d)=>{if(u-hh&&yy.from>=f.from&&y.to<=f.to&&Math.abs(y.from-h)y.fromb));if(!g){if(ux.from<=u&&x.to>=u)){let x=t.moveToLineBoundary(A.cursor(u),!1,!0).head;x>h&&(u=x)}let y=this.gapSize(f,h,u,d),b=i||y<2e6?y:2e6;g=new Dr(h,u,y,b)}a.push(g)},c=h=>{if(h.length2e6)for(let S of e)S.from>=h.from&&S.fromh.from&&l(h.from,d,h,u),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];N.spans(t,this.viewport.from,this.viewport.to,{span(r,o){i.push({from:r,to:o})},point(){}},20);let s=0;if(i.length!=this.visibleRanges.length)s=12;else for(let r=0;r=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||un(this.heightMap.lineAt(e,pe.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||un(this.heightMap.lineAt(this.scaler.fromDOM(e),pe.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return un(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class _n{constructor(e,t){this.from=e,this.to=t}}function jm(n,e,t){let i=[],s=n,r=0;return N.spans(t,n,e,{span(){},point(o,a){o>s&&(i.push({from:s,to:o}),r+=o-s),s=a}},20),s=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let s=0;;s++){let{from:r,to:o}=e[s],a=o-r;if(i<=a)return r+i;i-=a}}function es(n,e){let t=0;for(let{from:i,to:s}of n.ranges){if(e<=s){t+=e-i;break}t+=s-i}return t/n.total}function Ym(n,e){for(let t of n)if(e(t))return t}const Wl={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function zl(n){let e=n.facet(ur).filter(i=>typeof i!="function"),t=n.facet(va).filter(i=>typeof i!="function");return t.length&&e.push(N.join(t)),e}class Pa{constructor(e,t,i){let s=0,r=0,o=0;this.viewports=i.map(({from:a,to:l})=>{let c=t.lineAt(a,pe.ByPos,e,0,0).top,h=t.lineAt(l,pe.ByPos,e,0,0).bottom;return s+=h-c,{from:a,to:l,top:c,bottom:h,domTop:0,domBottom:0}}),this.scale=(7e6-s)/(t.height-s);for(let a of this.viewports)a.domTop=o+(a.top-r)*this.scale,o=a.domBottom=a.domTop+(a.bottom-a.top),r=a.bottom}toDOM(e){for(let t=0,i=0,s=0;;t++){let r=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function un(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new dt(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(s=>un(s,e)):n._content)}const ts=K.define({combine:n=>n.join(" ")}),Io=K.define({combine:n=>n.indexOf(!0)>-1}),qo=ei.newName(),ku=ei.newName(),Qu=ei.newName(),Pu={"&light":"."+ku,"&dark":"."+Qu};function Wo(n,e,t){return new ei(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,s=>{if(s=="&")return n;if(!t||!t[s])throw new RangeError(`Unsupported selector: ${s}`);return t[s]}):n+" "+i}})}const Nm=Wo("."+qo,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{userSelect:"none",position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},".cm-panels-top":{top:"0"},".cm-panels-bottom":{bottom:"0"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},Pu),Hm={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Lr=R.ie&&R.ie_version<=11;class Gm{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Qp,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(R.ie&&R.ie_version<=11||R.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&R.android&&e.constructor.EDIT_CONTEXT!==!1&&!(R.chrome&&R.chrome_version<126)&&(this.editContext=new Jm(e),e.state.facet(Dt)&&(e.contentDOM.editContext=this.editContext.editContext)),Lr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,s=this.selectionRange;if(i.state.facet(Dt)?i.root.activeElement!=this.dom:!gn(this.dom,s))return;let r=s.anchorNode&&i.docView.tile.nearest(s.anchorNode);if(r&&r.isWidget()&&r.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(R.ie&&R.ie_version<=11||R.android&&R.chrome)&&!i.state.selection.main.empty&&s.focusNode&&On(s.focusNode,s.focusOffset,s.anchorNode,s.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=kn(e.root);if(!t)return!1;let i=R.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&_m(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let s=gn(this.dom,i);return s&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let r=this.delayedAndroidKey;r&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=r.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&r.force&&Ei(this.dom,r.key,r.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(s)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,s=!1;for(let r of e){let o=this.readMutation(r);o&&(o.typeOver&&(s=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:s}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),s=this.selectionChanged&&gn(this.dom,this.selectionRange);if(e<0&&!s)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let r=new mm(this.view,e,t,i);return this.view.docView.domChanged={newSel:r.newSel?r.newSel.main:null},r}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,s=pu(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Es(this.view.state.selection,t.newSel.main))&&this.view.update([]),s}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=Vl(t,e.previousSibling||e.target.previousSibling,-1),s=Vl(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:s?t.posBefore(s):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(Dt)!=e.state.facet(Dt)&&(e.view.contentDOM.editContext=e.state.facet(Dt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let s of this.scrollTargets)s.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function Vl(n,e,t){for(;e;){let i=Se.get(e);if(i&&i.parent==n)return i;let s=e.parentNode;e=s!=n.dom?s:t>0?e.nextSibling:e.previousSibling}return null}function jl(n,e){let t=e.startContainer,i=e.startOffset,s=e.endContainer,r=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return On(o.node,o.offset,s,r)&&([t,i,s,r]=[s,r,t,i]),{anchorNode:t,anchorOffset:i,focusNode:s,focusOffset:r}}function _m(n,e){if(e.getComposedRanges){let s=e.getComposedRanges(n.root)[0];if(s)return jl(n,s)}let t=null;function i(s){s.preventDefault(),s.stopImmediatePropagation(),t=s.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?jl(n,t):null}class Jm{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let s=e.state.selection.main,{anchor:r,head:o}=s,a=this.toEditorPos(i.updateRangeStart),l=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:a,drifted:!1});let c=l-a>i.text.length;a==this.from&&rthis.to&&(l=r);let h=mu(e.state.sliceDoc(a,l),i.text,(c?s.from:s.to)-a,c?"end":null);if(!h){let f=A.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Es(f,s)||e.dispatch({selection:f,userEvent:"select"});return}let u={from:h.from+a,to:h.toA+a,insert:se.of(i.text.slice(h.from,h.toB).split(` +`))};if((R.mac||R.android)&&u.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(u={from:a,to:l,insert:se.of([i.text.replace("."," ")])}),this.pendingContextChange=u,!e.state.readOnly){let f=this.to-this.from+(u.to-u.from+u.insert.length);ka(e,u,A.single(this.toEditorPos(i.selectionStart,f),this.toEditorPos(i.selectionEnd,f)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),u.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let s=[],r=null;for(let o=this.toEditorPos(i.rangeStart),a=this.toEditorPos(i.rangeEnd);o{let s=[];for(let r of i.getTextFormats()){let o=r.underlineStyle,a=r.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(a)){let l=this.toEditorPos(r.rangeStart),c=this.toEditorPos(r.rangeEnd);if(l{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{let s=kn(i.root);s&&s.rangeCount&&this.editContext.updateSelectionBounds(s.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,s=this.pendingContextChange;return e.changes.iterChanges((r,o,a,l,c)=>{if(i)return;let h=c.length-(o-r);if(s&&o>=s.to)if(s.from==r&&s.to==o&&s.insert.eq(c)){s=this.pendingContextChange=null,t+=h,this.to+=h;return}else s=null,this.revertPending(e.state);if(r+=t,o+=t,o<=this.from)this.from+=h,this.to+=h;else if(rthis.to||this.to-this.from+c.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(r),this.toContextPos(o),c.toString()),this.to+=h}t+=h}),s&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(s=>!s.isUserEvent("input.type")&&s.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),s=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=s)&&this.editContext.updateSelection(i,s)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class ${get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(s=>s.forEach(r=>i(r,this)))||(s=>this.update(s)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Pp(e.parent)||document,this.viewState=new ql(this,e.state||_.create(e)),e.scrollTo&&e.scrollTo.is(Nn)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Ti).map(s=>new Zr(s));for(let s of this.plugins)s.update(this);this.observer=new Gm(this),this.inputState=new Am(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Rl(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof Pe?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,s,r=this.state;for(let f of e){if(f.startState!=r)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");r=f.state}if(this.destroyed){this.viewState.state=r;return}let o=this.hasFocus,a=0,l=null;e.some(f=>f.annotation(Su))?(this.inputState.notifiedFocused=o,a=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,l=xu(r,o),l||(a=1));let c=this.observer.delayedAndroidKey,h=null;if(c?(this.observer.clearDelayedAndroidKey(),h=this.observer.readChange(),(h&&!this.state.doc.eq(r.doc)||!this.state.selection.eq(r.selection))&&(h=null)):this.observer.clear(),r.facet(_.phrases)!=this.state.facet(_.phrases))return this.setState(r);s=Ks.create(this,r,e),s.flags|=a;let u=this.viewState.scrollTarget;try{this.updateState=2;for(let f of e){if(u&&(u=u.map(f.changes)),f.scrollIntoView){let{main:d}=f.state.selection,{x:p,y:m}=this.state.facet($.cursorScrollMargin);u=new Ui(d.empty?d:A.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of f.effects)d.is(Nn)&&(u=d.value.clip(this.state))}this.viewState.update(s,u),this.bidiCache=Fs.update(this.bidiCache,s.changes),s.empty||(this.updatePlugins(s),this.inputState.update(s)),t=this.docView.update(s),this.state.facet(hn)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(f=>f.isUserEvent("select.pointer")))}finally{this.updateState=0}if(s.startState.facet(ts)!=s.state.facet(ts)&&(this.viewState.mustMeasureContent=!0),(t||i||u||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!s.empty)for(let f of this.state.facet(Fo))try{f(s)}catch(d){ze(this.state,d,"update listener")}(l||h)&&Promise.resolve().then(()=>{l&&this.state==l.startState&&this.dispatch(l),h&&!pu(this,h)&&c.force&&Ei(this.contentDOM,c.key,c.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new ql(this,e),this.plugins=e.facet(Ti).map(i=>new Zr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Rl(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Ti),i=e.state.facet(Ti);if(t!=i){let s=[];for(let r of i){let o=t.indexOf(r);if(o<0)s.push(new Zr(r));else{let a=this.plugins[o];a.mustUpdate=e,s.push(a)}}for(let r of this.plugins)r.mustUpdate!=e&&r.destroy(this);this.plugins=s,this.pluginMap.clear()}else for(let s of this.plugins)s.mustUpdate=e;for(let s=0;s-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,s=this.viewState.getScrollOffset(),{scrollAnchorPos:r,scrollAnchorHeight:o}=this.viewState;Math.abs(s-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let a=0;;a++){if(o<0)if(Ih(i||this.win))r=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(s);r=d.from,o=d.top}this.updateState=1;let l=this.viewState.measure();if(!l&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(a>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let c=[];l&4||([this.measureRequests,c]=[c,this.measureRequests]);let h=c.map(d=>{try{return d.read(this)}catch(p){return ze(this.state,p),Yl}}),u=Ks.create(this,this.state,[]),f=!1;u.flags|=l,t?t.flags|=l:t=u,this.updateState=2,u.empty||(this.updatePlugins(u),this.inputState.update(u),this.updateAttrs(),f=this.docView.update(u),f&&this.docViewUpdate());for(let d=0;d1||p<-1)&&!(R.ios&&this.inputState.lastIOSMomentumScroll>Date.now()-100)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){s=s+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let a of this.state.facet(Fo))a(t)}get themeClasses(){return qo+" "+(this.state.facet(Io)?Qu:ku)+" "+this.state.facet(ts)}updateAttrs(){let e=Nl(this,ou,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(Dt)?"true":"false",class:"cm-content",style:`${R.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Nl(this,xa,t);let i=this.observer.ignore(()=>{let s=wl(this.contentDOM,this.contentAttrs,t),r=wl(this.dom,this.editorAttrs,e);return s||r});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let s of i.effects)if(s.is($.announce)){t&&(this.announceDOM.textContent=""),t=!1;let r=this.announceDOM.appendChild(document.createElement("div"));r.textContent=s.value}}mountStyles(){this.styleModules=this.state.facet(hn);let e=this.state.facet($.cspNonce);ei.mount(this.root,this.styleModules.concat(Nm).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Fr(this,e,$l(this,e,t,i))}moveByGroup(e,t){return Fr(this,e,$l(this,e,t,i=>cm(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),s=this.textDirectionAt(e.from),r=i[t?i.length-1:0];return A.cursor(r.side(t,s)+e.from,r.forward(!t,s)?1:-1)}moveToLineBoundary(e,t,i=!0){return lm(this,e,t,i)}moveVertically(e,t,i){return Fr(this,e,hm(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=Xo(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),Xo(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.state.doc.lineAt(e),s=this.bidiSpans(i),r=s[Ct.find(s,e-i.from,-1,t)];return this.docView.coordsAt(e,t,r.dir==fe.RTL)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(iu)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>eg)return Yh(e.length);let t=this.textDirectionAt(e.from),i;for(let r of this.bidiCache)if(r.from==e.from&&r.dir==t&&(r.fresh||jh(r.isolates,i=Pl(this,e))))return r.order;i||(i=Pl(this,e));let s=Ep(e.text,t,i);return this.bidiCache.push(new Fs(e.from,e.to,t,i,!0,s)),s}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||R.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Bh(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,s,r,o;return Nn.of(new Ui(typeof e=="number"?A.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(s=t.x)!==null&&s!==void 0?s:"nearest",(r=t.yMargin)!==null&&r!==void 0?r:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return Nn.of(new Ui(A.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return xe.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return xe.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=ei.newName(),s=[ts.of(i),hn.of(Wo(`.${i}`,e))];return t&&t.dark&&s.push(Io.of(!0)),s}static baseTheme(e){return ri.lowest(hn.of(Wo("."+qo,e,Pu)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),s=i&&Se.get(i)||Se.get(e);return((t=s?.root)===null||t===void 0?void 0:t.view)||null}}$.styleModule=hn;$.inputHandler=eu;$.clipboardInputFilter=ba;$.clipboardOutputFilter=Sa;$.scrollHandler=su;$.focusChangeEffect=tu;$.perLineTextDirection=iu;$.exceptionSink=Jh;$.updateListener=Fo;$.editable=Dt;$.mouseSelectionStyle=_h;$.dragMovesSelection=Gh;$.clickAddsSelectionRange=Hh;$.decorations=ur;$.blockWrappers=au;$.outerDecorations=va;$.atomicRanges=Dn;$.bidiIsolatedRanges=lu;$.cursorScrollMargin=K.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});$.scrollMargins=cu;$.darkTheme=Io;$.cspNonce=K.define({combine:n=>n.length?n[0]:""});$.contentAttributes=xa;$.editorAttributes=ou;$.lineWrapping=$.contentAttributes.of({class:"cm-lineWrapping"});$.announce=z.define();const eg=4096,Yl={};class Fs{constructor(e,t,i,s,r,o){this.from=e,this.to=t,this.dir=i,this.isolates=s,this.fresh=r,this.order=o}static update(e,t){if(t.empty&&!e.some(r=>r.fresh))return e;let i=[],s=e.length?e[e.length-1].dir:fe.LTR;for(let r=Math.max(0,e.length-10);r=0;s--){let r=i[s],o=typeof r=="function"?r(n):r;o&&Oa(o,t)}return t}const tg=R.mac?"mac":R.windows?"win":R.linux?"linux":"key";function ig(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let s,r,o,a;for(let l=0;li.concat(s),[]))),t}function sg(n,e,t){return Tu(Cu(n.state),e,n,t)}let Nt=null;const rg=4e3;function og(n,e=tg){let t=Object.create(null),i=Object.create(null),s=(o,a)=>{let l=i[o];if(l==null)i[o]=a;else if(l!=a)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},r=(o,a,l,c,h)=>{var u,f;let d=t[o]||(t[o]=Object.create(null)),p=a.split(/ (?!$)/).map(y=>ig(y,e));for(let y=1;y{let C=Nt={view:x,prefix:b,scope:o};return setTimeout(()=>{Nt==C&&(Nt=null)},rg),!0}]})}let m=p.join(" ");s(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((f=(u=d._any)===null||u===void 0?void 0:u.run)===null||f===void 0?void 0:f.slice())||[]});l&&g.run.push(l),c&&(g.preventDefault=!0),h&&(g.stopPropagation=!0)};for(let o of n){let a=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let c of a){let h=t[c]||(t[c]=Object.create(null));h._any||(h._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:u}=o;for(let f in h)h[f].run.push(d=>u(d,zo))}let l=o[e]||o.key;if(l)for(let c of a)r(c,l,o.run,o.preventDefault,o.stopPropagation),o.shift&&r(c,"Shift-"+l,o.shift,o.preventDefault,o.stopPropagation)}return t}let zo=null;function Tu(n,e,t,i){zo=e;let s=bp(e),r=Ne(s,0),o=Qt(r)==s.length&&s!=" ",a="",l=!1,c=!1,h=!1;Nt&&Nt.view==t&&Nt.scope==i&&(a=Nt.prefix+" ",Ou.indexOf(e.keyCode)<0&&(c=!0,Nt=null));let u=new Set,f=g=>{if(g){for(let y of g.run)if(!u.has(y)&&(u.add(y),y(t)))return g.stopPropagation&&(h=!0),!0;g.preventDefault&&(g.stopPropagation&&(h=!0),c=!0)}return!1},d=n[i],p,m;return d&&(f(d[a+is(s,e,!o)])?l=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(R.windows&&e.ctrlKey&&e.altKey)&&!(R.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=ti[e.keyCode])&&p!=s?(f(d[a+is(p,e,!0)])||e.shiftKey&&(m=vn[e.keyCode])!=s&&m!=p&&f(d[a+is(m,e,!1)]))&&(l=!0):o&&e.shiftKey&&f(d[a+is(s,e,!0)])&&(l=!0),!l&&f(d._any)&&(l=!0)),c&&(l=!0),l&&h&&e.stopPropagation(),zo=null,l}class gi{constructor(e,t,i,s,r){this.className=e,this.left=t,this.top=i,this.width=s,this.height=r}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}update(e,t){return t.className!=this.className?!1:(this.adjust(e),!0)}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width!=null&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}static forRange(e,t,i){if(i.empty){let s=e.coordsAtPos(i.head,i.assoc||1);if(!s)return[];let r=Ru(e);return[new gi(t,s.left-r.left,s.top-r.top,null,s.bottom-s.top)]}else return ag(e,t,i)}}function Ru(n){let e=n.scrollDOM.getBoundingClientRect();return{left:(n.textDirection==fe.LTR?e.left:e.right-n.scrollDOM.clientWidth*n.scaleX)-n.scrollDOM.scrollLeft*n.scaleX,top:e.top-n.scrollDOM.scrollTop*n.scaleY}}function Gl(n,e,t,i){let s=n.coordsAtPos(e,t*2);if(!s)return i;let r=n.dom.getBoundingClientRect(),o=(s.top+s.bottom)/2,a=n.posAtCoords({x:r.left+1,y:o}),l=n.posAtCoords({x:r.right-1,y:o});return a==null||l==null?i:{from:Math.max(i.from,Math.min(a,l)),to:Math.min(i.to,Math.max(a,l))}}function ag(n,e,t){if(t.to<=n.viewport.from||t.from>=n.viewport.to)return[];let i=Math.max(t.from,n.viewport.from),s=Math.min(t.to,n.viewport.to),r=n.textDirection==fe.LTR,o=n.contentDOM,a=o.getBoundingClientRect(),l=Ru(n),c=o.querySelector(".cm-line"),h=c&&window.getComputedStyle(c),u=a.left+(h?parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)):0),f=a.right-(h?parseInt(h.paddingRight):0),d=Lo(n,i,1),p=Lo(n,s,-1),m=d.type==Le.Text?d:null,g=p.type==Le.Text?p:null;if(m&&(n.lineWrapping||d.widgetLineBreaks)&&(m=Gl(n,i,1,m)),g&&(n.lineWrapping||p.widgetLineBreaks)&&(g=Gl(n,s,-1,g)),m&&g&&m.from==g.from&&m.to==g.to)return b(x(t.from,t.to,m));{let k=m?x(t.from,null,m):C(d,!1),S=g?x(null,t.to,g):C(p,!0),w=[];return(m||d).to<(g||p).from-(m&&g?1:0)||d.widgetLineBreaks>1&&k.bottom+n.defaultLineHeight/2M&&Q.from=P)break;ee>D&&E(Math.max(J,D),k==null&&J<=M,Math.min(ee,P),S==null&&ee>=Y,ae.dir)}if(D=j.to+1,D>=P)break}return V.length==0&&E(M,k==null,Y,S==null,n.textDirection),{top:U,bottom:F,horizontal:V}}function C(k,S){let w=a.top+(S?k.top:k.bottom);return{top:w,bottom:w,horizontal:[]}}}function lg(n,e){return n.constructor==e.constructor&&n.eq(e)}class cg{constructor(e,t){this.view=e,this.layer=t,this.drawn=[],this.scaleX=1,this.scaleY=1,this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.scale(),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}update(e){e.startState.facet(bs)!=e.state.facet(bs)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&(this.scale(),e.view.requestMeasure(this.measureReq))}docViewUpdate(e){this.layer.updateOnDocViewUpdate!==!1&&e.requestMeasure(this.measureReq)}setOrder(e){let t=0,i=e.facet(bs);for(;t!lg(t,this.drawn[i]))){let t=this.dom.firstChild,i=0;for(let s of e)s.update&&t&&s.constructor&&this.drawn[i].constructor&&s.update(t,this.drawn[i])?(t=t.nextSibling,i++):this.dom.insertBefore(s.draw(),t);for(;t;){let s=t.nextSibling;t.remove(),t=s}this.drawn=e,R.webkit&&(this.dom.style.display=this.dom.firstChild?"":"none")}}destroy(){this.layer.destroy&&this.layer.destroy(this.dom,this.view),this.dom.remove()}}const bs=K.define();function $u(n){return[xe.define(e=>new cg(e,n)),bs.of(n)]}const zi=K.define({combine(n){return yt(n,{cursorBlinkRate:1200,drawRangeCursor:!0,iosSelectionHandles:!0},{cursorBlinkRate:(e,t)=>Math.min(e,t),drawRangeCursor:(e,t)=>e||t})}});function hg(n={}){return[zi.of(n),ug,fg,pg,nu.of(!0)]}function Ku(n){return n.startState.facet(zi)!=n.state.facet(zi)}const ug=$u({above:!0,markers(n){let{state:e}=n,t=e.facet(zi),i=[];for(let s of e.selection.ranges){let r=s==e.selection.main;if(s.empty||t.drawRangeCursor&&!(r&&R.ios&&t.iosSelectionHandles)){let o=r?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary",a=s.empty?s:A.cursor(s.head,s.assoc);for(let l of gi.forRange(n,o,a))i.push(l)}}return i},update(n,e){n.transactions.some(i=>i.selection)&&(e.style.animationName=e.style.animationName=="cm-blink"?"cm-blink2":"cm-blink");let t=Ku(n);return t&&_l(n.state,e),n.docChanged||n.selectionSet||t},mount(n,e){_l(e.state,n)},class:"cm-cursorLayer"});function _l(n,e){e.style.animationDuration=n.facet(zi).cursorBlinkRate+"ms"}const fg=$u({above:!1,markers(n){let e=[],{main:t,ranges:i}=n.state.selection;for(let s of i)if(!s.empty)for(let r of gi.forRange(n,"cm-selectionBackground",s))e.push(r);if(R.ios&&!t.empty&&n.state.facet(zi).iosSelectionHandles){for(let s of gi.forRange(n,"cm-selectionHandle cm-selectionHandle-start",A.cursor(t.from,1)))e.push(s);for(let s of gi.forRange(n,"cm-selectionHandle cm-selectionHandle-end",A.cursor(t.to,1)))e.push(s)}return e},update(n,e){return n.docChanged||n.selectionSet||n.viewportChanged||Ku(n)},class:"cm-selectionLayer"}),dg=R.gecko&&R.gecko_version==153?"#ffffff01":"transparent",pg=ri.highest($.theme({".cm-line":{"& ::selection, &::selection":{backgroundColor:`${dg} !important`},caretColor:"transparent !important"},".cm-content":{caretColor:"transparent !important","& :focus":{caretColor:"initial !important","&::selection, & ::selection":{backgroundColor:"Highlight !important"}}}})),Zu=z.define({map(n,e){return n==null?null:e.mapPos(n)}}),fn=Te.define({create(){return null},update(n,e){return n!=null&&(n=e.changes.mapPos(n)),e.effects.reduce((t,i)=>i.is(Zu)?i.value:t,n)}}),mg=xe.fromClass(class{constructor(n){this.view=n,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(n){var e;let t=n.state.field(fn);t==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(n.startState.field(fn)!=t||n.docChanged||n.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let{view:n}=this,e=n.state.field(fn),t=e!=null&&n.coordsAtPos(e);if(!t)return null;let i=n.scrollDOM.getBoundingClientRect();return{left:t.left-i.left+n.scrollDOM.scrollLeft*n.scaleX,top:t.top-i.top+n.scrollDOM.scrollTop*n.scaleY,height:t.bottom-t.top}}drawCursor(n){if(this.cursor){let{scaleX:e,scaleY:t}=this.view;n?(this.cursor.style.left=n.left/e+"px",this.cursor.style.top=n.top/t+"px",this.cursor.style.height=n.height/t+"px"):this.cursor.style.left="-100000px"}}destroy(){this.cursor&&this.cursor.remove()}setDropPos(n){this.view.state.field(fn)!=n&&this.view.dispatch({effects:Zu.of(n)})}},{eventObservers:{dragover(n){this.setDropPos(this.view.posAtCoords({x:n.clientX,y:n.clientY}))},dragleave(n){(n.target==this.view.contentDOM||!this.view.contentDOM.contains(n.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function gg(){return[fn,mg]}function Jl(n,e,t,i,s){e.lastIndex=0;for(let r=n.iterRange(t,i),o=t,a;!r.next().done;o+=r.value.length)if(!r.lineBreak)for(;a=e.exec(r.value);)s(o+a.index,a)}function Og(n,e){let t=n.visibleRanges;if(t.length==1&&t[0].from==n.viewport.from&&t[0].to==n.viewport.to)return t;let i=[];for(let{from:s,to:r}of t)s=Math.max(n.state.doc.lineAt(s).from,s-e),r=Math.min(n.state.doc.lineAt(r).to,r+e),i.length&&i[i.length-1].to>=s?i[i.length-1].to=r:i.push({from:s,to:r});return i}class yg{constructor(e){const{regexp:t,decoration:i,decorate:s,boundary:r,maxLength:o=1e3}=e;if(!t.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=t,s)this.addMatch=(a,l,c,h)=>s(h,c,c+a[0].length,a,l);else if(typeof i=="function")this.addMatch=(a,l,c,h)=>{let u=i(a,l,c);u&&h(c,c+a[0].length,u)};else if(i)this.addMatch=(a,l,c,h)=>h(c,c+a[0].length,i);else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=r,this.maxLength=o}createDeco(e){let t=new Bt,i=t.add.bind(t);for(let{from:s,to:r}of Og(e,this.maxLength))Jl(e.state.doc,this.regexp,s,r,(o,a)=>this.addMatch(a,e,o,i));return t.finish()}updateDeco(e,t){let i=1e9,s=-1;return e.docChanged&&e.changes.iterChanges((r,o,a,l)=>{l>=e.view.viewport.from&&a<=e.view.viewport.to&&(i=Math.min(a,i),s=Math.max(l,s))}),e.viewportMoved||s-i>1e3?this.createDeco(e.view):s>-1?this.updateRange(e.view,t.map(e.changes),i,s):t}updateRange(e,t,i,s){for(let r of e.visibleRanges){let o=Math.max(r.from,i),a=Math.min(r.to,s);if(a>=o){let l=e.state.doc.lineAt(o),c=l.tol.from;o--)if(this.boundary.test(l.text[o-1-l.from])){h=o;break}for(;af.push(y.range(m,g));if(l==c)for(this.regexp.lastIndex=h-l.from;(d=this.regexp.exec(l.text))&&d.indexthis.addMatch(g,e,m,p));t=t.update({filterFrom:h,filterTo:u,filter:(m,g)=>mu,add:f})}}return t}}const Vo=/x/.unicode!=null?"gu":"g",Ag=new RegExp(`[\0-\b +--Ÿ­؜​‎‏\u2028\u2029‭‮⁦⁧⁩\uFEFF-]`,Vo),bg={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let Xr=null;function Sg(){var n;if(Xr==null&&typeof document<"u"&&document.body){let e=document.body.style;Xr=((n=e.tabSize)!==null&&n!==void 0?n:e.MozTabSize)!=null}return Xr||!1}const Ss=K.define({combine(n){let e=yt(n,{render:null,specialChars:Ag,addSpecialChars:null});return(e.replaceTabs=!Sg())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,Vo)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,Vo)),e}});function xg(n={}){return[Ss.of(n),vg()]}let ec=null;function vg(){return ec||(ec=xe.fromClass(class{constructor(n){this.view=n,this.decorations=B.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(n.state.facet(Ss)),this.decorations=this.decorator.createDeco(n)}makeDecorator(n){return new yg({regexp:n.specialChars,decoration:(e,t,i)=>{let{doc:s}=t.state,r=Ne(e[0],0);if(r==9){let o=s.lineAt(i),a=t.state.tabSize,l=_i(o.text,a,i-o.from);return B.replace({widget:new Pg((a-l%a)*this.view.defaultCharacterWidth/this.view.scaleX)})}return this.decorationCache[r]||(this.decorationCache[r]=B.replace({widget:new Qg(n,r)}))},boundary:n.replaceTabs?void 0:/[^]/})}update(n){let e=n.state.facet(Ss);n.startState.facet(Ss)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(n.view)):this.decorations=this.decorator.updateDeco(n,this.decorations)}},{decorations:n=>n.decorations}))}const wg="•";function kg(n){return n>=32?wg:n==10?"␤":String.fromCharCode(9216+n)}class Qg extends Ut{constructor(e,t){super(),this.options=e,this.code=t}eq(e){return e.code==this.code}toDOM(e){let t=kg(this.code),i=e.state.phrase("Control character")+" "+(bg[this.code]||"0x"+this.code.toString(16)),s=this.options.render&&this.options.render(this.code,i,t);if(s)return s;let r=document.createElement("span");return r.textContent=t,r.title=i,r.setAttribute("aria-label",i),r.className="cm-specialChar",r}ignoreEvent(){return!1}}class Pg extends Ut{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function Cg(){return Rg}const Tg=B.line({class:"cm-activeLine"}),Rg=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let s=n.lineBlockAt(i.head);s.from>e&&(t.push(Tg.range(s.from)),e=s.from)}return B.set(t)}},{decorations:n=>n.decorations}),jo=2e3;function $g(n,e,t){let i=Math.min(e.line,t.line),s=Math.max(e.line,t.line),r=[];if(e.off>jo||t.off>jo||e.col<0||t.col<0){let o=Math.min(e.off,t.off),a=Math.max(e.off,t.off);for(let l=i;l<=s;l++){let c=n.doc.line(l);c.length<=a&&r.push(A.range(c.from+o,c.to+a))}}else{let o=Math.min(e.col,t.col),a=Math.max(e.col,t.col);for(let l=i;l<=s;l++){let c=n.doc.line(l),h=Qo(c.text,o,n.tabSize,!0);if(h<0)r.push(A.cursor(c.to));else{let u=Qo(c.text,a,n.tabSize);r.push(A.range(c.from+h,c.from+u))}}}return r}function Kg(n,e){let t=n.coordsAtPos(n.viewport.from);return t?Math.round(Math.abs((t.left-e)/n.defaultCharacterWidth)):-1}function tc(n,e){let t=n.posAtCoords({x:e.clientX,y:e.clientY},!1),i=n.state.doc.lineAt(t),s=t-i.from,r=s>jo?-1:s==i.length?Kg(n,e.clientX):_i(i.text,n.state.tabSize,t-i.from);return{line:i.number,col:r,off:s}}function Zg(n,e){let t=tc(n,e),i=n.state.selection;return t?{update(s){if(s.docChanged){let r=s.changes.mapPos(s.startState.doc.line(t.line).from),o=s.state.doc.lineAt(r);t={line:o.number,col:t.col,off:Math.min(t.off,o.length)},i=i.map(s.changes)}},get(s,r,o){let a=tc(n,s);if(!a)return i;let l=$g(n.state,t,a);return l.length?o?A.create(l.concat(i.ranges)):A.create(l):i}}:null}function Mg(n){let e=(t=>t.altKey&&t.button==0);return $.mouseSelectionStyle.of((t,i)=>e(i)?Zg(t,i):null)}const Eg={Alt:[18,n=>!!n.altKey],Control:[17,n=>!!n.ctrlKey],Shift:[16,n=>!!n.shiftKey],Meta:[91,n=>!!n.metaKey]},Ug={style:"cursor: crosshair"};function Fg(n={}){let[e,t]=Eg[n.key||"Alt"],i=xe.fromClass(class{constructor(s){this.view=s,this.isDown=!1}set(s){this.isDown!=s&&(this.isDown=s,this.view.update([]))}},{eventObservers:{keydown(s){this.set(s.keyCode==e||t(s))},keyup(s){(s.keyCode==e||!t(s))&&this.set(!1)},mousemove(s){this.set(t(s))}}});return[i,$.contentAttributes.of(s=>{var r;return!((r=s.plugin(i))===null||r===void 0)&&r.isDown?Ug:null})]}const ns="-10000px";class Mu{constructor(e,t,i,s){this.facet=t,this.createTooltipView=i,this.removeTooltipView=s,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let r=null;this.tooltipViews=this.tooltips.map(o=>r=i(o,r))}update(e,t){var i;let s=e.state.facet(this.facet),r=s.filter(l=>l);if(s===this.input){for(let l of this.tooltipViews)l.update&&l.update(e);return!1}let o=[],a=t?[]:null;for(let l=0;lt[c]=l),t.length=a.length),this.input=s,this.tooltips=r,this.tooltipViews=o,!0}}function Dg(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const Br=K.define({combine:n=>{var e,t,i;return{position:R.ios?"absolute":((e=n.find(s=>s.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(s=>s.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(s=>s.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||Dg}}}),ic=new WeakMap,Ca=xe.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Br);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new Mu(n,gr,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Br);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let s of this.manager.tooltipViews)s.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let s of this.manager.tooltipViews)this.container.appendChild(s.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",t.dom.appendChild(s)}return t.dom.style.position=this.position,t.dom.style.top=ns,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:r}=this.manager.tooltipViews[0];if(R.safari){let o=r.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!r.offsetParent&&r.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let r=this.parent.getBoundingClientRect();r.width&&r.height&&(n=r.width/this.parent.offsetWidth,e=r.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),s=wa(this.view);return{visible:{left:i.left+s.left,top:i.top+s.top,right:i.right-s.right,bottom:i.bottom-s.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((r,o)=>{let a=this.manager.tooltipViews[o];return a.getCoords?a.getCoords(r.pos):this.view.coordsAtPos(r.pos)}),size:this.manager.tooltipViews.map(({dom:r})=>r.getBoundingClientRect()),space:this.view.state.facet(Br).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let a of this.manager.tooltipViews)a.dom.style.position="absolute"}let{visible:t,space:i,scaleX:s,scaleY:r}=n,o=[];for(let a=0;a=Math.min(t.bottom,i.bottom)||u.rightMath.min(t.right,i.right)+.1)){h.style.top=ns;continue}let d=l.arrow?c.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=f.right-f.left,g=(e=ic.get(c))!==null&&e!==void 0?e:f.bottom-f.top,y=c.offset||Xg,b=this.view.textDirection==fe.LTR,x=f.width>i.right-i.left?b?i.left:i.right-f.width:b?Math.max(i.left,Math.min(u.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,u.left-m+(d?14:0)-y.x),i.right-m),C=this.above[a];!l.strictSide&&(C?u.top-g-p-y.yi.bottom)&&C==i.bottom-u.bottom>u.top-i.top&&(C=this.above[a]=!C);let k=(C?u.top-i.top:i.bottom-u.bottom)-p;if(kx&&U.topS&&(S=C?U.top-g-2-p:U.bottom+p+2);if(this.position=="absolute"?(h.style.top=(S-n.parent.top)/r+"px",nc(h,(x-n.parent.left)/s)):(h.style.top=S/r+"px",nc(h,x/s)),d){let U=u.left+(b?y.x:-y.x)-(x+14-7);d.style.left=U/s+"px"}c.overlap!==!0&&o.push({left:x,top:S,right:w,bottom:S+g}),h.classList.toggle("cm-tooltip-above",C),h.classList.toggle("cm-tooltip-below",!C),c.positioned&&c.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=ns}},{eventObservers:{scroll(){this.maybeMeasure()}}});function nc(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const Lg=$.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),Xg={x:0,y:0},gr=K.define({enables:[Ca,Lg]}),Ds=K.define({combine:n=>n.reduce((e,t)=>e.concat(t),[])});class Or{static create(e){return new Or(e)}constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new Mu(e,Ds,(t,i)=>this.createHostedView(t,i),t=>t.dom.remove())}createHostedView(e,t){let i=e.create(this.view);return i.dom.classList.add("cm-tooltip-section"),this.dom.insertBefore(i.dom,t?t.dom.nextSibling:this.dom.firstChild),this.mounted&&i.mount&&i.mount(this.view),i}mount(e){for(let t of this.manager.tooltipViews)t.mount&&t.mount(e);this.mounted=!0}positioned(e){for(let t of this.manager.tooltipViews)t.positioned&&t.positioned(e)}update(e){this.manager.update(e)}destroy(){var e;for(let t of this.manager.tooltipViews)(e=t.destroy)===null||e===void 0||e.call(t)}passProp(e){let t;for(let i of this.manager.tooltipViews){let s=i[e];if(s!==void 0){if(t===void 0)t=s;else if(t!==s)return}}return t}get offset(){return this.passProp("offset")}get getCoords(){return this.passProp("getCoords")}get overlap(){return this.passProp("overlap")}get resize(){return this.passProp("resize")}}const Bg=gr.compute([Ds],n=>{let e=n.facet(Ds);return e.length===0?null:{pos:Math.min(...e.map(t=>t.pos)),end:Math.max(...e.map(t=>{var i;return(i=t.end)!==null&&i!==void 0?i:t.pos})),create:Or.create,above:e[0].above,arrow:e.some(t=>t.arrow)}}),Ig=K.define();class qg{constructor(e,t,i,s,r,o){this.view=e,this.source=t,this.field=i,this.locked=s,this.setHover=r,this.hoverTime=o,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(e){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active.length)return;let e=Date.now()-this.lastMove.time;eo.bottom||t.xo.right+e.defaultCharacterWidth)return;let a=e.bidiSpans(e.state.doc.lineAt(s)).find(c=>c.from<=s&&c.to>=s),l=a&&a.dir==fe.RTL?-1:1;r=t.x{if(a&&!(Array.isArray(a)&&!a.length)){let l=Array.isArray(a)?a:[a];s&&this.locked.set(l,s),e.dispatch({effects:this.setHover.of(l)})}};if(r&&"then"in r){let a=this.pending={pos:t};r.then(l=>{this.pending==a&&(this.pending=null,o(l))},l=>ze(e.state,l,"hover tooltip"))}else o(r)}get tooltip(){let e=this.view.plugin(Ca),t=e?e.manager.tooltips.findIndex(i=>i.create==Or.create):-1;return t>-1?e.manager.tooltipViews[t]:null}mousemove(e){var t,i;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let{active:s,tooltip:r}=this;if(s.length&&!this.locked.has(s)&&r&&!Wg(r.dom,e)||this.pending){let{pos:o}=s[0]||this.pending,a=(i=(t=s[0])===null||t===void 0?void 0:t.end)!==null&&i!==void 0?i:o;(o==a?this.view.posAtCoords(this.lastMove)!=o:!zg(this.view,o,a,e.clientX,e.clientY))&&(this.view.dispatch({effects:this.setHover.of([])}),this.pending=null)}}mouseleave(e){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1;let{active:t}=this;if(t.length&&!this.locked.has(t)){let{tooltip:i}=this;i&&i.dom.contains(e.relatedTarget)?this.watchTooltipLeave(i.dom):this.view.dispatch({effects:this.setHover.of([])})}}watchTooltipLeave(e){let t=i=>{e.removeEventListener("mouseleave",t);let{active:s}=this;s.length&&!this.locked.has(s)&&!this.view.dom.contains(i.relatedTarget)&&this.view.dispatch({effects:this.setHover.of([])})};e.addEventListener("mouseleave",t)}destroy(){clearTimeout(this.hoverTimeout),clearTimeout(this.restartTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}const ss=4;function Wg(n,e){let{left:t,right:i,top:s,bottom:r}=n.getBoundingClientRect(),o;if(o=n.querySelector(".cm-tooltip-arrow")){let a=o.getBoundingClientRect();s=Math.min(a.top,s),r=Math.max(a.bottom,r)}return e.clientX>=t-ss&&e.clientX<=i+ss&&e.clientY>=s-ss&&e.clientY<=r+ss}function zg(n,e,t,i,s,r){let o=n.scrollDOM.getBoundingClientRect(),a=n.documentTop+n.documentPadding.top+n.contentHeight;if(o.left>i||o.rights||Math.min(o.bottom,a)=e&&l<=t}function Eu(n,e={}){let t=z.define(),i=new WeakMap,s=Te.define({create(){return[]},update(o,a){let l=i.get(o);if(o.length&&(e.hideOnChange&&(a.docChanged||a.selection)?o=[]:l&&l(a)?o=[]:e.hideOn&&(o=o.filter(c=>!e.hideOn(a,c)))),a.docChanged&&o.length){let c=[];for(let h of o){let u=a.changes.mapPos(h.pos,-1,De.TrackDel);if(u!=null){let f=Object.assign(Object.create(null),h);f.pos=u,f.end!=null&&(f.end=a.changes.mapPos(f.end)),c.push(f)}}o=c}for(let c of a.effects)c.is(t)&&(o=c.value,l=void 0),(c.is(Vg)&&!c.value||c.value==s)&&(o=[]);return o.length&&l&&i.set(o,l),o},provide:o=>Ds.from(o)});const r=xe.define(o=>new qg(o,n,s,i,t,e.hoverTime||300));return{active:s,extension:[s,r,Ig.of(r),Bg]}}function Uu(n,e){let t=n.plugin(Ca);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}const Vg=z.define(),sc=K.define({combine(n){let e,t;for(let i of n)e=e||i.topContainer,t=t||i.bottomContainer;return{topContainer:e,bottomContainer:t}}});function Fu(n,e){let t=n.plugin(Du),i=t?t.specs.indexOf(e):-1;return i>-1?t.panels[i]:null}const Du=xe.fromClass(class{constructor(n){this.input=n.state.facet(Vi),this.specs=this.input.filter(t=>t),this.panels=this.specs.map(t=>t(n));let e=n.state.facet(sc);this.top=new rs(n,!0,e.topContainer),this.bottom=new rs(n,!1,e.bottomContainer),this.top.sync(this.panels.filter(t=>t.top)),this.bottom.sync(this.panels.filter(t=>!t.top));for(let t of this.panels)t.dom.classList.add("cm-panel"),t.mount&&t.mount()}update(n){let e=n.state.facet(sc);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new rs(n.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new rs(n.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let t=n.state.facet(Vi);if(t!=this.input){let i=t.filter(l=>l),s=[],r=[],o=[],a=[];for(let l of i){let c=this.specs.indexOf(l),h;c<0?(h=l(n.view),a.push(h)):(h=this.panels[c],h.update&&h.update(n)),s.push(h),(h.top?r:o).push(h)}this.specs=i,this.panels=s,this.top.sync(r),this.bottom.sync(o);for(let l of a)l.dom.classList.add("cm-panel"),l.mount&&l.mount()}else for(let i of this.panels)i.update&&i.update(n)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:n=>$.scrollMargins.of(e=>{let t=e.plugin(n);return t&&{top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()}})});class rs{constructor(e,t,i){this.view=e,this.top=t,this.container=i,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let t of this.panels)t.destroy&&e.indexOf(t)<0&&t.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let e=this.dom.firstChild;for(let t of this.panels)if(t.dom.parentNode==this.dom){for(;e!=t.dom;)e=rc(e);e=e.nextSibling}else this.dom.insertBefore(t.dom,e);for(;e;)e=rc(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function rc(n){let e=n.nextSibling;return n.remove(),e}const Vi=K.define({enables:Du});function jg(n,e){let t,i=new Promise(o=>t=o),s=o=>Yg(o,e,t);n.state.field(Ir,!1)?n.dispatch({effects:Lu.of(s)}):n.dispatch({effects:z.appendConfig.of(Ir.init(()=>[s]))});let r=Xu.of(s);return{close:r,result:i.then(o=>((n.win.queueMicrotask||(l=>n.win.setTimeout(l,10)))(()=>{n.state.field(Ir).indexOf(s)>-1&&n.dispatch({effects:r})}),o))}}const Ir=Te.define({create(){return[]},update(n,e){for(let t of e.effects)t.is(Lu)?n=[t.value].concat(n):t.is(Xu)&&(n=n.filter(i=>i!=t.value));return n},provide:n=>Vi.computeN([n],e=>e.field(n))}),Lu=z.define(),Xu=z.define();function Yg(n,e,t){let i=e.content?e.content(n,()=>o(null)):null;if(!i){if(i=he("form"),e.input){let a=he("input",e.input);/^(text|password|number|email|tel|url)$/.test(a.type)&&a.classList.add("cm-textfield"),a.name||(a.name="input"),i.appendChild(he("label",(e.label||"")+": ",a))}else i.appendChild(document.createTextNode(e.label||""));i.appendChild(document.createTextNode(" ")),i.appendChild(he("button",{class:"cm-button",type:"submit"},e.submitLabel||"OK"))}let s=i.nodeName=="FORM"?[i]:i.querySelectorAll("form");for(let a=0;a{c.keyCode==27?(c.preventDefault(),o(null)):c.keyCode==13&&(c.preventDefault(),o(l))}),l.addEventListener("submit",c=>{c.preventDefault(),o(l)})}let r=he("div",i,he("button",{onclick:()=>o(null),"aria-label":n.state.phrase("close"),class:"cm-dialog-close",type:"button"},["×"]));e.class&&(r.className=e.class),r.classList.add("cm-dialog");function o(a){r.contains(r.ownerDocument.activeElement)&&n.focus(),t(a)}return{dom:r,top:e.top,mount:()=>{if(e.focus){let a;typeof e.focus=="string"?a=i.querySelector(e.focus):a=i.querySelector("input")||i.querySelector("button"),a&&"select"in a?a.select():a&&"focus"in a&&a.focus()}}}}class Mt extends Jt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Mt.prototype.elementClass="";Mt.prototype.toDOM=void 0;Mt.prototype.mapMode=De.TrackBefore;Mt.prototype.startSide=Mt.prototype.endSide=-1;Mt.prototype.point=!0;const xs=K.define(),Ng=K.define(),Hg={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>N.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},An=K.define();function Bu(n){return[Iu(),An.of({...Hg,...n})]}const oc=K.define({combine:n=>n.some(e=>e)});function Iu(n){return[Gg]}const Gg=xe.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(An).map(e=>new lc(n,e)),this.fixed=!n.state.facet(oc);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(oc)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=N.iter(this.view.state.facet(xs),this.view.viewport.from),i=[],s=this.gutters.map(r=>new _g(r,this.view.viewport,-this.view.documentPadding.top));for(let r of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(r.type)){let o=!0;for(let a of r.type)if(a.type==Le.Text&&o){Yo(t,i,a.from);for(let l of s)l.line(this.view,a,i);o=!1}else if(a.widget)for(let l of s)l.widget(this.view,a)}else if(r.type==Le.Text){Yo(t,i,r.from);for(let o of s)o.line(this.view,r,i)}else if(r.widget)for(let o of s)o.widget(this.view,r);for(let r of s)r.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(An),t=n.state.facet(An),i=n.docChanged||n.heightChanged||n.viewportChanged||!N.eq(n.startState.facet(xs),n.state.facet(xs),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let s of this.gutters)s.update(n)&&(i=!0);else{i=!0;let s=[];for(let r of t){let o=e.indexOf(r);o<0?s.push(new lc(this.view,r)):(this.gutters[o].update(n),s.push(this.gutters[o]))}for(let r of this.gutters)r.dom.remove(),s.indexOf(r)<0&&r.destroy();for(let r of s)r.config.side=="after"?this.getDOMAfter().appendChild(r.dom):this.dom.appendChild(r.dom);this.gutters=s}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>$.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,s=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==fe.LTR?{left:i,right:s}:{right:i,left:s}})});function ac(n){return Array.isArray(n)?n:[n]}function Yo(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class _g{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=N.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:s}=this,r=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==s.elements.length){let a=new qu(e,o,r,i);s.elements.push(a),s.dom.appendChild(a.dom)}else s.elements[this.i].update(e,o,r,i);this.height=t.bottom,this.i++}line(e,t,i){let s=[];Yo(this.cursor,s,t.from),i.length&&(s=s.concat(i));let r=this.gutter.config.lineMarker(e,t,s);r&&s.unshift(r);let o=this.gutter;s.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,s)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),s=i?[i]:null;for(let r of e.state.facet(Ng)){let o=r(e,t.widget,t);o&&(s||(s=[])).push(o)}s&&this.addElement(e,t,s)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class lc{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,s=>{let r=s.target,o;if(r!=this.dom&&this.dom.contains(r)){for(;r.parentNode!=this.dom;)r=r.parentNode;let l=r.getBoundingClientRect();o=(l.top+l.bottom)/2}else o=s.clientY;let a=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,a,s)&&s.preventDefault()});this.markers=ac(t.markers(e)),t.initialSpacer&&(this.spacer=new qu(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ac(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let s=this.config.updateSpacer(this.spacer.markers[0],e);s!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[s])}let i=e.view.viewport;return!N.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class qu{constructor(e,t,i,s){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,s)}update(e,t,i,s){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Jg(this.markers,s)||this.setMarkers(e,s)}setMarkers(e,t){let i="cm-gutterElement",s=this.dom.firstChild;for(let r=0,o=0;;){let a=o,l=rr(a,l,c)||o(a,l,c):o}return i}})}});class qr extends Mt{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Wr(n,e){return n.state.facet(Ri).formatNumber(e,n.state)}const iO=An.compute([Ri],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(eO)},lineMarker(e,t,i){return i.some(s=>s.toDOM)?null:new qr(Wr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let s of e.state.facet(tO)){let r=s(e,t,i);if(r)return r}return null},lineMarkerChange:e=>e.startState.facet(Ri)!=e.state.facet(Ri),initialSpacer(e){return new qr(Wr(e,cc(e.state.doc.lines)))},updateSpacer(e,t){let i=Wr(t.view,cc(t.view.state.doc.lines));return i==e.number?e:new qr(i)},domEventHandlers:n.facet(Ri).domEventHandlers,side:"before"}));function nO(n={}){return[Ri.of(n),Iu(),iO]}function cc(n){let e=9;for(;e{let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.head).from;s>t&&(t=s,e.push(sO.range(s)))}return N.of(e)});function oO(){return rO}const Wu=1024;let aO=0;class zr{constructor(e,t){this.from=e,this.to=t}}class G{constructor(e={}){this.id=aO++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=et.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}G.closedBy=new G({deserialize:n=>n.split(" ")});G.openedBy=new G({deserialize:n=>n.split(" ")});G.group=new G({deserialize:n=>n.split(" ")});G.isolate=new G({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});G.contextHash=new G({perNode:!0});G.lookAhead=new G({perNode:!0});G.mounted=new G({perNode:!0});class bn{constructor(e,t,i,s=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=s}static get(e){return e&&e.props&&e.props[G.mounted.id]}}const lO=Object.create(null);class et{constructor(e,t,i,s=0){this.name=e,this.props=t,this.id=i,this.flags=s}static define(e){let t=e.props&&e.props.length?Object.create(null):lO,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),s=new et(e.name||"",t,e.id,i);if(e.props){for(let r of e.props)if(Array.isArray(r)||(r=r(s)),r){if(r[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[r[0].id]=r[1]}}return s}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(G.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let s of i.split(" "))t[s]=e[i];return i=>{for(let s=i.prop(G.group),r=-1;r<(s?s.length:0);r++){let o=t[r<0?i.name:s[r]];if(o)return o}}}}et.none=new et("",Object.create(null),0,8);class Ta{constructor(e){this.types=e;for(let t=0;t0;for(let l=this.cursor(o|be.IncludeAnonymous);;){let c=!1;if(l.from<=r&&l.to>=s&&(!a&&l.type.isAnonymous||t(l)!==!1)){if(l.firstChild())continue;c=!0}for(;c&&i&&(a||!l.type.isAnonymous)&&i(l),!l.nextSibling();){if(!l.parent())return;c=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Ka(et.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,s)=>new ke(this.type,t,i,s,this.propValues),e.makeTree||((t,i,s)=>new ke(et.none,t,i,s)))}static build(e){return fO(e)}}ke.empty=new ke(et.none,[],[],0);class Ra{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Ra(this.buffer,this.index)}}class ni{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return et.none}toString(){let e=[];for(let t=0;t0));l=o[l+3]);return a}slice(e,t,i){let s=this.buffer,r=new Uint16Array(t-e),o=0;for(let a=e,l=0;a=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Pn(n,e,t,i){for(var s;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?a.length:-1;e!=c;e+=t){let h=a[e],u=l[e]+o.from,f;if(!(!(r&be.EnterBracketed&&h instanceof ke&&(f=bn.get(h))&&!f.overlay&&f.bracketed&&i>=u&&i<=u+h.length)&&!zu(s,i,u,u+h.length))){if(h instanceof ni){if(r&be.ExcludeBuffers)continue;let d=h.findChild(0,h.buffer.length,t,i-u,s);if(d>-1)return new Tt(new cO(o,h,e,u),null,d)}else if(r&be.IncludeAnonymous||!h.type.isAnonymous||$a(h)){let d;if(!(r&be.IgnoreMounts)&&(d=bn.get(h))&&!d.overlay)return new Je(d.tree,u,e,o);let p=new Je(h,u,e,o);return r&be.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?h.children.length-1:0,t,i,s,r)}}}if(r&be.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let s;if(!(i&be.IgnoreOverlays)&&(s=bn.get(this._tree))&&s.overlay){let r=e-this.from,o=i&be.EnterBracketed&&s.bracketed;for(let{from:a,to:l}of s.overlay)if((t>0||o?a<=r:a=r:l>r))return new Je(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function uc(n,e,t,i){let s=n.cursor(),r=[];if(!s.firstChild())return r;if(t!=null){for(let o=!1;!o;)if(o=s.type.is(t),!s.nextSibling())return r}for(;;){if(i!=null&&s.type.is(i))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return i==null?r:[]}}function No(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class cO{constructor(e,t,i,s){this.parent=e,this.buffer=t,this.index=i,this.start=s}}class Tt extends Vu{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.context.start,i);return r<0?null:new Tt(this.context,this,r)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&be.ExcludeBuffers)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return r<0?null:new Tt(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new Tt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new Tt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,s=this.index+4,r=i.buffer[this.index+3];if(r>s){let o=i.buffer[this.index+1];e.push(i.slice(s,r,o)),t.push(0)}return new ke(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function ju(n){if(!n.length)return null;let e=0,t=n[0];for(let r=1;rt.from||o.to=e){let a=new Je(o.tree,o.overlay[0].from+r.from,-1,r);(s||(s=[i])).push(Pn(a,e,t,!1))}}return s?ju(s):i}class Ho{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~be.EnterBracketed,e instanceof Je)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:s}=this.buffer;return this.type=t||s.set.types[s.buffer[e]],this.from=i+s.buffer[e+1],this.to=i+s.buffer[e+2],!0}yield(e){return e?e instanceof Je?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:s}=this.buffer,r=s.findChild(this.index+4,s.buffer[this.index+3],e,t-this.buffer.start,i);return r<0?!1:(this.stack.push(this.index),this.yieldBuf(r))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&be.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&be.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&be.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let s=i<0?0:this.stack[i]+4;if(this.index!=s)return this.yieldBuf(t.findChild(s,this.index,-1,0,4))}else{let s=t.buffer[this.index+3];if(s<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(s)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:s}=this;if(s){if(e>0){if(this.index-1)for(let r=t+e,o=e<0?-1:i._tree.children.length;r!=o;r+=e){let a=i._tree.children[r];if(this.mode&be.IncludeAnonymous||a instanceof ni||!a.type.isAnonymous||$a(a))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==s){if(s==this.index)return o;t=o,i=r+1;break e}s=this.stack[--r]}for(let s=i;s=0;r--){if(r<0)return No(this._tree,e,s);let o=i[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[s]&&e[s]!=o.name)return!1;s--}}return!0}}function $a(n){return n.children.some(e=>e instanceof ni||!e.type.isAnonymous||$a(e))}function fO(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:s=Wu,reused:r=[],minRepeatType:o=i.types.length}=n,a=Array.isArray(t)?new Ra(t,t.length):t,l=i.types,c=0,h=0;function u(k,S,w,U,F,V){let{id:E,start:M,end:Y,size:Q}=a,D=h,P=c;if(Q<0)if(a.next(),Q==-1){let I=r[E];w.push(I),U.push(M-k);return}else if(Q==-3){c=E;return}else if(Q==-4){h=E;return}else throw new RangeError(`Unrecognized record size: ${Q}`);let j=l[E],ae,J,ee=M-k;if(Y-M<=s&&(J=g(a.pos-S,F))){let I=new Uint16Array(J.size-J.skip),H=a.pos-J.size,ce=I.length;for(;a.pos>H;)ce=y(J.start,I,ce);ae=new ni(I,Y-J.start,i),ee=J.start-k}else{let I=a.pos-Q;a.next();let H=[],ce=[],q=E>=o?E:-1,te=0,re=Y;for(;a.pos>I;)q>=0&&a.id==q&&a.size>=0?(a.end<=re-s&&(p(H,ce,M,te,a.end,re,q,D,P),te=H.length,re=a.end),a.next()):V>2500?f(M,I,H,ce):u(M,I,H,ce,q,V+1);if(q>=0&&te>0&&te-1&&te>0){let Me=d(j,P);ae=Ka(j,H,ce,0,H.length,0,Y-M,Me,Me)}else ae=m(j,H,ce,Y-M,D-Y,P)}w.push(ae),U.push(ee)}function f(k,S,w,U){let F=[],V=0,E=-1;for(;a.pos>S;){let{id:M,start:Y,end:Q,size:D}=a;if(D>4)a.next();else{if(E>-1&&Y=0;Q-=3)M[D++]=F[Q],M[D++]=F[Q+1]-Y,M[D++]=F[Q+2]-Y,M[D++]=D;w.push(new ni(M,F[2]-Y,i)),U.push(Y-k)}}function d(k,S){return(w,U,F)=>{let V=0,E=w.length-1,M,Y;if(E>=0&&(M=w[E])instanceof ke){if(!E&&M.type==k&&M.length==F)return M;(Y=M.prop(G.lookAhead))&&(V=U[E]+M.length+Y)}return m(k,w,U,F,V,S)}}function p(k,S,w,U,F,V,E,M,Y){let Q=[],D=[];for(;k.length>U;)Q.push(k.pop()),D.push(S.pop()+w-F);k.push(m(i.types[E],Q,D,V-F,M-V,Y)),S.push(F-w)}function m(k,S,w,U,F,V,E){if(V){let M=[G.contextHash,V];E=E?[M].concat(E):[M]}if(F>25){let M=[G.lookAhead,F];E=E?[M].concat(E):[M]}return new ke(k,S,w,U,E)}function g(k,S){let w=a.fork(),U=0,F=0,V=0,E=w.end-s,M={size:0,start:0,skip:0};e:for(let Y=w.pos-k;w.pos>Y;){let Q=w.size;if(w.id==S&&Q>=0){M.size=U,M.start=F,M.skip=V,V+=4,U+=4,w.next();continue}let D=w.pos-Q;if(Q<0||D=o?4:0,j=w.start;for(w.next();w.pos>D;){if(w.size<0)if(w.size==-3||w.size==-4)P+=4;else break e;else w.id>=o&&(P+=4);w.next()}F=j,U+=Q,V+=P}return(S<0||U==k)&&(M.size=U,M.start=F,M.skip=V),M.size>4?M:void 0}function y(k,S,w){let{id:U,start:F,end:V,size:E}=a;if(a.next(),E>=0&&U4){let Y=a.pos-(E-4);for(;a.pos>Y;)w=y(k,S,w)}S[--w]=M,S[--w]=V-k,S[--w]=F-k,S[--w]=U}else E==-3?c=U:E==-4&&(h=U);return w}let b=[],x=[];for(;a.pos>0;)u(n.start||0,n.bufferStart||0,b,x,-1,0);let C=(e=n.length)!==null&&e!==void 0?e:b.length?x[0]+b[0].length:0;return new ke(l[n.topID],b.reverse(),x.reverse(),C)}const fc=new WeakMap;function vs(n,e){if(!n.isAnonymous||e instanceof ni||e.type!=n)return 1;let t=fc.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof ke)){t=1;break}t+=vs(n,i)}fc.set(e,t)}return t}function Ka(n,e,t,i,s,r,o,a,l){let c=0;for(let p=i;p=h)break;S+=w}if(x==C+1){if(S>h){let w=p[C];d(w.children,w.positions,0,w.children.length,m[C]+b);continue}u.push(p[C])}else{let w=m[x-1]+p[x-1].length-k;u.push(Ka(n,p,m,C,x,k,w,null,l))}f.push(k+b-r)}}return d(e,t,i,s,0),(a||l)(u,f,o)}class dO{constructor(){this.map=new WeakMap}setBuffer(e,t,i){let s=this.map.get(e);s||this.map.set(e,s=new Map),s.set(t,i)}getBuffer(e,t){let i=this.map.get(e);return i&&i.get(t)}set(e,t){e instanceof Tt?this.setBuffer(e.context.buffer,e.index,t):e instanceof Je&&this.map.set(e.tree,t)}get(e){return e instanceof Tt?this.getBuffer(e.context.buffer,e.index):e instanceof Je?this.map.get(e.tree):void 0}cursorSet(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class Oi{constructor(e,t,i,s,r=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=s,this.open=(r?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let s=[new Oi(0,e.length,e,0,!1,i)];for(let r of t)r.to>e.length&&s.push(r);return s}static applyChanges(e,t,i=128){if(!t.length)return e;let s=[],r=1,o=e.length?e[0]:null;for(let a=0,l=0,c=0;;a++){let h=a=i)for(;o&&o.from=f.from||u<=f.to||c){let d=Math.max(f.from,l)-c,p=Math.min(f.to,u)-c;f=d>=p?null:new Oi(d,p,f.tree,f.offset+c,a>0,!!h)}if(f&&s.push(f),o.to>u)break;o=rnew zr(s.from,s.to)):[new zr(0,0)]:[new zr(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let s=this.startParse(e,t,i);for(;;){let r=s.advance();if(r)return r}}}class pO{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new G({perNode:!0});let mO=0;class lt{constructor(e,t,i,s){this.name=e,this.set=t,this.base=i,this.modified=s,this.id=mO++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof lt&&(t=e),t?.base)throw new Error("Can not derive from a modified tag");let s=new lt(i,[],null,[]);if(s.set.push(s),t)for(let r of t.set)s.set.push(r);return s}static defineModifier(e){let t=new Ls(e);return i=>i.modified.indexOf(t)>-1?i:Ls.get(i.base||i,i.modified.concat(t).sort((s,r)=>s.id-r.id))}}let gO=0;class Ls{constructor(e){this.name=e,this.instances=[],this.id=gO++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(a=>a.base==e&&OO(t,a.modified));if(i)return i;let s=[],r=new lt(e.name,s,e,t);for(let a of t)a.instances.push(r);let o=yO(t);for(let a of e.set)if(!a.modified.length)for(let l of o)s.push(Ls.get(a,l));return r}}function OO(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function yO(n){let e=[[]];for(let t=0;ti.length-t.length)}function Nu(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let s of t.split(" "))if(s){let r=[],o=2,a=s;for(let u=0;;){if(a=="..."&&u>0&&u+3==s.length){o=1;break}let f=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(a);if(!f)throw new RangeError("Invalid path: "+s);if(r.push(f[0]=="*"?"":f[0][0]=='"'?JSON.parse(f[0]):f[0]),u+=f[0].length,u==s.length)break;let d=s[u++];if(u==s.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+s);a=s.slice(u)}let l=r.length-1,c=r[l];if(!c)throw new RangeError("Invalid path: "+s);let h=new Cn(i,o,l>0?r.slice(0,l):null);e[c]=h.sort(e[c])}}return Hu.add(e)}const Hu=new G({combine(n,e){let t,i,s;for(;n||e;){if(!n||e&&n.depth>=e.depth?(s=e,e=e.next):(s=n,n=n.next),t&&t.mode==s.mode&&!s.context&&!t.context)continue;let r=new Cn(s.tags,s.mode,s.context);t?t.next=r:i=r,t=r}return i}});class Cn{constructor(e,t,i,s){this.tags=e,this.mode=t,this.context=i,this.next=s}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=s;for(let a of r)for(let l of a.set){let c=t[l.id];if(c){o=o?o+" "+c:c;break}}return o},scope:i}}function AO(n,e){let t=null;for(let i of n){let s=i.style(e);s&&(t=t?t+" "+s:s)}return t}function bO(n,e,t,i=0,s=n.length){let r=new SO(i,Array.isArray(e)?e:[e],t);r.highlightRange(n.cursor(),i,s,"",r.highlighters),r.flush(s)}class SO{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,s,r){let{type:o,from:a,to:l}=e;if(a>=i||l<=t)return;o.isTop&&(r=this.highlighters.filter(d=>!d.scope||d.scope(o)));let c=s,h=xO(e)||Cn.empty,u=AO(r,h.tags);if(u&&(c&&(c+=" "),c+=u,h.mode==1&&(s+=(s?" ":"")+u)),this.startSpan(Math.max(t,a),c),h.opaque)return;let f=e.tree&&e.tree.prop(G.mounted);if(f&&f.overlay){let d=e.node.enter(f.overlay[0].from+a,1),p=this.highlighters.filter(g=>!g.scope||g.scope(f.tree.type)),m=e.firstChild();for(let g=0,y=a;;g++){let b=g=x||!e.nextSibling())););if(!b||x>i)break;y=b.to+a,y>t&&(this.highlightRange(d.cursor(),Math.max(t,b.from+a),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),c))}m&&e.parent()}else if(e.firstChild()){f&&(s="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,s,r),this.startSpan(Math.min(i,e.to),c)}while(e.nextSibling());e.parent()}}}function xO(n){let e=n.type.prop(Hu);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const T=lt.define,as=T(),Vt=T(),dc=T(Vt),pc=T(Vt),jt=T(),ls=T(jt),Vr=T(jt),wt=T(),li=T(wt),xt=T(),vt=T(),Go=T(),on=T(Go),cs=T(),O={comment:as,lineComment:T(as),blockComment:T(as),docComment:T(as),name:Vt,variableName:T(Vt),typeName:dc,tagName:T(dc),propertyName:pc,attributeName:T(pc),className:T(Vt),labelName:T(Vt),namespace:T(Vt),macroName:T(Vt),literal:jt,string:ls,docString:T(ls),character:T(ls),attributeValue:T(ls),number:Vr,integer:T(Vr),float:T(Vr),bool:T(jt),regexp:T(jt),escape:T(jt),color:T(jt),url:T(jt),keyword:xt,self:T(xt),null:T(xt),atom:T(xt),unit:T(xt),modifier:T(xt),operatorKeyword:T(xt),controlKeyword:T(xt),definitionKeyword:T(xt),moduleKeyword:T(xt),operator:vt,derefOperator:T(vt),arithmeticOperator:T(vt),logicOperator:T(vt),bitwiseOperator:T(vt),compareOperator:T(vt),updateOperator:T(vt),definitionOperator:T(vt),typeOperator:T(vt),controlOperator:T(vt),punctuation:Go,separator:T(Go),bracket:on,angleBracket:T(on),squareBracket:T(on),paren:T(on),brace:T(on),content:wt,heading:li,heading1:T(li),heading2:T(li),heading3:T(li),heading4:T(li),heading5:T(li),heading6:T(li),contentSeparator:T(wt),list:T(wt),quote:T(wt),emphasis:T(wt),strong:T(wt),link:T(wt),monospace:T(wt),strikethrough:T(wt),inserted:T(),deleted:T(),changed:T(),invalid:T(),meta:cs,documentMeta:T(cs),annotation:T(cs),processingInstruction:T(cs),definition:lt.defineModifier("definition"),constant:lt.defineModifier("constant"),function:lt.defineModifier("function"),standard:lt.defineModifier("standard"),local:lt.defineModifier("local"),special:lt.defineModifier("special")};for(let n in O){let e=O[n];e instanceof lt&&(e.name=n)}Gu([{tag:O.link,class:"tok-link"},{tag:O.heading,class:"tok-heading"},{tag:O.emphasis,class:"tok-emphasis"},{tag:O.strong,class:"tok-strong"},{tag:O.keyword,class:"tok-keyword"},{tag:O.atom,class:"tok-atom"},{tag:O.bool,class:"tok-bool"},{tag:O.url,class:"tok-url"},{tag:O.labelName,class:"tok-labelName"},{tag:O.inserted,class:"tok-inserted"},{tag:O.deleted,class:"tok-deleted"},{tag:O.literal,class:"tok-literal"},{tag:O.string,class:"tok-string"},{tag:O.number,class:"tok-number"},{tag:[O.regexp,O.escape,O.special(O.string)],class:"tok-string2"},{tag:O.variableName,class:"tok-variableName"},{tag:O.local(O.variableName),class:"tok-variableName tok-local"},{tag:O.definition(O.variableName),class:"tok-variableName tok-definition"},{tag:O.special(O.variableName),class:"tok-variableName2"},{tag:O.definition(O.propertyName),class:"tok-propertyName tok-definition"},{tag:O.typeName,class:"tok-typeName"},{tag:O.namespace,class:"tok-namespace"},{tag:O.className,class:"tok-className"},{tag:O.macroName,class:"tok-macroName"},{tag:O.propertyName,class:"tok-propertyName"},{tag:O.operator,class:"tok-operator"},{tag:O.comment,class:"tok-comment"},{tag:O.meta,class:"tok-meta"},{tag:O.invalid,class:"tok-invalid"},{tag:O.punctuation,class:"tok-punctuation"}]);var jr;const $i=new G;function _u(n){return K.define({combine:n?e=>e.concat(n):void 0})}const Za=new G;class mt{constructor(e,t,i=[],s=""){this.data=e,this.name=s,_.prototype.hasOwnProperty("tree")||Object.defineProperty(_.prototype,"tree",{get(){return Ce(this)}}),this.parser=t,this.extension=[si.of(this),_.languageData.of((r,o,a)=>{let l=mc(r,o,a),c=l.type.prop($i);if(!c)return[];let h=r.facet(c),u=l.type.prop(Za);if(u){let f=l.resolve(o-l.from,a);for(let d of u)if(d.test(f,r)){let p=r.facet(d.facet);return d.type=="replace"?p:p.concat(h)}}return h})].concat(i)}isActiveAt(e,t,i=-1){return mc(e,t,i).type.prop($i)==this.data}findRegions(e){let t=e.facet(si);if(t?.data==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],s=(r,o)=>{if(r.prop($i)==this.data){i.push({from:o,to:o+r.length});return}let a=r.prop(G.mounted);if(a){if(a.tree.prop($i)==this.data){if(a.overlay)for(let l of a.overlay)i.push({from:l.from+o,to:l.to+o});else i.push({from:o,to:o+r.length});return}else if(a.overlay){let l=i.length;if(s(a.tree,a.overlay[0].from+o),i.length>l)return}}for(let l=0;li.isTop?t:void 0)]}),e.name)}configure(e,t){return new Xs(this.data,this.parser.configure(e),t||this.name)}get allowsNesting(){return this.parser.hasWrappers()}}function Ce(n){let e=n.field(mt.state,!1);return e?e.tree:ke.empty}class vO{constructor(e){this.doc=e,this.cursorPos=0,this.string="",this.cursor=e.iter()}get length(){return this.doc.length}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,t){let i=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let an=null;class Bs{constructor(e,t,i=[],s,r,o,a,l){this.parser=e,this.state=t,this.fragments=i,this.tree=s,this.treeLen=r,this.viewport=o,this.skipped=a,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new Bs(e,t,[],ke.empty,0,i,[],null)}startParse(){return this.parser.startParse(new vO(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=ke.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let s=Date.now()+e;e=()=>Date.now()>s}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Oi.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=an;an=this;try{return e()}finally{an=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=gc(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:s,treeLen:r,viewport:o,skipped:a}=this;if(this.takeTree(),!e.empty){let l=[];if(e.iterChangedRanges((c,h,u,f)=>l.push({fromA:c,toA:h,fromB:u,toB:f})),i=Oi.applyChanges(i,l),s=ke.empty,r=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){a=[];for(let c of this.skipped){let h=e.mapPos(c.from,1),u=e.mapPos(c.to,-1);he.from&&(this.fragments=gc(this.fragments,s,r),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Yu{createParse(t,i,s){let r=s[0].from,o=s[s.length-1].to;return{parsedPos:r,advance(){let l=an;if(l){for(let c of s)l.tempSkipped.push(c);e&&(l.scheduleOn=l.scheduleOn?Promise.all([l.scheduleOn,e]):e)}return this.parsedPos=o,new ke(et.none,[],[],o-r)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return an}}function gc(n,e,t){return Oi.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class ji{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new ji(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=Bs.create(e.facet(si).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new ji(i)}}mt.state=Te.define({create:ji.init,update(n,e){for(let t of e.effects)if(t.is(mt.setState))return t.value;return e.startState.facet(si)!=e.state.facet(si)?ji.init(e.state):n.apply(e)}});let Ju=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Ju=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Yr=typeof navigator<"u"&&(!((jr=navigator.scheduling)===null||jr===void 0)&&jr.isInputPending)?()=>navigator.scheduling.isInputPending():null,wO=xe.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(mt.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(mt.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Ju(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEnds+1e3,l=r.context.work(()=>Yr&&Yr()||Date.now()>o,s+(a?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(r.context.takeTree(),this.view.dispatch({effects:mt.setState.of(new ji(r.context))})),this.chunkBudget>0&&!(l&&!a)&&this.scheduleWork(),this.checkAsyncSchedule(r.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>ze(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),si=K.define({combine(n){return n.length?n[0]:null},enables:n=>[mt.state,wO,$.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]});class kO{constructor(e,t=[]){this.language=e,this.support=t,this.extension=[e,t]}}const QO=K.define(),yr=K.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Is(n){let e=n.facet(yr);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Tn(n,e){let t="",i=n.tabSize,s=n.facet(yr)[0];if(s==" "){for(;e>=i;)t+=" ",e-=i;s=" "}for(let r=0;r=e?PO(n,t,e):null}class Ar{constructor(e,t={}){this.state=e,this.options=t,this.unit=Is(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:s,simulateDoubleBreak:r}=this.options;return s!=null&&s>=i.from&&s<=i.to?r&&s==e?{text:"",from:e}:(t<0?s-1&&(r+=o-this.countColumn(i,i.search(/\S|$/))),r}countColumn(e,t=e.length){return _i(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:s}=this.lineAt(e,t),r=this.options.overrideIndentation;if(r){let o=r(s);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const ef=new G;function PO(n,e,t){let i=e.resolveStack(t),s=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(s!=i.node){let r=[];for(let o=s;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)r.push(o);for(let o=r.length-1;o>=0;o--)i={node:r[o],next:i}}return tf(i,n,t)}function tf(n,e,t){for(let i=n;i;i=i.next){let s=TO(i.node);if(s)return s(Ea.create(e,t,i))}return 0}function CO(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function TO(n){let e=n.type.prop(ef);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(G.closedBy))){let s=n.lastChild,r=s&&i.indexOf(s.name)>-1;return o=>nf(o,!0,1,void 0,r&&!CO(o)?s.from:void 0)}return n.parent==null?RO:null}function RO(){return 0}class Ea extends Ar{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new Ea(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if($O(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return tf(this.context.next,this.base,this.pos)}}function $O(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function KO(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let s=n.options.simulateBreak,r=n.state.doc.lineAt(t.from),o=s==null||s<=r.from?r.to:Math.min(r.to,s);for(let a=t.to;;){let l=e.childAfter(a);if(!l||l==i)return null;if(!l.type.isSkipped){if(l.from>=o)return null;let c=/^ */.exec(r.text.slice(t.to-r.from))[0].length;return{from:t.from,to:t.to+c}}a=l.to}}function ZO({closing:n,align:e=!0,units:t=1}){return i=>nf(i,e,t,n)}function nf(n,e,t,i,s){let r=n.textAfter,o=r.match(/^\s*/)[0].length,a=i&&r.slice(o,o+i.length)==i||s==n.pos+o,l=e?KO(n):null;return l?a?n.column(l.from):n.column(l.to):n.baseIndent+(a?0:n.unit*t)}const MO=n=>n.baseIndent;function Nr({except:n,units:e=1}={}){return t=>{let i=n&&n.test(t.textAfter);return t.baseIndent+(i?0:e*t.unit)}}const EO=200;function UO(){return _.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,s=t.lineAt(i);if(i>s.from+EO)return n;let r=t.sliceString(s.from,i);if(!e.some(c=>c.test(r)))return n;let{state:o}=n,a=-1,l=[];for(let{head:c}of o.selection.ranges){let h=o.doc.lineAt(c);if(h.from==a)continue;a=h.from;let u=Ma(o,h.from);if(u==null)continue;let f=/^\s*/.exec(h.text)[0],d=Tn(o,u);f!=d&&l.push({from:h.from,to:h.from+f.length,insert:d})}return l.length?[n,{changes:l,sequential:!0}]:n})}const FO=K.define(),sf=new G;function DO(n){let e=n.firstChild,t=n.lastChild;return e&&e.tot)continue;if(r&&a.from=e&&c.to>t&&(r=c)}}return r}function XO(n){let e=n.lastChild;return e&&e.to==n.to&&e.type.isError}function qs(n,e,t){for(let i of n.facet(FO)){let s=i(n,e,t);if(s)return s}return LO(n,e,t)}function rf(n,e){let t=e.mapPos(n.from,1),i=e.mapPos(n.to,-1);return t>=i?void 0:{from:t,to:i}}const br=z.define({map:rf}),Ln=z.define({map:rf});function of(n){let e=[];for(let{head:t}of n.state.selection.ranges)e.some(i=>i.from<=t&&i.to>=t)||e.push(n.lineBlockAt(t));return e}const xi=Te.define({create(){return B.none},update(n,e){e.isUserEvent("delete")&&e.changes.iterChangedRanges((i,s)=>n=Oc(n,i,s)),n=n.map(e.changes);let t=[];for(let i of e.effects)i.is(br)&&!BO(n,i.value.from,i.value.to)?t.push(i.value):i.is(Ln)&&(n=n.update({filter:(s,r)=>i.value.from!=s||i.value.to!=r,filterFrom:i.value.from,filterTo:i.value.to}));if(t.length){let{preparePlaceholder:i}=e.state.facet(cf),s=t.map(r=>(i?B.replace({widget:new YO(i(e.state,r))}):yc).range(r.from,r.to));n=n.update({add:s})}return e.selection&&(n=Oc(n,e.selection.main.head)),n},provide:n=>$.decorations.from(n),toJSON(n,e){let t=[];return n.between(0,e.doc.length,(i,s)=>{t.push(i,s)}),t},fromJSON(n){if(!Array.isArray(n)||n.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let t=0;t{se&&(i=!0)}),i?n.update({filterFrom:e,filterTo:t,filter:(s,r)=>s>=t||r<=e}):n}function Ws(n,e,t){var i;let s=null;return(i=n.field(xi,!1))===null||i===void 0||i.between(e,t,(r,o)=>{(!s||s.from>r)&&(s={from:r,to:o})}),s}function BO(n,e,t){let i=!1;return n.between(e,e,(s,r)=>{s==e&&r==t&&(i=!0)}),i}function af(n,e){return n.field(xi,!1)?e:e.concat(z.appendConfig.of(hf()))}const IO=n=>{for(let e of of(n)){let t=qs(n.state,e.from,e.to);if(t)return n.dispatch({effects:af(n.state,[br.of(t),lf(n,t)])}),!0}return!1},qO=n=>{if(!n.state.field(xi,!1))return!1;let e=[];for(let t of of(n)){let i=Ws(n.state,t.from,t.to);i&&e.push(Ln.of(i),lf(n,i,!1))}return e.length&&n.dispatch({effects:e}),e.length>0};function lf(n,e,t=!0){let i=n.state.doc.lineAt(e.from).number,s=n.state.doc.lineAt(e.to).number;return $.announce.of(`${n.state.phrase(t?"Folded lines":"Unfolded lines")} ${i} ${n.state.phrase("to")} ${s}.`)}const WO=n=>{let{state:e}=n,t=[];for(let i=0;i{let e=n.state.field(xi,!1);if(!e||!e.size)return!1;let t=[];return e.between(0,n.state.doc.length,(i,s)=>{t.push(Ln.of({from:i,to:s}))}),n.dispatch({effects:t}),!0},VO=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:IO},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:qO},{key:"Ctrl-Alt-[",run:WO},{key:"Ctrl-Alt-]",run:zO}],jO={placeholderDOM:null,preparePlaceholder:null,placeholderText:"…"},cf=K.define({combine(n){return yt(n,jO)}});function hf(n){return[xi,GO]}function uf(n,e){let{state:t}=n,i=t.facet(cf),s=o=>{let a=n.lineBlockAt(n.posAtDOM(o.target)),l=Ws(n.state,a.from,a.to);l&&n.dispatch({effects:Ln.of(l)}),o.preventDefault()};if(i.placeholderDOM)return i.placeholderDOM(n,s,e);let r=document.createElement("span");return r.textContent=i.placeholderText,r.setAttribute("aria-label",t.phrase("folded code")),r.title=t.phrase("unfold"),r.className="cm-foldPlaceholder",r.onclick=s,r}const yc=B.replace({widget:new class extends Ut{toDOM(n){return uf(n,null)}}});class YO extends Ut{constructor(e){super(),this.value=e}eq(e){return this.value==e.value}toDOM(e){return uf(e,this.value)}}const NO={openText:"⌄",closedText:"›",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class Hr extends Mt{constructor(e,t){super(),this.config=e,this.open=t}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let t=document.createElement("span");return t.textContent=this.open?this.config.openText:this.config.closedText,t.title=e.state.phrase(this.open?"Fold line":"Unfold line"),t}}function HO(n={}){let e={...NO,...n},t=new Hr(e,!0),i=new Hr(e,!1),s=xe.fromClass(class{constructor(o){this.from=o.viewport.from,this.markers=this.buildMarkers(o)}update(o){(o.docChanged||o.viewportChanged||o.startState.facet(si)!=o.state.facet(si)||o.startState.field(xi,!1)!=o.state.field(xi,!1)||Ce(o.startState)!=Ce(o.state)||e.foldingChanged(o))&&(this.markers=this.buildMarkers(o.view))}buildMarkers(o){let a=new Bt;for(let l of o.viewportLineBlocks){let c=Ws(o.state,l.from,l.to)?i:qs(o.state,l.from,l.to)?t:null;c&&a.add(l.from,l.from,c)}return a.finish()}}),{domEventHandlers:r}=e;return[s,Bu({class:"cm-foldGutter",markers(o){var a;return((a=o.plugin(s))===null||a===void 0?void 0:a.markers)||N.empty},initialSpacer(){return new Hr(e,!1)},domEventHandlers:{...r,click:(o,a,l)=>{if(r.click&&r.click(o,a,l))return!0;let c=Ws(o.state,a.from,a.to);if(c)return o.dispatch({effects:Ln.of(c)}),!0;let h=qs(o.state,a.from,a.to);return h?(o.dispatch({effects:br.of(h)}),!0):!1}}}),hf()]}const GO=$.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class Xn{constructor(e,t){this.specs=e;let i;function s(a){let l=ei.newName();return(i||(i=Object.create(null)))["."+l]=a,l}const r=typeof t.all=="string"?t.all:t.all?s(t.all):void 0,o=t.scope;this.scope=o instanceof mt?a=>a.prop($i)==o.data:o?a=>a==o:void 0,this.style=Gu(e.map(a=>({tag:a.tag,class:a.class||s(Object.assign({},a,{tag:null}))})),{all:r}).style,this.module=i?new ei(i):null,this.themeType=t.themeType}static define(e,t){return new Xn(e,t||{})}}const _o=K.define(),_O=K.define({combine(n){return n.length?[n[0]]:null}});function Gr(n){let e=n.facet(_o);return e.length?e:n.facet(_O)}function JO(n,e){let t=[t0],i;return n instanceof Xn&&(n.module&&t.push($.styleModule.of(n.module)),i=n.themeType),i?t.push(_o.computeN([$.darkTheme],s=>s.facet($.darkTheme)==(i=="dark")?[n]:[])):t.push(_o.of(n)),t}class e0{constructor(e){this.markCache=Object.create(null),this.tree=Ce(e.state),this.decorations=this.buildDeco(e,Gr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Ce(e.state),i=Gr(e.state),s=i!=Gr(e.startState),{viewport:r}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=r.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||s)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=r.to)}buildDeco(e,t){if(!t||!this.tree.length)return B.none;let i=new Bt;for(let{from:s,to:r}of e.visibleRanges)bO(this.tree,t,(o,a,l)=>{i.add(o,a,this.markCache[l]||(this.markCache[l]=B.mark({class:l})))},s,r);return i.finish()}}const t0=ri.high(xe.fromClass(e0,{decorations:n=>n.decorations})),i0=Xn.define([{tag:O.meta,color:"#404740"},{tag:O.link,textDecoration:"underline"},{tag:O.heading,textDecoration:"underline",fontWeight:"bold"},{tag:O.emphasis,fontStyle:"italic"},{tag:O.strong,fontWeight:"bold"},{tag:O.strikethrough,textDecoration:"line-through"},{tag:O.keyword,color:"#708"},{tag:[O.atom,O.bool,O.url,O.contentSeparator,O.labelName],color:"#219"},{tag:[O.literal,O.inserted],color:"#164"},{tag:[O.string,O.deleted],color:"#a11"},{tag:[O.regexp,O.escape,O.special(O.string)],color:"#e40"},{tag:O.definition(O.variableName),color:"#00f"},{tag:O.local(O.variableName),color:"#30a"},{tag:[O.typeName,O.namespace],color:"#085"},{tag:O.className,color:"#167"},{tag:[O.special(O.variableName),O.macroName],color:"#256"},{tag:O.definition(O.propertyName),color:"#00c"},{tag:O.comment,color:"#940"},{tag:O.invalid,color:"#f00"}]),n0=$.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),ff=1e4,df="()[]{}",pf=K.define({combine(n){return yt(n,{afterCursor:!0,brackets:df,maxScanDistance:ff,renderMatch:o0})}}),s0=B.mark({class:"cm-matchingBracket"}),r0=B.mark({class:"cm-nonmatchingBracket"});function o0(n){let e=[],t=n.matched?s0:r0;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function Ac(n){let e=[],t=n.facet(pf);for(let i of n.selection.ranges){if(!i.empty)continue;let s=Rt(n,i.head,-1,t)||i.head>0&&Rt(n,i.head-1,1,t)||t.afterCursor&&(Rt(n,i.head,1,t)||i.headn.decorations}),l0=[a0,n0];function c0(n={}){return[pf.of(n),l0]}const h0=new G;function Jo(n,e,t){let i=n.prop(e<0?G.openedBy:G.closedBy);if(i)return i;if(n.name.length==1){let s=t.indexOf(n.name);if(s>-1&&s%2==(e<0?1:0))return[t[s+e]]}return null}function ea(n){let e=n.type.prop(h0);return e?e(n.node):n}function Rt(n,e,t,i={}){let s=i.maxScanDistance||ff,r=i.brackets||df,o=Ce(n),a=o.resolveInner(e,t);for(let l=a;l;l=l.parent){let c=Jo(l.type,t,r);if(c&&l.from0?e>=h.from&&eh.from&&e<=h.to))return u0(n,e,t,l,h,c,r)}}return f0(n,e,t,o,a.type,s,r)}function u0(n,e,t,i,s,r,o){let a=i.parent,l={from:s.from,to:s.to},c=0,h=a?.cursor();if(h&&(t<0?h.childBefore(i.from):h.childAfter(i.to)))do if(t<0?h.to<=i.from:h.from>=i.to){if(c==0&&r.indexOf(h.type.name)>-1&&h.from0)return null;let c={from:t<0?e-1:e,to:t>0?e+1:e},h=n.doc.iterRange(e,t>0?n.doc.length:0),u=0;for(let f=0;!h.next().done&&f<=r;){let d=h.value;t<0&&(f+=d.length);let p=e+f*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=s))if(y%2==0==t>0)u++;else{if(u==1)return{start:c,end:{from:p+m,to:p+m+1},matched:y>>1==l>>1};u--}}t>0&&(f+=d.length)}return h.done?{start:c,matched:!1}:null}const d0=Object.create(null),bc=[et.none],Sc=[],xc=Object.create(null),p0=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])p0[n]=m0(d0,e);function _r(n,e){Sc.indexOf(n)>-1||(Sc.push(n),console.warn(e))}function m0(n,e){let t=[];for(let a of e.split(" ")){let l=[];for(let c of a.split(".")){let h=n[c]||O[c];h?typeof h=="function"?l.length?l=l.map(h):_r(c,`Modifier ${c} used at start of tag`):l.length?_r(c,`Tag ${c} used as modifier`):l=Array.isArray(h)?h:[h]:_r(c,`Unknown highlighting tag ${c}`)}for(let c of l)t.push(c)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),s=i+" "+t.map(a=>a.id),r=xc[s];if(r)return r.id;let o=xc[s]=et.define({id:bc.length,name:i,props:[Nu({[i]:t})]});return bc.push(o),o.id}fe.RTL,fe.LTR;const g0=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=Fa(n.state,t.from);return i.line?O0(n):i.block?A0(n):!1};function Ua(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let s=n(e,t);return s?(i(t.update(s)),!0):!1}}const O0=Ua(x0,0),y0=Ua(mf,0),A0=Ua((n,e)=>mf(n,e,S0(e)),0);function Fa(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const ln=50;function b0(n,{open:e,close:t},i,s){let r=n.sliceDoc(i-ln,i),o=n.sliceDoc(s,s+ln),a=/\s*$/.exec(r)[0].length,l=/^\s*/.exec(o)[0].length,c=r.length-a;if(r.slice(c-e.length,c)==e&&o.slice(l,l+t.length)==t)return{open:{pos:i-a,margin:a&&1},close:{pos:s+l,margin:l&&1}};let h,u;s-i<=2*ln?h=u=n.sliceDoc(i,s):(h=n.sliceDoc(i,i+ln),u=n.sliceDoc(s-ln,s));let f=/^\s*/.exec(h)[0].length,d=/\s*$/.exec(u)[0].length,p=u.length-d-t.length;return h.slice(f,f+e.length)==e&&u.slice(p,p+t.length)==t?{open:{pos:i+f+e.length,margin:/\s/.test(h.charAt(f+e.length))?1:0},close:{pos:s-d-t.length,margin:/\s/.test(u.charAt(p-1))?1:0}}:null}function S0(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),s=t.to<=i.to?i:n.doc.lineAt(t.to);s.from>i.from&&s.from==t.to&&(s=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let r=e.length-1;r>=0&&e[r].to>i.from?e[r].to=s.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:s.to})}return e}function mf(n,e,t=e.selection.ranges){let i=t.map(r=>Fa(e,r.from).block);if(!i.every(r=>r))return null;let s=t.map((r,o)=>b0(e,i[o],r.from,r.to));if(n!=2&&!s.every(r=>r))return{changes:e.changes(t.map((r,o)=>s[o]?[]:[{from:r.from,insert:i[o].open+" "},{from:r.to,insert:" "+i[o].close}]))};if(n!=1&&s.some(r=>r)){let r=[];for(let o=0,a;os&&(r==o||o>u.from)){s=u.from;let f=/^\s*/.exec(u.text)[0].length,d=f==u.length,p=u.text.slice(f,f+c.length)==c?f:-1;fr.comment<0&&(!r.empty||r.single))){let r=[];for(let{line:a,token:l,indent:c,empty:h,single:u}of i)(u||!h)&&r.push({from:a.from+c,insert:l+" "});let o=e.changes(r);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(r=>r.comment>=0)){let r=[];for(let{line:o,comment:a,token:l}of i)if(a>=0){let c=o.from+a,h=c+l.length;o.text[h-o.from]==" "&&h++,r.push({from:c,to:h})}return{changes:r}}return null}const ta=Wt.define(),ws=Wt.define(),v0=K.define(),gf=K.define({combine(n){return yt(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,s)=>e(i,s)||t(i,s)})}}),Da=Te.define({create(){return $t.empty},update(n,e){let t=e.state.facet(gf),i=e.annotation(ta);if(i){let l=_e.fromTransaction(e,i.selection),c=i.side,h=c==0?n.undone:n.done;return l?h=Vs(h,h.length,t.minDepth,l):h=Af(h,e.startState.selection),new $t(c==0?i.rest:h,c==0?h:i.rest)}let s=e.annotation(ws);if((s=="full"||s=="before")&&(n=n.isolate()),e.annotation(Pe.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let r=_e.fromTransaction(e),o=e.annotation(Pe.time),a=e.annotation(Pe.userEvent);return r?n=n.addChanges(r,o,a,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,a,t.newGroupDelay)),(s=="full"||s=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new $t(n.done.map(_e.fromJSON),n.undone.map(_e.fromJSON))}});function w0(n={}){return[Da,gf.of(n),$.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?La:e.inputType=="historyRedo"?zs:null;return i?(e.preventDefault(),i(t)):!1}})]}function Sr(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let s=t.field(Da,!1);if(!s)return!1;let r=s.pop(n,t,e);return r?(i(r),!0):!1}}const La=Sr(0,!1),zs=Sr(1,!1),k0=Sr(0,!0),Q0=Sr(1,!0);function Of(n){return function(e){let t=e.field(Da,!1);if(!t)return 0;let i=n==0?t.done:t.undone;return i.length-(i.length&&!i[0].changes?1:0)}}const vc=Of(0),wc=Of(1);class _e{constructor(e,t,i,s,r){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=s,this.selectionsAfter=r}setSelAfter(e){return new _e(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(s=>s.toJSON())}}static fromJSON(e){return new _e(e.changes&&Re.fromJSON(e.changes),[],e.mapped&&Zt.fromJSON(e.mapped),e.startSelection&&A.fromJSON(e.startSelection),e.selectionsAfter.map(A.fromJSON))}static fromTransaction(e,t){let i=ht;for(let s of e.startState.facet(v0)){let r=s(e);r.length&&(i=i.concat(r))}return!i.length&&e.changes.empty?null:new _e(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,ht)}static selection(e){return new _e(void 0,ht,void 0,void 0,e)}}function Vs(n,e,t,i){let s=e+1>t+20?e-t-1:0,r=n.slice(s,e);return r.push(i),r}function P0(n,e){let t=[],i=!1;return n.iterChangedRanges((s,r)=>t.push(s,r)),e.iterChangedRanges((s,r,o,a)=>{for(let l=0;l=c&&o<=h&&(i=!0)}}),i}function C0(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function yf(n,e){return n.length?e.length?n.concat(e):n:e}const ht=[],T0=200;function Af(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-T0));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Vs(n,n.length-1,1e9,t.setSelAfter(i)))}else return[_e.selection([e])]}function R0(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Jr(n,e){if(!n.length)return n;let t=n.length,i=ht;for(;t;){let s=$0(n[t-1],e,i);if(s.changes&&!s.changes.empty||s.effects.length){let r=n.slice(0,t);return r[t-1]=s,r}else e=s.mapped,t--,i=s.selectionsAfter}return i.length?[_e.selection(i)]:ht}function $0(n,e,t){let i=yf(n.selectionsAfter.length?n.selectionsAfter.map(a=>a.map(e)):ht,t);if(!n.changes)return _e.selection(i);let s=n.changes.map(e),r=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(r):r;return new _e(s,z.mapEffects(n.effects,e),o,n.startSelection.map(r),i)}const K0=/^(input\.type|delete)($|\.)/;class $t{constructor(e,t,i=0,s=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=s}isolate(){return this.prevTime?new $t(this.done,this.undone):this}addChanges(e,t,i,s,r){let o=this.done,a=o[o.length-1];return a&&a.changes&&!a.changes.empty&&e.changes&&(!i||K0.test(i))&&(!a.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):xr(t,e))}function Be(n){return n.textDirectionAt(n.state.selection.main.head)==fe.LTR}const Sf=n=>bf(n,!Be(n)),xf=n=>bf(n,Be(n));function vf(n,e){return bt(n,t=>t.empty?n.moveByGroup(t,e):xr(t,e))}const M0=n=>vf(n,!Be(n)),E0=n=>vf(n,Be(n));function U0(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function vr(n,e,t){let i=Ce(n).resolveInner(e.head),s=t?G.closedBy:G.openedBy;for(let l=e.head;;){let c=t?i.childAfter(l):i.childBefore(l);if(!c)break;U0(n,c,s)?i=c:l=t?c.to:c.from}let r=i.type.prop(s),o,a;return r&&(o=t?Rt(n,i.from,1):Rt(n,i.to,-1))&&o.matched?a=t?o.end.to:o.end.from:a=t?i.to:i.from,A.cursor(a,t?-1:1)}const F0=n=>bt(n,e=>vr(n.state,e,!Be(n))),D0=n=>bt(n,e=>vr(n.state,e,Be(n)));function wf(n,e){return bt(n,t=>{if(!t.empty)return xr(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const kf=n=>wf(n,!1),Qf=n=>wf(n,!0);function Pf(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):xr(o,e));if(s.eq(i.selection))return!1;let r;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),a=n.scrollDOM.getBoundingClientRect(),l=a.top+t.marginTop,c=a.bottom-t.marginBottom;o&&o.top>l&&o.bottomCf(n,!1),ia=n=>Cf(n,!0);function oi(n,e,t){let i=n.lineBlockAt(e.head),s=n.moveToLineBoundary(e,t);if(s.head==e.head&&s.head!=(t?i.to:i.from)&&(s=n.moveToLineBoundary(e,t,!1)),!t&&s.head==i.from&&i.length){let r=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;r&&e.head!=i.from+r&&(s=A.cursor(i.from+r))}return s}const L0=n=>bt(n,e=>oi(n,e,!0)),X0=n=>bt(n,e=>oi(n,e,!1)),B0=n=>bt(n,e=>oi(n,e,!Be(n))),I0=n=>bt(n,e=>oi(n,e,Be(n))),q0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).from,1)),W0=n=>bt(n,e=>A.cursor(n.lineBlockAt(e.head).to,-1));function z0(n,e,t){let i=!1,s=Ji(n.selection,r=>{let o=Rt(n,r.head,-1)||Rt(n,r.head,1)||r.head>0&&Rt(n,r.head-1,1)||r.headz0(n,e);function ft(n,e,t){let i=Ji(n.state.selection,s=>{s.undirectional&&s.head>=s.anchor!=e&&(s=A.range(s.head,s.anchor));let r=t(s);return A.range(s.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return i.eq(n.state.selection)?!1:(n.dispatch(At(n.state,i)),!0)}function Tf(n,e){return ft(n,e,t=>n.moveByChar(t,e))}const Rf=n=>Tf(n,!Be(n)),$f=n=>Tf(n,Be(n));function Kf(n,e){return ft(n,e,t=>n.moveByGroup(t,e))}const j0=n=>Kf(n,!Be(n)),Y0=n=>Kf(n,Be(n)),N0=n=>{let e=!Be(n);return ft(n,e,t=>vr(n.state,t,e))},H0=n=>{let e=Be(n);return ft(n,e,t=>vr(n.state,t,e))};function Zf(n,e){return ft(n,e,t=>n.moveVertically(t,e))}const Mf=n=>Zf(n,!1),Ef=n=>Zf(n,!0);function Uf(n,e){return ft(n,e,t=>n.moveVertically(t,e,Pf(n).height))}const Qc=n=>Uf(n,!1),Pc=n=>Uf(n,!0),G0=n=>ft(n,!0,e=>oi(n,e,!0)),_0=n=>ft(n,!1,e=>oi(n,e,!1)),J0=n=>{let e=!Be(n);return ft(n,e,t=>oi(n,t,e))},ey=n=>{let e=Be(n);return ft(n,e,t=>oi(n,t,e))},ty=n=>ft(n,!1,e=>A.cursor(n.lineBlockAt(e.head).from)),iy=n=>ft(n,!0,e=>A.cursor(n.lineBlockAt(e.head).to)),Cc=({state:n,dispatch:e})=>(e(At(n,{anchor:0})),!0),Tc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.doc.length})),!0),Rc=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:0})),!0),$c=({state:n,dispatch:e})=>(e(At(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),ny=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),sy=({state:n,dispatch:e})=>{let t=wr(n).map(({from:i,to:s})=>A.range(i,Math.min(s+1,n.doc.length)));return e(n.update({selection:A.create(t),userEvent:"select"})),!0},ry=({state:n,dispatch:e})=>{let t=Ji(n.selection,i=>{let s=Ce(n),r=s.resolveStack(i.from,1);if(i.empty){let o=s.resolveStack(i.from,-1);o.node.from>=r.node.from&&o.node.to<=r.node.to&&(r=o)}for(let o=r;o;o=o.next){let{node:a}=o;if((a.from=i.to||a.to>i.to&&a.from<=i.from)&&o.next)return A.range(a.to,a.from)}return i});return t.eq(n.selection)?!1:(e(At(n,t)),!0)};function Ff(n,e){let{state:t}=n,i=t.selection,s=t.selection.ranges.slice();for(let r of t.selection.ranges){let o=t.doc.lineAt(r.head);if(e?o.to0)for(let a=r;;){let l=n.moveVertically(a,e);if(l.heado.to){s.some(c=>c.head==l.head)||s.push(l);break}else{if(l.head==a.head)break;a=l}}}return s.length==i.ranges.length?!1:(n.dispatch(At(t,A.create(s,s.length-1))),!0)}const oy=n=>Ff(n,!1),ay=n=>Ff(n,!0),ly=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=A.create([t.main]):t.main.empty||(i=A.create([A.cursor(t.main.head)])),i?(e(At(n,i)),!0):!1};function Bn(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,s=i.changeByRange(r=>{let{from:o,to:a}=r;if(o==a){let l=e(r);lo&&(t="delete.forward",l=hs(n,l,!0)),o=Math.min(o,l),a=Math.max(a,l)}else o=hs(n,o,!1),a=hs(n,a,!0);return o==a?{range:r}:{changes:{from:o,to:a},range:A.cursor(o,os(n)))i.between(e,e,(s,r)=>{se&&(e=t?r:s)});return e}const Df=(n,e,t)=>Bn(n,i=>{let s=i.from,{state:r}=n,o=r.doc.lineAt(s),a,l;if(t&&!e&&s>o.from&&sDf(n,!1,!0),Lf=n=>Df(n,!0,!1),Xf=(n,e)=>Bn(n,t=>{let i=t.head,{state:s}=n,r=s.doc.lineAt(i),o=s.charCategorizer(i);for(let a=null;;){if(i==(e?r.to:r.from)){i==t.head&&r.number!=(e?s.doc.lines:1)&&(i+=e?1:-1);break}let l=Ze(r.text,i-r.from,e)+r.from,c=r.text.slice(Math.min(i,l)-r.from,Math.max(i,l)-r.from),h=o(c);if(a!=null&&h!=a)break;(c!=" "||i!=t.head)&&(a=h),i=l}return i}),Bf=n=>Xf(n,!1),cy=n=>Xf(n,!0),hy=n=>Bn(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headBn(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),fy=n=>Bn(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:se.of(["",""])},range:A.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},py=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let s=i.from,r=n.doc.lineAt(s),o=s==r.from?s-1:Ze(r.text,s-r.from,!1)+r.from,a=s==r.to?s+1:Ze(r.text,s-r.from,!0)+r.from;return{changes:{from:o,to:a,insert:n.doc.slice(s,a).append(n.doc.slice(o,s))},range:A.cursor(a)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function wr(n){let e=[],t=-1;for(let i of n.selection.ranges){let s=n.doc.lineAt(i.from),r=n.doc.lineAt(i.to);if(!i.empty&&i.to==r.from&&(r=n.doc.lineAt(i.to-1)),t>=s.number){let o=e[e.length-1];o.to=r.to,o.ranges.push(i)}else e.push({from:s.from,to:r.to,ranges:[i]});t=r.number+1}return e}function If(n,e,t){if(n.readOnly)return!1;let i=[],s=[];for(let r of wr(n)){if(t?r.to==n.doc.length:r.from==0)continue;let o=n.doc.lineAt(t?r.to+1:r.from-1),a=o.length+1;if(t){i.push({from:r.to,to:o.to},{from:r.from,insert:o.text+n.lineBreak});for(let l of r.ranges)s.push(A.range(Math.min(n.doc.length,l.anchor+a),Math.min(n.doc.length,l.head+a)))}else{i.push({from:o.from,to:r.from},{from:r.to,insert:n.lineBreak+o.text});for(let l of r.ranges)s.push(A.range(l.anchor-a,l.head-a))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:A.create(s,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const my=({state:n,dispatch:e})=>If(n,e,!1),gy=({state:n,dispatch:e})=>If(n,e,!0);function qf(n,e,t){if(n.readOnly)return!1;let i=[];for(let r of wr(n))t?i.push({from:r.from,insert:n.doc.slice(r.from,r.to)+n.lineBreak}):i.push({from:r.to,insert:n.lineBreak+n.doc.slice(r.from,r.to)});let s=n.changes(i);return e(n.update({changes:s,selection:n.selection.map(s,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const Oy=({state:n,dispatch:e})=>qf(n,e,!1),yy=({state:n,dispatch:e})=>qf(n,e,!0),Ay=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(wr(e).map(({from:s,to:r})=>(s>0?s--:r{let r;if(n.lineWrapping){let o=n.lineBlockAt(s.head),a=n.coordsAtPos(s.head,s.assoc||1);a&&(r=o.bottom+n.documentTop-a.bottom+n.defaultLineHeight/2)}return n.moveVertically(s,!0,r)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function by(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Ce(n).resolveInner(e),i=t.childBefore(e),s=t.childAfter(e),r;return i&&s&&i.to<=e&&s.from>=e&&(r=i.type.prop(G.closedBy))&&r.indexOf(s.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(s.from).from&&!/\S/.test(n.sliceDoc(i.to,s.from))?{from:i.to,to:s.from}:null}const Kc=Wf(!1),Sy=Wf(!0);function Wf(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(s=>{let{from:r,to:o}=s,a=e.doc.lineAt(r),l=!n&&r==o&&by(e,r);n&&(r=o=(o<=a.to?a:e.doc.lineAt(o)).to);let c=new Ar(e,{simulateBreak:r,simulateDoubleBreak:!!l}),h=Ma(c,r);for(h==null&&(h=_i(/^\s*/.exec(e.doc.lineAt(r).text)[0],e.tabSize));oa.from&&r{let s=[];for(let o=i.from;o<=i.to;){let a=n.doc.lineAt(o);a.number>t&&(i.empty||i.to>a.from)&&(e(a,s,i),t=a.number),o=a.to+1}let r=n.changes(s);return{changes:s,range:A.range(r.mapPos(i.anchor,1),r.mapPos(i.head,1))}})}const xy=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Ar(n,{overrideIndentation:r=>{let o=t[r];return o??-1}}),s=Xa(n,(r,o,a)=>{let l=Ma(i,r.from);if(l==null)return;/\S/.test(r.text)||(l=0);let c=/^\s*/.exec(r.text)[0],h=Tn(n,l);(c!=h||a.fromn.readOnly?!1:(e(n.update(Xa(n,(t,i)=>{i.push({from:t.from,insert:n.facet(yr)})}),{userEvent:"input.indent"})),!0),Vf=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(Xa(n,(t,i)=>{let s=/^\s*/.exec(t.text)[0];if(!s)return;let r=_i(s,n.tabSize),o=0,a=Tn(n,Math.max(0,r-Is(n)));for(;o(n.setTabFocusMode(),!0),wy=[{key:"Ctrl-b",run:Sf,shift:Rf,preventDefault:!0},{key:"Ctrl-f",run:xf,shift:$f},{key:"Ctrl-p",run:kf,shift:Mf},{key:"Ctrl-n",run:Qf,shift:Ef},{key:"Ctrl-a",run:q0,shift:ty},{key:"Ctrl-e",run:W0,shift:iy},{key:"Ctrl-d",run:Lf},{key:"Ctrl-h",run:na},{key:"Ctrl-k",run:hy},{key:"Ctrl-Alt-h",run:Bf},{key:"Ctrl-o",run:dy},{key:"Ctrl-t",run:py},{key:"Ctrl-v",run:ia}],ky=[{key:"ArrowLeft",run:Sf,shift:Rf,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:M0,shift:j0,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:B0,shift:J0,preventDefault:!0},{key:"ArrowRight",run:xf,shift:$f,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:E0,shift:Y0,preventDefault:!0},{mac:"Cmd-ArrowRight",run:I0,shift:ey,preventDefault:!0},{key:"ArrowUp",run:kf,shift:Mf,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Cc,shift:Rc},{mac:"Ctrl-ArrowUp",run:kc,shift:Qc},{key:"ArrowDown",run:Qf,shift:Ef,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Tc,shift:$c},{mac:"Ctrl-ArrowDown",run:ia,shift:Pc},{key:"PageUp",run:kc,shift:Qc},{key:"PageDown",run:ia,shift:Pc},{key:"Home",run:X0,shift:_0,preventDefault:!0},{key:"Mod-Home",run:Cc,shift:Rc},{key:"End",run:L0,shift:G0,preventDefault:!0},{key:"Mod-End",run:Tc,shift:$c},{key:"Enter",run:Kc,shift:Kc},{key:"Mod-a",run:ny},{key:"Backspace",run:na,shift:na,preventDefault:!0},{key:"Delete",run:Lf,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Bf,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:cy,preventDefault:!0},{mac:"Mod-Backspace",run:uy,preventDefault:!0},{mac:"Mod-Delete",run:fy,preventDefault:!0}].concat(wy.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Qy=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:F0,shift:N0},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:D0,shift:H0},{key:"Alt-ArrowUp",run:my},{key:"Shift-Alt-ArrowUp",run:Oy},{key:"Alt-ArrowDown",run:gy},{key:"Shift-Alt-ArrowDown",run:yy},{key:"Mod-Alt-ArrowUp",run:oy},{key:"Mod-Alt-ArrowDown",run:ay},{key:"Escape",run:ly},{key:"Mod-Enter",run:Sy},{key:"Alt-l",mac:"Ctrl-l",run:sy},{key:"Mod-i",run:ry,preventDefault:!0},{key:"Mod-[",run:Vf},{key:"Mod-]",run:zf},{key:"Mod-Alt-\\",run:xy},{key:"Shift-Mod-k",run:Ay},{key:"Shift-Mod-\\",run:V0},{key:"Mod-/",run:g0},{key:"Alt-A",run:y0},{key:"Ctrl-m",mac:"Shift-Alt-m",run:vy}].concat(ky),Py={key:"Tab",run:zf,shift:Vf};class jf{constructor(e,t,i,s){this.state=e,this.pos=t,this.explicit=i,this.view=s,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Ce(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),s=t.text.slice(i-t.from,this.pos-t.from),r=s.search(Nf(e,!1));return r<0?null:{from:i+r,to:this.pos,text:s.slice(r)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function Zc(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function Cy(n){let e=Object.create(null),t=Object.create(null);for(let{label:s}of n){e[s[0]]=!0;for(let r=1;rtypeof s=="string"?{label:s}:s),[t,i]=e.every(s=>/^\w+$/.test(s.label))?[/\w*$/,/\w+$/]:Cy(e);return s=>{let r=s.matchBefore(i);return r||s.explicit?{from:r?r.from:s.pos,options:e,validFor:t}:null}}function Ty(n,e){return t=>{for(let i=Ce(t.state).resolveInner(t.pos,-1);i;i=i.parent){if(n.indexOf(i.name)>-1)return null;if(i.type.isTop)break}return e(t)}}let Mc=class{constructor(e,t,i,s){this.completion=e,this.source=t,this.match=i,this.score=s}};function yi(n){return n.selection.main.from}function Nf(n,e){var t;let{source:i}=n,s=e&&i[0]!="^",r=i[i.length-1]!="$";return!s&&!r?n:new RegExp(`${s?"^":""}(?:${i})${r?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const Ba=Wt.define();function Ry(n,e,t,i){let{main:s}=n.selection,r=t-s.from,o=i-s.from;return{...n.changeByRange(a=>{if(a!=s&&t!=i&&n.sliceDoc(a.from+r,a.from+o)!=n.sliceDoc(t,i))return{range:a};let l=n.toText(e);return{changes:{from:a.from+r,to:i==s.from?a.to:a.from+o,insert:l},range:A.cursor(a.from+r+l.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ec=new WeakMap;function $y(n){if(!Array.isArray(n))return n;let e=Ec.get(n);return e||Ec.set(n,e=Yf(n)),e}const js=z.define(),Rn=z.define();class Ky{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&k<=57||k>=97&&k<=122?2:k>=65&&k<=90?1:0:(S=fa(k))!=S.toLowerCase()?1:S!=S.toUpperCase()?2:0;(!b||w==1&&g||C==0&&w!=0)&&(t[u]==k||i[u]==k&&(f=!0)?o[u++]=b:o.length&&(y=!1)),C=w,b+=Qt(k)}return u==l&&o[0]==0&&y?this.result(-100+(f?-200:0),o,e):d==l&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):a>-1?this.ret(-700-e.length,[a,a+this.pattern.length]):d==l?this.ret(-900-e.length,[p,m]):u==l?this.result(-100+(f?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((s[0]?-700:0)+-200+-1100,s,e)}result(e,t,i){let s=[],r=0;for(let o of t){let a=o+(this.astral?Qt(Ne(i,o)):1);r&&s[r-1]==o?s[r-1]=a:(s[r++]=o,s[r++]=a)}return this.ret(e-i.length,s)}}class Zy{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:My,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Uc(e(i),t(i)),optionClass:(e,t)=>i=>Uc(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Uc(n,e){return n?e?n+" "+e:n:e}function My(n,e,t,i,s,r){let o=n.textDirection==fe.RTL,a=o,l=!1,c="top",h,u,f=e.left-s.left,d=s.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(a&&f=m||b>e.top?h=t.bottom-e.top:(c="bottom",h=e.bottom-t.top)}let g=(e.bottom-e.top)/r.offsetHeight,y=(e.right-e.left)/r.offsetWidth;return{style:`${c}: ${h/g}px; max-width: ${u/y}px`,class:"cm-completionInfo-"+(l?o?"left-narrow":"right-narrow":a?"left":"right")}}const Ia=z.define();function Ey(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(s=>"cm-completionIcon-"+s)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,s,r){let o=document.createElement("span");o.className="cm-completionLabel";let a=t.displayLabel||t.label,l=0;for(let c=0;cl&&o.appendChild(document.createTextNode(a.slice(l,h)));let f=o.appendChild(document.createElement("span"));f.appendChild(document.createTextNode(a.slice(h,u))),f.className="cm-completionMatchedText",l=u}return lt.position-i.position).map(t=>t.render)}function eo(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let s=Math.floor(e/t);return{from:s*t,to:(s+1)*t}}let i=Math.ceil((n-e)/t);return{from:n-i*t,to:n-(i-1)*t}}class Uy{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:l=>this.placeInfo(l),key:this},this.space=null,this.currentClass="";let s=e.state.field(t),{options:r,selected:o}=s.open,a=e.state.facet(Ke);this.optionContent=Ey(a),this.optionClass=a.optionClass,this.tooltipClass=a.tooltipClass,this.range=eo(r.length,o,a.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",l=>{let{options:c}=e.state.field(t).open;for(let h=l.target,u;h&&h!=this.dom;h=h.parentNode)if(h.nodeName=="LI"&&(u=/-(\d+)$/.exec(h.id))&&+u[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;h!=null&&(e.dispatch({effects:Ia.of(h)}),l.preventDefault())}}),this.dom.addEventListener("focusout",l=>{let c=e.state.field(this.stateField,!1);c&&c.tooltip&&e.state.facet(Ke).closeOnBlur&&l.relatedTarget!=e.contentDOM&&e.dispatch({effects:Rn.of(null)})}),this.showOptions(r,s.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),s=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=s){let{options:r,selected:o,disabled:a}=i.open;(!s.open||s.open.options!=r)&&(this.range=eo(r.length,o,e.state.facet(Ke).maxRenderedOptions),this.showOptions(r,i.id)),this.updateSel(),a!=((t=s.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!a)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=eo(t.options.length,t.selected,this.view.state.facet(Ke).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:s}=t.options[t.selected],{info:r}=s;if(!r)return;let o=typeof r=="string"?document.createTextNode(r):r(s);if(!o)return;"then"in o?o.then(a=>{a&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(a,s)}).catch(a=>ze(this.view.state,a,"completion info")):(this.addInfoPane(o,s),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:s,destroy:r}=e;i.appendChild(s),this.infoDestroy=r||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,s=this.range.from;i;i=i.nextSibling,s++)i.nodeName!="LI"||!i.id?s--:s==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&Dy(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),s=e.getBoundingClientRect(),r=this.space;if(!r){let o=this.dom.ownerDocument.documentElement;r={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return s.top>Math.min(r.bottom,t.bottom)-10||s.bottom{o.target==s&&o.preventDefault()});let r=null;for(let o=i.from;oi.from||i.from==0))if(r=f,typeof c!="string"&&c.header)s.appendChild(c.header(c));else{let d=s.appendChild(document.createElement("completion-section"));d.textContent=f}}const h=s.appendChild(document.createElement("li"));h.id=t+"-"+o,h.setAttribute("role","option");let u=this.optionClass(a);u&&(h.className=u);for(let f of this.optionContent){let d=f(a,this.view.state,this.view,l);d&&h.appendChild(d)}}return i.from&&s.classList.add("cm-completionListIncompleteTop"),i.tonew Uy(t,n,e)}function Dy(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),s=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/s)}function Fc(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function Ly(n,e){let t=[],i=null,s=null,r=h=>{t.push(h);let{section:u}=h.completion;if(u){i||(i=[]);let f=typeof u=="string"?u:u.name;i.some(d=>d.name==f)||i.push(typeof u=="string"?{name:f}:u)}},o=e.facet(Ke);for(let h of n)if(h.hasResult()){let u=h.result.getMatch;if(h.result.filter===!1)for(let f of h.result.options)r(new Mc(f,h.source,u?u(f):[],1e9-t.length));else{let f=e.sliceDoc(h.from,h.to),d,p=o.filterStrict?new Zy(f):new Ky(f);for(let m of h.result.options)if(d=p.match(m.label)){let g=m.displayLabel?u?u(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(r(new Mc(m,h.source,g,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:b}=m.section;s||(s=Object.create(null)),s[b]=Math.max(y,s[b]||-1e9)}}}}if(i){let h=Object.create(null),u=0,f=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?s[p.name]-s[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.namef.score-u.score||c(u.completion,f.completion))){let u=h.completion;!l||l.label!=u.label||l.detail!=u.detail||l.type!=null&&u.type!=null&&l.type!=u.type||l.apply!=u.apply||l.boost!=u.boost?a.push(h):Fc(h.completion)>Fc(l)&&(a[a.length-1]=h),l=h.completion}return a}class Ki{constructor(e,t,i,s,r,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=s,this.selected=r,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Ki(this.options,Dc(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,s,r,o){if(s&&!o&&e.some(c=>c.isPending))return s.setDisabled();let a=Ly(e,t);if(!a.length)return s&&e.some(c=>c.isPending)?s.setDisabled():null;let l=t.facet(Ke).selectOnOpen?0:-1;if(s&&s.selected!=l&&s.selected!=-1){let c=s.options[s.selected].completion;for(let h=0;hh.hasResult()?Math.min(c,h.from):c,1e8),create:zy,above:r.aboveCursor},s?s.timestamp:Date.now(),l,!1)}map(e){return new Ki(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Ki(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Ys{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Ys(qy,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(Ke),r=(i.override||t.languageDataAt("autocomplete",yi(t)).map($y)).map(l=>(this.active.find(h=>h.source==l)||new ut(l,this.active.some(h=>h.state!=0)?1:0)).update(e,i));r.length==this.active.length&&r.every((l,c)=>l==this.active[c])&&(r=this.active);let o=this.open,a=e.effects.some(l=>l.is(qa));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||r.some(l=>l.hasResult()&&e.changes.touchesRange(l.from,l.to))||!Xy(r,this.active)||a?o=Ki.build(r,t,this.id,o,i,a):o&&o.disabled&&!r.some(l=>l.isPending)&&(o=null),!o&&r.every(l=>!l.isPending)&&r.some(l=>l.hasResult())&&(r=r.map(l=>l.hasResult()?new ut(l.source,0):l));for(let l of e.effects)l.is(Ia)&&(o=o&&o.setSelected(l.value,this.id));return r==this.active&&o==this.open?this:new Ys(r,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?By:Iy}}function Xy(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const qy=[];function Hf(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(Ba);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class ut{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Hf(e,t),s=this;(i&8||i&16&&this.touches(e))&&(s=new ut(s.source,0)),i&4&&s.state==0&&(s=new ut(this.source,1)),s=s.updateFor(e,i);for(let r of e.effects)if(r.is(js))s=new ut(s.source,1,r.value);else if(r.is(Rn))s=new ut(s.source,0);else if(r.is(qa))for(let o of r.value)o.source==s.source&&(s=o);return s}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(yi(e.state))}}class Fi extends ut{constructor(e,t,i,s,r,o){super(e,3,t),this.limit=i,this.result=s,this.from=r,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let s=this.result;s.map&&!e.changes.empty&&(s=s.map(s,e.changes));let r=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),a=yi(e.state);if(a>o||!s||t&2&&(yi(e.startState)==this.from||at.map(e))}}),He=Te.define({create(){return Ys.start()},update(n,e){return n.update(e)},provide:n=>[gr.from(n,e=>e.tooltip),$.contentAttributes.from(n,e=>e.attrs)]});function Wa(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(He).active.find(s=>s.source==e.source);return i instanceof Fi?(typeof t=="string"?n.dispatch({...Ry(n.state,t,i.from,i.to),annotations:Ba.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const zy=Fy(He,Wa);function us(n,e="option"){return t=>{let i=t.state.field(He,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+s*(n?1:-1):n?0:o-1;return a<0?a=e=="page"?0:o-1:a>=o&&(a=e=="page"?o-1:0),t.dispatch({effects:Ia.of(a)}),!0}}const Vy=n=>{let e=n.state.field(He,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(He,!1)?(n.dispatch({effects:js.of(!0)}),!0):!1,jy=n=>{let e=n.state.field(He,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Rn.of(null)}),!0)};class Yy{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ny=50,Hy=1e3,Gy=xe.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(He).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(He),t=n.state.facet(Ke);if(!n.selectionSet&&!n.docChanged&&n.startState.field(He)==e)return;let i=n.transactions.some(r=>{let o=Hf(r,t);return o&8||(r.selection||r.docChanged)&&!(o&3)});for(let r=0;rNy&&Date.now()-o.time>Hy){for(let a of o.context.abortListeners)try{a()}catch(l){ze(this.view.state,l)}o.context.abortListeners=null,this.running.splice(r--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(r=>r.effects.some(o=>o.is(js)))&&(this.pendingStart=!0);let s=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(r=>r.isPending&&!this.running.some(o=>o.active.source==r.source))?setTimeout(()=>this.startUpdate(),s):-1,this.composing!=0)for(let r of n.transactions)r.isUserEvent("input.type")?this.composing=2:this.composing==2&&r.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(He);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=yi(e),i=new jf(e,t,n.explicit,this.view),s=new Yy(n,i);this.running.push(s),Promise.resolve(n.source(i)).then(r=>{s.context.aborted||(s.done=r||null,this.scheduleAccept())},r=>{this.view.dispatch({effects:Rn.of(null)}),ze(this.view.state,r)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(Ke).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(Ke),i=this.view.state.field(He);for(let s=0;sa.source==r.active.source);if(o&&o.isPending)if(r.done==null){let a=new ut(r.active.source,0);for(let l of r.updates)a=a.update(l,t);a.isPending||e.push(a)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:qa.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(He,!1);if(e&&e.tooltip&&this.view.state.facet(Ke).closeOnBlur){let t=e.open&&Uu(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Rn.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:js.of(!1)}),20),this.composing=0}}}),_y=typeof navigator=="object"&&/Win/.test(navigator.platform),Jy=ri.highest($.domEventHandlers({keydown(n,e){let t=e.state.field(He,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(_y&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],s=t.active.find(o=>o.source==i.source),r=i.completion.commitCharacters||s.result.commitCharacters;return r&&r.indexOf(n.key)>-1&&Wa(e,i),!1}})),Gf=$.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center",cursor:"pointer"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class eA{constructor(e,t,i,s){this.field=e,this.line=t,this.from=i,this.to=s}}class za{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,De.TrackDel),i=e.mapPos(this.to,1,De.TrackDel);return t==null||i==null?null:new za(this.field,t,i)}}class Va{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],s=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0];for(let l of this.lines){if(i.length){let c=o,h=/^\t*/.exec(l)[0].length;for(let u=0;unew za(l.field,s[l.line]+l.from,s[l.line]+l.to));return{text:i,ranges:a}}static parse(e){let t=[],i=[],s=[],r;for(let o of e.split(/\r\n?|\n/)){for(;r=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let a=r[1]?+r[1]:null,l=r[2]||r[3]||"",c=-1;a===0&&(a=1e9);let h=l.replace(/\\[{}]/g,u=>u[1]);for(let u=0;u=c&&f.field++}for(let u of s)if(u.line==i.length&&u.from>r.index){let f=r[2]?3+(r[1]||"").length:2;u.from-=f,u.to-=f}s.push(new eA(c,i.length,r.index,r.index+h.length)),o=o.slice(0,r.index)+l+o.slice(r.index+r[0].length)}o=o.replace(/\\([{}])/g,(a,l,c)=>{for(let h of s)h.line==i.length&&h.from>c&&(h.from--,h.to--);return l}),i.push(o)}return new Va(i,s)}}let tA=B.widget({widget:new class extends Ut{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),iA=B.mark({class:"cm-snippetField"});class en{constructor(e,t){this.ranges=e,this.active=t,this.deco=B.set(e.map(i=>(i.from==i.to?tA:iA).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let s=i.map(e);if(!s)return null;t.push(s)}return new en(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const In=z.define({map(n,e){return n&&n.map(e)}}),nA=z.define(),$n=Te.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(In))return t.value;if(t.is(nA)&&n)return new en(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>$.decorations.from(n,e=>e?e.deco:B.none)});function ja(n,e){return A.create(n.filter(t=>t.field==e).map(t=>A.range(t.from,t.to)))}function sA(n){let e=Va.parse(n);return(t,i,s,r)=>{let{text:o,ranges:a}=e.instantiate(t.state,s),{main:l}=t.state.selection,c={changes:{from:s,to:r==l.from?l.to:r,insert:se.of(o)},scrollIntoView:!0,annotations:i?[Ba.of(i),Pe.userEvent.of("input.complete")]:void 0};if(a.length&&(c.selection=ja(a,0)),a.some(h=>h.field>0)){let h=new en(a,0),u=c.effects=[In.of(h)];t.state.field($n,!1)===void 0&&u.push(z.appendConfig.of([$n,cA,hA,Gf]))}t.dispatch(t.state.update(c))}}function _f(n){return({state:e,dispatch:t})=>{let i=e.field($n,!1);if(!i||n<0&&i.active==0)return!1;let s=i.active+n,r=n>0&&!i.ranges.some(o=>o.field==s+n);return t(e.update({selection:ja(i.ranges,s),effects:In.of(r?null:new en(i.ranges,s)),scrollIntoView:!0})),!0}}const rA=({state:n,dispatch:e})=>n.field($n,!1)?(e(n.update({effects:In.of(null)})),!0):!1,oA=_f(1),aA=_f(-1),lA=[{key:"Tab",run:oA,shift:aA},{key:"Escape",run:rA}],Lc=K.define({combine(n){return n.length?n[0]:lA}}),cA=ri.highest(mr.compute([Lc],n=>n.facet(Lc)));function Ye(n,e){return{...e,apply:sA(n)}}const hA=$.domEventHandlers({mousedown(n,e){let t=e.state.field($n,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let s=t.ranges.find(r=>r.from<=i&&r.to>=i);return!s||s.field==t.active?!1:(e.dispatch({selection:ja(t.ranges,s.field),effects:In.of(t.ranges.some(r=>r.field>s.field)?new en(t.ranges,s.field):null),scrollIntoView:!0}),!0)}}),Kn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},mi=z.define({map(n,e){let t=e.mapPos(n,-1,De.TrackAfter);return t??void 0}}),Ya=new class extends Jt{};Ya.startSide=1;Ya.endSide=-1;const Jf=Te.define({create(){return N.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(mi)&&(n=n.update({add:[Ya.range(t.value,t.value+1)]}));return n}});function uA(){return[dA,Jf]}const io="()[]{}<>«»»«[]{}";function ed(n){for(let e=0;e{if((fA?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let s=n.state.selection.main;if(i.length>2||i.length==2&&Qt(Ne(i,0))==1||e!=s.from||t!=s.to)return!1;let r=gA(n.state,i);return r?(n.dispatch(r),!0):!1}),pA=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let i=td(n,n.selection.main.head).brackets||Kn.brackets,s=null,r=n.changeByRange(o=>{if(o.empty){let a=OA(n.doc,o.head);for(let l of i)if(l==a&&kr(n.doc,o.head)==ed(Ne(l,0)))return{changes:{from:o.head-l.length,to:o.head+l.length},range:A.cursor(o.head-l.length)}}return{range:s=o}});return s||e(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s},mA=[{key:"Backspace",run:pA}];function gA(n,e){let t=td(n,n.selection.main.head),i=t.brackets||Kn.brackets;for(let s of i){let r=ed(Ne(s,0));if(e==s)return r==s?bA(n,s,i.indexOf(s+s+s)>-1,t):yA(n,s,r,t.before||Kn.before);if(e==r&&id(n,n.selection.main.from))return AA(n,s,r)}return null}function id(n,e){let t=!1;return n.field(Jf).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function kr(n,e){let t=n.sliceString(e,e+2);return t.slice(0,Qt(Ne(t,0)))}function OA(n,e){let t=n.sliceString(e-2,e);return Qt(Ne(t,0))==t.length?t:t.slice(1)}function yA(n,e,t,i){let s=null,r=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:mi.of(o.to+e.length),range:A.range(o.anchor+e.length,o.head+e.length)};let a=kr(n.doc,o.head);return!a||/\s/.test(a)||i.indexOf(a)>-1?{changes:{insert:e+t,from:o.head},effects:mi.of(o.head+e.length),range:A.cursor(o.head+e.length)}:{range:s=o}});return s?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function AA(n,e,t){let i=null,s=n.changeByRange(r=>r.empty&&kr(n.doc,r.head)==t?{changes:{from:r.head,to:r.head+t.length,insert:t},range:A.cursor(r.head+t.length)}:i={range:r});return i?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function bA(n,e,t,i){let s=i.stringPrefixes||Kn.stringPrefixes,r=null,o=n.changeByRange(a=>{if(!a.empty)return{changes:[{insert:e,from:a.from},{insert:e,from:a.to}],effects:mi.of(a.to+e.length),range:A.range(a.anchor+e.length,a.head+e.length)};let l=a.head,c=kr(n.doc,l),h;if(c==e){if(Xc(n,l))return{changes:{insert:e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)};if(id(n,l)){let f=t&&n.sliceDoc(l,l+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:l,to:l+f.length,insert:f},range:A.cursor(l+f.length)}}}else{if(t&&n.sliceDoc(l-2*e.length,l)==e+e&&(h=Bc(n,l-2*e.length,s))>-1&&Xc(n,h))return{changes:{insert:e+e+e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)};if(n.charCategorizer(l)(c)!=ye.Word&&Bc(n,l,s)>-1&&!SA(n,l,e,s))return{changes:{insert:e+e,from:l},effects:mi.of(l+e.length),range:A.cursor(l+e.length)}}return{range:r=a}});return r?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Xc(n,e){let t=Ce(n).resolveInner(e+1);return t.parent&&t.from==e}function SA(n,e,t,i){let s=Ce(n).resolveInner(e,-1),r=i.reduce((o,a)=>Math.max(o,a.length),0);for(let o=0;o<5;o++){let a=n.sliceDoc(s.from,Math.min(s.to,s.from+t.length+r)),l=a.indexOf(t);if(!l||l>-1&&i.indexOf(a.slice(0,l))>-1){let h=s.firstChild;for(;h&&h.from==s.from&&h.to-h.from>t.length+l;){if(n.sliceDoc(h.to-t.length,h.to)==t)return!1;h=h.firstChild}return!0}let c=s.to==e&&s.parent;if(!c)break;s=c}return!1}function Bc(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=ye.Word)return e;for(let s of t){let r=e-s.length;if(n.sliceDoc(r,e)==s&&i(n.sliceDoc(r-1,r))!=ye.Word)return r}return-1}function xA(n={}){return[Jy,He,Ke.of(n),Gy,vA,Gf]}const nd=[{key:"Ctrl-Space",run:to},{mac:"Alt-`",run:to},{mac:"Alt-i",run:to},{key:"Escape",run:jy},{key:"ArrowDown",run:us(!0)},{key:"ArrowUp",run:us(!1)},{key:"PageDown",run:us(!0,"page")},{key:"PageUp",run:us(!1,"page")},{key:"Enter",run:Vy}],vA=ri.highest(mr.computeN([Ke],n=>n.facet(Ke).defaultKeymap?[nd]:[]));var Ic={};class Ns{constructor(e,t,i,s,r,o,a,l,c,h=0,u){this.p=e,this.stack=t,this.state=i,this.reducePos=s,this.pos=r,this.score=o,this.buffer=a,this.bufferBase=l,this.curContext=c,this.lookAhead=h,this.parent=u}toString(){return`[${this.stack.filter((e,t)=>t%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,t,i=0){let s=e.parser.context;return new Ns(e,[],t,i,i,0,[],0,s?new qc(s,s.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e}reduce(e){var t;let i=e>>19,s=e&65535,{parser:r}=this.p,o=this.reducePos=2e3&&!(!((t=this.p.parser.nodeSet.types[s])===null||t===void 0)&&t.isAnonymous)&&(c==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=h):this.p.lastBigReductionSizel;)this.stack.pop();this.reduceContext(s,c)}storeNode(e,t,i,s=4,r=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&this.buffer[o-4]==0&&this.buffer[o-1]>-1){if(t==i)return;if(this.buffer[o-2]>=t){this.buffer[o-2]=i;return}}}if(!r||this.pos==i)this.buffer.push(e,t,i,s);else{let o=this.buffer.length;if(o>0&&(this.buffer[o-4]!=0||this.buffer[o-1]<0)){let a=!1;for(let l=o;l>0&&this.buffer[l-2]>i;l-=4)if(this.buffer[l-1]>=0){a=!0;break}if(a)for(;o>0&&this.buffer[o-2]>i;)this.buffer[o]=this.buffer[o-4],this.buffer[o+1]=this.buffer[o-3],this.buffer[o+2]=this.buffer[o-2],this.buffer[o+3]=this.buffer[o-1],o-=4,s>4&&(s-=4)}this.buffer[o]=e,this.buffer[o+1]=t,this.buffer[o+2]=i,this.buffer[o+3]=s}}shift(e,t,i,s){if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let r=e,{parser:o}=this.p;this.pos=s;let a=o.stateFlag(r,1);!a&&(s>i||t<=o.maxNode)&&(this.reducePos=s),this.pushState(r,a?i:Math.min(i,this.reducePos)),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,s,4)}else this.pos=s,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,s,4)}apply(e,t,i,s){e&65536?this.reduce(e):this.shift(e,t,i,s)}useNode(e,t){let i=this.p.reused.length-1;(i<0||this.p.reused[i]!=e)&&(this.p.reused.push(e),i++);let s=this.pos;this.reducePos=this.pos=s+e.length,this.pushState(t,s),this.buffer.push(i,s,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,t=e.buffer.length;for(t&&e.buffer[t-4]==0&&(t-=4);t>0&&e.buffer[t-2]>e.reducePos;)t-=4;let i=e.buffer.slice(t),s=e.bufferBase+t;for(;e&&s==e.bufferBase;)e=e.parent;return new Ns(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,s,this.curContext,this.lookAhead,e)}recoverByDelete(e,t){let i=e<=this.p.parser.maxNode;i&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,i?8:4),this.pos=this.reducePos=t,this.score-=190}canShift(e){for(let t=new wA(this);;){let i=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(i==0)return!1;if((i&65536)==0)return!0;t.reduce(i)}}recoverByInsert(e){if(this.stack.length>=300)return[];let t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){let s=[];for(let r=0,o;rl&1&&a==o)||s.push(t[r],o)}t=s}let i=[];for(let s=0;s>19,s=t&65535,r=this.stack.length-i*3;if(r<0||e.getGoto(this.stack[r],s,!1)<0){let o=this.findForcedReduction();if(o==null)return!1;t=o}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(t),!0}findForcedReduction(){let{parser:e}=this.p,t=[],i=(s,r)=>{if(!t.includes(s))return t.push(s),e.allActions(s,o=>{if(!(o&393216))if(o&65536){let a=(o>>19)-r;if(a>1){let l=o&65535,c=this.stack.length-a*3;if(c>=0&&e.getGoto(this.stack[c],l,!1)>=0)return a<<19|65536|l}}else{let a=i(o,r+1);if(a!=null)return a}})};return i(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let t=0;t0&&this.emitLookAhead()}}class qc{constructor(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0}}class wA{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let t=e&65535,i=e>>19;i==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(i-1)*3;let s=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=s}}class Hs{constructor(e,t,i){this.stack=e,this.pos=t,this.index=i,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,t=e.bufferBase+e.buffer.length){return new Hs(e,t,t-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new Hs(this.stack,this.pos,this.index)}}function dn(n,e=Uint16Array){if(typeof n!="string")return n;let t=null;for(let i=0,s=0;i=92&&o--,o>=34&&o--;let l=o-32;if(l>=46&&(l-=46,a=!0),r+=l,a)break;r*=46}t?t[s++]=r:t=new e(r)}return t}class ks{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const Wc=new ks;class kA{constructor(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Wc,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}resolveOffset(e,t){let i=this.range,s=this.rangeIndex,r=this.pos+e;for(;ri.to:r>=i.to;){if(s==this.ranges.length-1)return null;let o=this.ranges[++s];r+=o.from-i.to,i=o}return r}clipPos(e){if(e>=this.range.from&&ee)return Math.max(e,t.from);return this.end}peek(e){let t=this.chunkOff+e,i,s;if(t>=0&&t=this.chunk2Pos&&ia.to&&(this.chunk2=this.chunk2.slice(0,a.to-i)),s=this.chunk2.charCodeAt(0)}}return i>=this.token.lookAhead&&(this.token.lookAhead=i+1),s}acceptToken(e,t=0){let i=t?this.resolveOffset(t,-1):this.pos;if(i==null||i=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Wc,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);let i="";for(let s of this.ranges){if(s.from>=t)break;s.to>e&&(i+=this.input.read(Math.max(s.from,e),Math.min(s.to,t)))}return i}}class Di{constructor(e,t){this.data=e,this.id=t}token(e,t){let{parser:i}=t.p;sd(this.data,e,t,this.id,i.data,i.tokenPrecTable)}}Di.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class sa{constructor(e,t,i){this.precTable=t,this.elseToken=i,this.data=typeof e=="string"?dn(e):e}token(e,t){let i=e.pos,s=0;for(;;){let r=e.next<0,o=e.resolveOffset(1,1);if(sd(this.data,e,t,0,this.data,this.precTable),e.token.value>-1)break;if(this.elseToken==null)return;if(r||s++,o==null)break;e.reset(o,e.token)}s&&(e.reset(i,e.token),e.acceptToken(this.elseToken,s))}}sa.prototype.contextual=Di.prototype.fallback=Di.prototype.extend=!1;class qn{constructor(e,t={}){this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend}}function sd(n,e,t,i,s,r){let o=0,a=1<0){let p=n[d];if(l.allows(p)&&(e.token.value==-1||e.token.value==p||QA(p,e.token.value,s,r))){e.acceptToken(p);break}}let h=e.next,u=0,f=n[o+2];if(e.next<0&&f>u&&n[c+f*3-3]==65535){o=n[c+f*3-1];continue e}for(;u>1,p=c+d+(d<<1),m=n[p],g=n[p+1]||65536;if(h=g)u=d+1;else{o=n[p+2],e.advance();continue e}}break}}function zc(n,e,t){for(let i=e,s;(s=n[i])!=65535;i++)if(s==t)return i-e;return-1}function QA(n,e,t,i){let s=zc(t,i,e);return s<0||zc(t,i,n)e)&&!i.type.isError)return t<0?Math.max(0,Math.min(i.to-1,e-25)):Math.min(n.length,Math.max(i.from+1,e+25));if(t<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return t<0?0:n.length}}class PA{constructor(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Vc(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Vc(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=o,null;if(r instanceof ke){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}}}class CA{constructor(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(i=>new ks)}getActions(e){let t=0,i=null,{parser:s}=e.p,{tokenizers:r}=s,o=s.stateSlot(e.state,3),a=e.curContext?e.curContext.hash:0,l=0;for(let c=0;cu.end+25&&(l=Math.max(u.lookAhead,l)),u.value!=0)){let f=t;if(u.extended>-1&&(t=this.addActions(e,u.extended,u.end,t)),t=this.addActions(e,u.value,u.end,t),!h.extend&&(i=u,t>f))break}}for(;this.actions.length>t;)this.actions.pop();return l&&e.setLookAhead(l),!i&&e.pos==this.stream.end&&(i=new ks,i.value=e.p.parser.eofTerm,i.start=i.end=e.pos,t=this.addActions(e,i.value,i.end,t)),this.mainToken=i,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let t=new ks,{pos:i,p:s}=e;return t.start=i,t.end=Math.min(i+1,s.stream.end),t.value=i==s.stream.end?s.parser.eofTerm:0,t}updateCachedToken(e,t,i){let s=this.stream.clipPos(i.pos);if(t.token(this.stream.reset(s,e),i),e.value>-1){let{parser:r}=i.p;for(let o=0;o=0&&i.p.parser.dialect.allows(a>>1)){(a&1)==0?e.value=a>>1:e.extended=a>>1;break}}}else e.value=0,e.end=this.stream.clipPos(s+1)}putAction(e,t,i,s){for(let r=0;re.bufferLength*4?new PA(i,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,t=this.minStackPos,i=this.stacks=[],s,r;if(this.bigReductionCount>300&&e.length==1){let[o]=e;for(;o.forceReduce()&&o.stack.length&&o.stack[o.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let o=0;ot)i.push(a);else{if(this.advanceStack(a,i,e))continue;{s||(s=[],r=[]),s.push(a);let l=this.tokens.getMainToken(a);r.push(l.value,l.end)}}break}}if(!i.length){let o=s&&KA(s);if(o)return nt&&console.log("Finish with "+this.stackID(o)),this.stackToTree(o);if(this.parser.strict)throw nt&&s&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+t);this.recovering||(this.recovering=5)}if(this.recovering&&s){let o=this.stoppedAt!=null&&s[0].pos>this.stoppedAt?s[0]:this.runRecovery(s,r,i);if(o)return nt&&console.log("Force-finish "+this.stackID(o)),this.stackToTree(o.forceAll())}if(this.recovering){let o=this.recovering==1?1:this.recovering*3;if(i.length>o)for(i.sort((a,l)=>l.score-a.score);i.length>o;)i.pop();i.some(a=>a.reducePos>t)&&this.recovering--}else if(i.length>1){e:for(let o=0;o500&&c.buffer.length>500)if((a.score-c.score||a.buffer.length-c.buffer.length)>0)i.splice(l--,1);else{i.splice(o--,1);continue e}}}i.length>12&&(i.sort((o,a)=>a.score-o.score),i.splice(12,i.length-12))}this.minStackPos=i[0].pos;for(let o=1;o ":"";if(this.stoppedAt!=null&&s>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let c=e.curContext&&e.curContext.tracker.strict,h=c?e.curContext.hash:0;for(let u=this.fragments.nodeAt(s);u;){let f=this.parser.nodeSet.types[u.type.id]==u.type?r.getGoto(e.state,u.type.id):-1;if(f>-1&&u.length&&(!c||(u.prop(G.contextHash)||0)==h))return e.useNode(u,f),nt&&console.log(o+this.stackID(e)+` (via reuse of ${r.getName(u.type.id)})`),!0;if(!(u instanceof ke)||u.children.length==0||u.positions[0]>0)break;let d=u.children[0];if(d instanceof ke&&u.positions[0]==0)u=d;else break}}let a=r.stateSlot(e.state,4);if(a>0)return e.reduce(a),nt&&console.log(o+this.stackID(e)+` (via always-reduce ${r.getName(a&65535)})`),!0;if(e.stack.length>=8400)for(;e.stack.length>6e3&&e.forceReduce(););let l=this.tokens.getActions(e);for(let c=0;cs?t.push(p):i.push(p)}return!1}advanceFully(e,t){let i=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>i)return jc(e,t),!0}}runRecovery(e,t,i){let s=null,r=!1;for(let o=0;o ":"";if(a.deadEnd&&(r||(r=!0,a.restart(),nt&&console.log(h+this.stackID(a)+" (restarted)"),this.advanceFully(a,i))))continue;let u=a.split(),f=h;for(let d=0;d<10&&u.forceReduce()&&(nt&&console.log(f+this.stackID(u)+" (via force-reduce)"),!this.advanceFully(u,i));d++)nt&&(f=this.stackID(u)+" -> ");for(let d of a.recoverByInsert(l))nt&&console.log(h+this.stackID(d)+" (via recover-insert)"),this.advanceFully(d,i);this.stream.end>a.pos?(c==a.pos&&(c++,l=0),a.recoverByDelete(l,c),nt&&console.log(h+this.stackID(a)+` (via recover-delete ${this.parser.getName(l)})`),jc(a,i)):(!s||s.scoren;class $A{constructor(e){this.start=e.start,this.shift=e.shift||so,this.reduce=e.reduce||so,this.reuse=e.reuse||so,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class Gs extends Yu{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (14)`);let t=e.nodeNames.split(" ");this.minRepeatTerm=t.length;for(let a=0;ae.topRules[a][1]),s=[];for(let a=0;a=0)r(h,l,a[c++]);else{let u=a[c+-h];for(let f=-h;f>0;f--)r(a[c++],l,u);c++}}}this.nodeSet=new Ta(t.map((a,l)=>et.define({name:l>=this.minRepeatTerm?void 0:a,id:l,props:s[l],top:i.indexOf(l)>-1,error:l==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(l)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=Wu;let o=dn(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let a=0;atypeof a=="number"?new Di(o,a):a),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,t,i){let s=new TA(this,e,t,i);for(let r of this.wrappers)s=r(s,e,t,i);return s}getGoto(e,t,i=!1){let s=this.goto;if(t>=s[0])return-1;for(let r=s[t+1];;){let o=s[r++],a=o&1,l=s[r++];if(a&&i)return l;for(let c=r+(o>>1);r0}validAction(e,t){return!!this.allActions(e,i=>i==t?!0:null)}allActions(e,t){let i=this.stateSlot(e,4),s=i?t(i):void 0;for(let r=this.stateSlot(e,1);s==null;r+=3){if(this.data[r]==65535)if(this.data[r+1]==1)r=Ft(this.data,r+2);else break;s=t(Ft(this.data,r+1))}return s}nextStates(e){let t=[];for(let i=this.stateSlot(e,1);;i+=3){if(this.data[i]==65535)if(this.data[i+1]==1)i=Ft(this.data,i+2);else break;if((this.data[i+2]&1)==0){let s=this.data[i+1];t.some((r,o)=>o&1&&r==s)||t.push(this.data[i],s)}}return t}configure(e){let t=Object.assign(Object.create(Gs.prototype),this);if(e.props&&(t.nodeSet=this.nodeSet.extend(...e.props)),e.top){let i=this.topRules[e.top];if(!i)throw new RangeError(`Invalid top rule name ${e.top}`);t.top=i}return e.tokenizers&&(t.tokenizers=this.tokenizers.map(i=>{let s=e.tokenizers.find(r=>r.from==i);return s?s.to:i})),e.specializers&&(t.specializers=this.specializers.slice(),t.specializerSpecs=this.specializerSpecs.map((i,s)=>{let r=e.specializers.find(a=>a.from==i.external);if(!r)return i;let o=Object.assign(Object.assign({},i),{external:r.to});return t.specializers[s]=Yc(o),o})),e.contextTracker&&(t.context=e.contextTracker),e.dialect&&(t.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(t.strict=e.strict),e.wrap&&(t.wrappers=t.wrappers.concat(e.wrap)),e.bufferLength!=null&&(t.bufferLength=e.bufferLength),t}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let t=this.dynamicPrecedences;return t==null?0:t[e]||0}parseDialect(e){let t=Object.keys(this.dialects),i=t.map(()=>!1);if(e)for(let r of e.split(" ")){let o=t.indexOf(r);o>=0&&(i[o]=!0)}let s=null;for(let r=0;ri)&&t.p.parser.stateFlag(t.state,2)&&(!e||e.scoren.external(t,i)<<1|e}return n.get}const ZA=316,MA=317,Nc=1,EA=2,UA=3,FA=4,DA=318,LA=320,XA=321,BA=5,IA=6,qA=0,ra=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],rd=125,WA=59,oa=47,zA=42,VA=43,jA=45,YA=60,NA=44,HA=63,GA=46,_A=91,JA=new $A({start:!1,shift(n,e){return e==BA||e==IA||e==LA?n:e==XA},strict:!1}),eb=new qn((n,e)=>{let{next:t}=n;(t==rd||t==-1||e.context)&&n.acceptToken(DA)},{contextual:!0,fallback:!0}),tb=new qn((n,e)=>{let{next:t}=n,i;ra.indexOf(t)>-1||t==oa&&((i=n.peek(1))==oa||i==zA)||t!=rd&&t!=WA&&t!=-1&&!e.context&&n.acceptToken(ZA)},{contextual:!0}),ib=new qn((n,e)=>{n.next==_A&&!e.context&&n.acceptToken(MA)},{contextual:!0}),nb=new qn((n,e)=>{let{next:t}=n;if(t==VA||t==jA){if(n.advance(),t==n.next){n.advance();let i=!e.context&&e.canShift(Nc);n.acceptToken(i?Nc:EA)}}else t==HA&&n.peek(1)==GA&&(n.advance(),n.advance(),(n.next<48||n.next>57)&&n.acceptToken(UA))},{contextual:!0});function ro(n,e){return n>=65&&n<=90||n>=97&&n<=122||n==95||n>=192||!e&&n>=48&&n<=57}const sb=new qn((n,e)=>{if(n.next!=YA||!e.dialectEnabled(qA)||(n.advance(),n.next==oa))return;let t=0;for(;ra.indexOf(n.next)>-1;)n.advance(),t++;if(ro(n.next,!0)){for(n.advance(),t++;ro(n.next,!1);)n.advance(),t++;for(;ra.indexOf(n.next)>-1;)n.advance(),t++;if(n.next==NA)return;for(let i=0;;i++){if(i==7){if(!ro(n.next,!0))return;break}if(n.next!="extends".charCodeAt(i))break;n.advance(),t++}}n.acceptToken(FA,-t)}),rb=Nu({"get set async static":O.modifier,"for while do if else switch try catch finally return throw break continue default case defer":O.controlKeyword,"in of await yield void typeof delete instanceof as satisfies":O.operatorKeyword,"let var const using function class extends":O.definitionKeyword,"import export from":O.moduleKeyword,"with debugger new":O.keyword,TemplateString:O.special(O.string),super:O.atom,BooleanLiteral:O.bool,this:O.self,null:O.null,Star:O.modifier,VariableName:O.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":O.function(O.variableName),VariableDefinition:O.definition(O.variableName),Label:O.labelName,PropertyName:O.propertyName,PrivatePropertyName:O.special(O.propertyName),"CallExpression/MemberExpression/PropertyName":O.function(O.propertyName),"FunctionDeclaration/VariableDefinition":O.function(O.definition(O.variableName)),"ClassDeclaration/VariableDefinition":O.definition(O.className),"NewExpression/VariableName":O.className,PropertyDefinition:O.definition(O.propertyName),PrivatePropertyDefinition:O.definition(O.special(O.propertyName)),UpdateOp:O.updateOperator,"LineComment Hashbang":O.lineComment,BlockComment:O.blockComment,Number:O.number,String:O.string,Escape:O.escape,ArithOp:O.arithmeticOperator,LogicOp:O.logicOperator,BitOp:O.bitwiseOperator,CompareOp:O.compareOperator,RegExp:O.regexp,Equals:O.definitionOperator,Arrow:O.function(O.punctuation),": Spread":O.punctuation,"( )":O.paren,"[ ]":O.squareBracket,"{ }":O.brace,"InterpolationStart InterpolationEnd":O.special(O.brace),".":O.derefOperator,", ;":O.separator,"@":O.meta,TypeName:O.typeName,TypeDefinition:O.definition(O.typeName),"type enum interface implements namespace module declare":O.definitionKeyword,"abstract global Privacy readonly override":O.modifier,"is keyof unique infer asserts":O.operatorKeyword,JSXAttributeValue:O.attributeValue,JSXText:O.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":O.angleBracket,"JSXIdentifier JSXNameSpacedName":O.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":O.attributeName,"JSXBuiltin/JSXIdentifier":O.standard(O.tagName)}),ob={__proto__:null,export:20,as:25,from:33,default:36,async:41,function:42,in:52,out:55,const:56,extends:60,this:64,true:72,false:72,null:84,void:88,typeof:92,super:108,new:142,delete:154,yield:163,await:167,class:172,public:235,private:235,protected:235,readonly:237,instanceof:256,satisfies:259,import:292,keyof:349,unique:353,infer:359,asserts:395,is:397,abstract:417,implements:419,type:421,let:424,var:426,using:429,interface:435,enum:439,namespace:445,module:447,declare:451,global:455,defer:471,for:476,of:485,while:488,with:492,do:496,if:500,else:502,switch:506,case:512,try:518,catch:522,finally:526,return:530,throw:534,break:538,continue:542,debugger:546},ab={__proto__:null,async:129,get:131,set:133,declare:195,public:197,private:197,protected:197,static:199,abstract:201,override:203,readonly:209,accessor:211,new:401},lb={__proto__:null,"<":193},cb=Gs.deserialize({version:14,states:"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-EtOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-EPO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-ERQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<VO!l$xO#jROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!OVO!l$xO#jVO!l$xO#jROe!iOpkOrPO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]VO!l$xO#j^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOrROe!iOpkOrPO(T)]O(VTO(YUO(aVO(o[O~O!]WO!l$xO#jgPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{SU+P%]S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mR>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o>UPS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;kP>X>Y>]>^T)z$u){V+P%]S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`SS#q]SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uSSR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:mSR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:mSQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:oS)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mSS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:mST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:mS#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^Q+T%aQ/c*Oo4OP>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^n=rTQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k]>^o4OP>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f]>^nZ>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f]>^nZ>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.lPQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.nSR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",maxTerm:380,context:JA,nodeProps:[["isolate",-8,5,6,14,37,39,51,53,55,""],["group",-26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,"Statement",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,"Expression",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,"Type",-3,88,103,109,"ClassItem"],["openedBy",23,"<",38,"InterpolationStart",56,"[",60,"{",73,"(",160,"JSXStartCloseTag"],["closedBy",-2,24,168,">",40,"InterpolationEnd",50,"]",61,"}",74,")",165,"JSXEndTag"]],propSources:[rb],skippedNodes:[0,5,6,278],repeatNodeCount:37,tokenData:"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr`#P#o`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l^!Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!^!LYP;=`<%l!KS>^!L`P;=`<%l!_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",tokenizers:[tb,ib,nb,sb,2,3,4,5,6,7,8,9,10,11,12,13,14,eb,new sa("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~",141,340),new sa("j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~",25,323)],topRules:{Script:[0,7],SingleExpression:[1,276],SingleClassItem:[2,277]},dialects:{jsx:0,ts:15175},dynamicPrecedences:{80:1,82:1,94:1,169:1,199:1},specialized:[{term:327,get:n=>ob[n]||-1},{term:343,get:n=>ab[n]||-1},{term:95,get:n=>lb[n]||-1}],tokenPrec:15201}),od=[Ye("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),Ye("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),Ye("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),Ye("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),Ye("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),Ye(`try { + \${} +} catch (\${error}) { + \${} +}`,{label:"try",detail:"/ catch block",type:"keyword"}),Ye("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),Ye(`if (\${}) { + \${} +} else { + \${} +}`,{label:"if",detail:"/ else block",type:"keyword"}),Ye(`class \${name} { + constructor(\${params}) { + \${} + } +}`,{label:"class",detail:"definition",type:"keyword"}),Ye('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),Ye('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],hb=od.concat([Ye("interface ${name} {\n ${}\n}",{label:"interface",detail:"definition",type:"keyword"}),Ye("type ${name} = ${type}",{label:"type",detail:"definition",type:"keyword"}),Ye("enum ${name} {\n ${}\n}",{label:"enum",detail:"definition",type:"keyword"})]),Hc=new dO,ad=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function cn(n){return(e,t)=>{let i=e.node.getChild("VariableDefinition");return i&&t(i,n),!0}}const ub=["FunctionDeclaration"],fb={FunctionDeclaration:cn("function"),ClassDeclaration:cn("class"),ClassExpression:()=>!0,EnumDeclaration:cn("constant"),TypeAliasDeclaration:cn("type"),NamespaceDeclaration:cn("namespace"),VariableDefinition(n,e){n.matchContext(ub)||e(n,"variable")},TypeDefinition(n,e){e(n,"type")},__proto__:null};function ld(n,e){let t=Hc.get(e);if(t)return t;let i=[],s=!0;function r(o,a){let l=n.sliceString(o.from,o.to);i.push({label:l,type:a})}return e.cursor(be.IncludeAnonymous).iterate(o=>{if(s)s=!1;else if(o.name){let a=fb[o.name];if(a&&a(o,r)||ad.has(o.name))return!1}else if(o.to-o.from>8192){for(let a of ld(n,o.node))i.push(a);return!1}}),Hc.set(e,i),i}const Gc=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,cd=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName","JSXText","JSXAttributeValue","JSXOpenTag","JSXCloseTag","JSXSelfClosingTag",".","?."];function db(n){let e=Ce(n.state).resolveInner(n.pos,-1);if(cd.indexOf(e.name)>-1)return null;let t=e.name=="VariableName"||e.to-e.from<20&&Gc.test(n.state.sliceDoc(e.from,e.to));if(!t&&!n.explicit)return null;let i=[];for(let s=e;s;s=s.parent)ad.has(s.name)&&(i=i.concat(ld(n.state.doc,s)));return{options:i,from:t?e.from:n.pos,validFor:Gc}}const Xt=Xs.define({name:"javascript",parser:cb.configure({props:[ef.add({IfStatement:Nr({except:/^\s*({|else\b)/}),TryStatement:Nr({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:MO,SwitchBody:n=>{let e=n.textAfter,t=/^\s*\}/.test(e),i=/^\s*(case|default)\b/.test(e);return n.baseIndent+(t?0:i?1:2)*n.unit},Block:ZO({closing:"}"}),ArrowFunction:n=>n.baseIndent+n.unit,"TemplateString BlockComment":()=>null,"Statement Property":Nr({except:/^\s*{/}),JSXElement(n){let e=/^\s*<\//.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},JSXEscape(n){let e=/\s*\}/.test(n.textAfter);return n.lineIndent(n.node.from)+(e?0:n.unit)},"JSXOpenTag JSXSelfClosingTag"(n){return n.column(n.node.from)+n.unit}}),sf.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType":DO,BlockComment(n){return{from:n.from+2,to:n.to-2}},JSXElement(n){let e=n.firstChild;if(!e||e.name=="JSXSelfClosingTag")return null;let t=n.lastChild;return{from:e.to,to:t.type.isError?n.to:t.from}},"JSXSelfClosingTag JSXOpenTag"(n){var e;let t=(e=n.firstChild)===null||e===void 0?void 0:e.nextSibling,i=n.lastChild;return!t||t.type.isError?null:{from:t.to,to:i.type.isError?n.to:i.from}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),hd={test:n=>/^JSX/.test(n.name),facet:_u({commentTokens:{block:{open:"{/*",close:"*/}"}}})},pb=Xt.configure({dialect:"ts"},"typescript"),mb=Xt.configure({dialect:"jsx",props:[Za.add(n=>n.isTop?[hd]:void 0)]}),gb=Xt.configure({dialect:"jsx ts",props:[Za.add(n=>n.isTop?[hd]:void 0)]},"typescript");let ud=n=>({label:n,type:"keyword"});const fd="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(ud),Ob=fd.concat(["declare","implements","private","protected","public"].map(ud));function yb(n={}){let e=n.jsx?n.typescript?gb:mb:n.typescript?pb:Xt,t=n.typescript?hb.concat(Ob):od.concat(fd);return new kO(e,[Xt.data.of({autocomplete:Ty(cd,Yf(t))}),Xt.data.of({autocomplete:db}),n.jsx?Sb:[]])}function Ab(n){for(;;){if(n.name=="JSXOpenTag"||n.name=="JSXSelfClosingTag"||n.name=="JSXFragmentTag")return n;if(n.name=="JSXEscape"||!n.parent)return null;n=n.parent}}function _c(n,e,t=n.length){for(let i=e?.firstChild;i;i=i.nextSibling)if(i.name=="JSXIdentifier"||i.name=="JSXBuiltin"||i.name=="JSXNamespacedName"||i.name=="JSXMemberExpression")return n.sliceString(i.from,Math.min(i.to,t));return""}const bb=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),Sb=$.inputHandler.of((n,e,t,i,s)=>{if((bb?n.composing:n.compositionStarted)||n.state.readOnly||e!=t||i!=">"&&i!="/"||!Xt.isActiveAt(n.state,e,-1))return!1;let r=s(),{state:o}=r,a=o.changeByRange(l=>{var c;let{head:h}=l,u=Ce(o).resolveInner(h-1,-1),f;if(u.name=="JSXStartTag"&&(u=u.parent),!(o.doc.sliceString(h-1,h)!=i||u.name=="JSXAttributeValue"&&u.to>h)){if(i==">"&&u.name=="JSXFragmentTag")return{range:l,changes:{from:h,insert:""}};if(i=="/"&&u.name=="JSXStartCloseTag"){let d=u.parent,p=d.parent;if(p&&d.from==h-2&&((f=_c(o.doc,p.firstChild,h))||((c=p.firstChild)===null||c===void 0?void 0:c.name)=="JSXFragmentTag")){let m=`${f}>`;return{range:A.cursor(h+m.length,-1),changes:{from:h,insert:m}}}}else if(i==">"){let d=Ab(u);if(d&&d.name=="JSXOpenTag"&&!/^\/?>|^<\//.test(o.doc.sliceString(h,h+2))&&(f=_c(o.doc,d,h)))return{range:l,changes:{from:h,insert:``}}}}return{range:l}});return a.changes.empty?!1:(n.dispatch([r,o.update(a,{userEvent:"input.complete",scrollIntoView:!0})]),!0)}),Jc=typeof String.prototype.normalize=="function"?n=>n.normalize("NFKD"):n=>n;class Yi{constructor(e,t,i=0,s=e.length,r,o){this.test=o,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=r?a=>r(Jc(a)):Jc,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return Ne(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=fa(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=Qt(e);let s=this.normalize(t);if(s.length)for(let r=0,o=i,a=!0;;r++){let l=s.charCodeAt(r),c=this.match(l,o,a,this.bufferPos+this.bufferStart,r==s.length-1);if(c)return this.value=c,this;if(r==s.length-1)break;a&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=_s(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(ithis.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=i||s.to<=t){let a=new Li(t,e.sliceString(t,i));return oo.set(e,a),a}if(s.from==t&&s.to==i)return s;let{text:r,from:o}=s;return o>t&&(r=e.sliceString(t,o)+r,o=t),s.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let i=this.flat.from+t.index,s=i+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this.matchPos=_s(this.text,s+(i==s?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Li.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}typeof Symbol<"u"&&(pd.prototype[Symbol.iterator]=md.prototype[Symbol.iterator]=function(){return this});function xb(n){try{return new RegExp(n,Na),!0}catch{return!1}}function _s(n,e){if(e>=n.length)return e;let t=n.lineAt(e),i;for(;e=56320&&i<57344;)e++;return e}const vb=n=>{let{state:e}=n,t=String(e.doc.lineAt(n.state.selection.main.head).number),{close:i,result:s}=jg(n,{label:e.phrase("Go to line"),input:{type:"text",name:"line",value:t},focus:!0,submitLabel:e.phrase("go")});return s.then(r=>{let o=r&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(r.elements.line.value);if(!o){n.dispatch({effects:i});return}let a=e.doc.lineAt(e.selection.main.head),[,l,c,h,u]=o,f=h?+h.slice(1):0,d=c?+c:a.number;if(c&&u){let g=d/100;l&&(g=g*(l=="-"?-1:1)+a.number/e.doc.lines),d=Math.round(e.doc.lines*g)}else c&&l&&(d=d*(l=="-"?-1:1)+a.number);let p=e.doc.line(Math.max(1,Math.min(e.doc.lines,d))),m=A.cursor(p.from+Math.max(0,Math.min(f,p.length)));n.dispatch({effects:[i,$.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0},wb={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},kb=K.define({combine(n){return yt(n,wb,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})}});function Qb(n){return[$b,Rb]}const Pb=B.mark({class:"cm-selectionMatch"}),Cb=B.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function eh(n,e,t,i){return(t==0||n(e.sliceDoc(t-1,t))!=ye.Word)&&(i==e.doc.length||n(e.sliceDoc(i,i+1))!=ye.Word)}function Tb(n,e,t,i){return n(e.sliceDoc(t,t+1))==ye.Word&&n(e.sliceDoc(i-1,i))==ye.Word}const Rb=xe.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.selectionSet||n.docChanged||n.viewportChanged)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=n.state.facet(kb),{state:t}=n,i=t.selection;if(i.ranges.length>1)return B.none;let s=i.main,r,o=null;if(s.empty){if(!e.highlightWordAroundCursor)return B.none;let l=t.wordAt(s.head);if(!l)return B.none;o=t.charCategorizer(s.head),r=t.sliceDoc(l.from,l.to)}else{let l=s.to-s.from;if(l200)return B.none;if(e.wholeWords){if(r=t.sliceDoc(s.from,s.to),o=t.charCategorizer(s.head),!(eh(o,t,s.from,s.to)&&Tb(o,t,s.from,s.to)))return B.none}else if(r=t.sliceDoc(s.from,s.to),!r)return B.none}let a=[];for(let l of n.visibleRanges){let c=new Yi(t.doc,r,l.from,l.to);for(;!c.next().done;){let{from:h,to:u}=c.value;if((!o||eh(o,t,h,u))&&(s.empty&&h<=s.from&&u>=s.to?a.push(Cb.range(h,u)):(h>=s.to||u<=s.from)&&a.push(Pb.range(h,u)),a.length>e.maxMatches))return B.none}}return B.set(a)}},{decorations:n=>n.decorations}),$b=$.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),Kb=({state:n,dispatch:e})=>{let{selection:t}=n,i=A.create(t.ranges.map(s=>n.wordAt(s.head)||A.cursor(s.head)),t.mainIndex);return i.eq(t)?!1:(e(n.update({selection:i})),!0)};function Zb(n,e){let{main:t,ranges:i}=n.selection,s=n.wordAt(t.head),r=s&&s.from==t.from&&s.to==t.to;for(let o=!1,a=new Yi(n.doc,e,i[i.length-1].to);;)if(a.next(),a.done){if(o)return null;a=new Yi(n.doc,e,0,Math.max(0,i[i.length-1].from-1)),o=!0}else{if(o&&i.some(l=>l.from==a.value.from))continue;if(r){let l=n.wordAt(a.value.from);if(!l||l.from!=a.value.from||l.to!=a.value.to)continue}return a.value}}const Mb=({state:n,dispatch:e})=>{let{ranges:t}=n.selection;if(t.some(r=>r.from===r.to))return Kb({state:n,dispatch:e});let i=n.sliceDoc(t[0].from,t[0].to);if(n.selection.ranges.some(r=>n.sliceDoc(r.from,r.to)!=i))return!1;let s=Zb(n,i);return s?(e(n.update({selection:n.selection.addRange(A.range(s.from,s.to),!1),effects:$.scrollIntoView(s.to)})),!0):!1},tn=K.define({combine(n){return yt(n,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Yb(e),scrollToMatch:e=>$.scrollIntoView(e)})}});class gd{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||xb(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(t,i)=>i=="n"?` +`:i=="r"?"\r":i=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new Xb(this):new Fb(this)}getCursor(e,t=0,i){let s=e.doc?e:_.create({doc:e});return i==null&&(i=s.doc.length),this.regexp?Pi(this,s,t,i):Qi(this,s,t,i)}}class Od{constructor(e){this.spec=e}}function Eb(n,e,t){return(i,s,r,o)=>{if(t&&!t(i,s,r,o))return!1;let a=i>=o&&s<=o+r.length?r.slice(i-o,s-o):e.doc.sliceString(i,s);return n(a,e,i,s)}}function Qi(n,e,t,i){let s;return n.wholeWord&&(s=Ub(e.doc,e.charCategorizer(e.selection.main.head))),n.test&&(s=Eb(n.test,e,s)),new Yi(e.doc,n.unquoted,t,i,n.caseSensitive?void 0:r=>r.toLowerCase(),s)}function Ub(n,e){return(t,i,s,r)=>((r>t||r+s.length=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Qi(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}function Db(n,e,t){return(i,s,r)=>(!t||t(i,s,r))&&n(r[0],e,i,s)}function Pi(n,e,t,i){let s;return n.wholeWord&&(s=Lb(e.charCategorizer(e.selection.main.head))),n.test&&(s=Db(n.test,e,s)),new pd(e.doc,n.search,{ignoreCase:!n.caseSensitive,test:s},t,i)}function Js(n,e){return n.slice(Ze(n,e,!1),e)}function er(n,e){return n.slice(e,Ze(n,e))}function Lb(n){return(e,t,i)=>!i[0].length||(n(Js(i.input,i.index))!=ye.Word||n(er(i.input,i.index))!=ye.Word)&&(n(er(i.input,i.index+i[0].length))!=ye.Word||n(Js(i.input,i.index+i[0].length))!=ye.Word)}class Xb extends Od{nextMatch(e,t,i){let s=Pi(this.spec,e,i,e.doc.length).next();return s.done&&(s=Pi(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let r=Math.max(t,i-s*1e4),o=Pi(this.spec,e,r,i),a=null;for(;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if(i=="&")return e.match[0];if(i=="$")return"$";for(let s=i.length;s>0;s--){let r=+i.slice(0,s);if(r>0&&r=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let r=Pi(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!r.next().done;)s(r.value.from,r.value.to)}}const Zn=z.define(),Ha=z.define(),Gt=Te.define({create(n){return new ao(aa(n).create(),null)},update(n,e){for(let t of e.effects)t.is(Zn)?n=new ao(t.value.create(),n.panel):t.is(Ha)&&(n=new ao(n.query,t.value?Ga:null));return n},provide:n=>Vi.from(n,e=>e.panel)});class ao{constructor(e,t){this.query=e,this.panel=t}}const Bb=B.mark({class:"cm-searchMatch"}),Ib=B.mark({class:"cm-searchMatch cm-searchMatch-selected"}),qb=xe.fromClass(class{constructor(n){this.view=n,this.decorations=this.highlight(n.state.field(Gt))}update(n){let e=n.state.field(Gt);(e!=n.startState.field(Gt)||n.docChanged||n.selectionSet||n.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:n,panel:e}){if(!e||!n.spec.valid)return B.none;let{view:t}=this,i=new Bt;for(let s=0,r=t.visibleRanges,o=r.length;sr[s+1].from-500;)l=r[++s].to;n.highlight(t.state,a,l,(c,h)=>{let u=t.state.selection.ranges.some(f=>f.from==c&&f.to==h);i.add(c,h,u?Ib:Bb)})}return i.finish()}},{decorations:n=>n.decorations});function Wn(n){return e=>{let t=e.state.field(Gt,!1);return t&&t.query.spec.valid?n(e,t):bd(e)}}const tr=Wn((n,{query:e})=>{let{to:t}=n.state.selection.main,i=e.nextMatch(n.state,t,t);if(!i)return!1;let s=A.single(i.from,i.to),r=n.state.facet(tn);return n.dispatch({selection:s,effects:[_a(n,i),r.scrollToMatch(s.main,n)],userEvent:"select.search"}),Ad(n),!0}),ir=Wn((n,{query:e})=>{let{state:t}=n,{from:i}=t.selection.main,s=e.prevMatch(t,i,i);if(!s)return!1;let r=A.single(s.from,s.to),o=n.state.facet(tn);return n.dispatch({selection:r,effects:[_a(n,s),o.scrollToMatch(r.main,n)],userEvent:"select.search"}),Ad(n),!0}),Wb=Wn((n,{query:e})=>{let t=e.matchAll(n.state,1e3);return!t||!t.length?!1:(n.dispatch({selection:A.create(t.map(i=>A.range(i.from,i.to))),userEvent:"select.search.matches"}),!0)}),zb=({state:n,dispatch:e})=>{let t=n.selection;if(t.ranges.length>1||t.main.empty)return!1;let{from:i,to:s}=t.main,r=[],o=0;for(let a=new Yi(n.doc,n.sliceDoc(i,s));!a.next().done;){if(r.length>1e3)return!1;a.value.from==i&&(o=r.length),r.push(A.range(a.value.from,a.value.to))}return e(n.update({selection:A.create(r,o),userEvent:"select.search.matches"})),!0},th=Wn((n,{query:e})=>{let{state:t}=n,{from:i,to:s}=t.selection.main;if(t.readOnly)return!1;let r=e.nextMatch(t,i,i);if(!r)return!1;let o=r,a=[],l,c,h=[];o.precise?o.from==i&&o.to==s&&(c=t.toText(e.getReplacement(o)),a.push({from:o.from,to:o.to,insert:c}),o=e.nextMatch(t,o.from,o.to),h.push($.announce.of(t.phrase("replaced match on line $",t.doc.lineAt(i).number)+"."))):o=e.nextMatch(t,o.from,o.to);let u=n.state.changes(a);return o&&(l=A.single(o.from,o.to).map(u),h.push(_a(n,o)),h.push(t.facet(tn).scrollToMatch(l.main,n))),n.dispatch({changes:u,selection:l,effects:h,userEvent:"input.replace"}),!0}),Vb=Wn((n,{query:e})=>{if(n.state.readOnly)return!1;let t=[];for(let s of e.matchAll(n.state,1e9)){let{from:r,to:o,precise:a}=s;a&&t.push({from:r,to:o,insert:e.getReplacement(s)})}if(!t.length)return!1;let i=n.state.phrase("replaced $ matches",t.length)+".";return n.dispatch({changes:t,effects:$.announce.of(i),userEvent:"input.replace.all"}),!0});function Ga(n){return n.state.facet(tn).createPanel(n)}function aa(n,e){var t,i,s,r,o;let a=n.selection.main,l=a.empty||a.to>a.from+100?"":n.sliceDoc(a.from,a.to);if(e&&!l)return e;let c=n.facet(tn);return new gd({search:((t=e?.literal)!==null&&t!==void 0?t:c.literal)?l:l.replace(/\n/g,"\\n"),caseSensitive:(i=e?.caseSensitive)!==null&&i!==void 0?i:c.caseSensitive,literal:(s=e?.literal)!==null&&s!==void 0?s:c.literal,regexp:(r=e?.regexp)!==null&&r!==void 0?r:c.regexp,wholeWord:(o=e?.wholeWord)!==null&&o!==void 0?o:c.wholeWord})}function yd(n){let e=Fu(n,Ga);return e&&e.dom.querySelector("[main-field]")}function Ad(n){let e=yd(n);e&&e==n.root.activeElement&&e.select()}const bd=n=>{let e=n.state.field(Gt,!1);if(e&&e.panel){let t=yd(n);if(t&&t!=n.root.activeElement){let i=aa(n.state,e.query.spec);i.valid&&n.dispatch({effects:Zn.of(i)}),t.focus(),t.select()}}else n.dispatch({effects:[Ha.of(!0),e?Zn.of(aa(n.state,e.query.spec)):z.appendConfig.of(Hb)]});return!0},Sd=n=>{let e=n.state.field(Gt,!1);if(!e||!e.panel)return!1;let t=Fu(n,Ga);return t&&t.dom.contains(n.root.activeElement)&&n.focus(),n.dispatch({effects:Ha.of(!1)}),!0},jb=[{key:"Mod-f",run:bd,scope:"editor search-panel"},{key:"F3",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:tr,shift:ir,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Sd,scope:"editor search-panel"},{key:"Mod-Shift-l",run:zb},{key:"Mod-Alt-g",run:vb},{key:"Mod-d",run:Mb,preventDefault:!0}];class Yb{constructor(e){this.view=e;let t=this.query=e.state.field(Gt).query.spec;this.commit=this.commit.bind(this),this.searchField=he("input",{value:t.search,placeholder:st(e,"Find"),"aria-label":st(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=he("input",{value:t.replace,placeholder:st(e,"Replace"),"aria-label":st(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=he("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=he("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=he("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit});function i(s,r,o){return he("button",{class:"cm-button",name:s,onclick:r,type:"button"},o)}this.dom=he("div",{onkeydown:s=>this.keydown(s),class:"cm-search"},[this.searchField,i("next",()=>tr(e),[st(e,"next")]),i("prev",()=>ir(e),[st(e,"previous")]),i("select",()=>Wb(e),[st(e,"all")]),he("label",null,[this.caseField,st(e,"match case")]),he("label",null,[this.reField,st(e,"regexp")]),he("label",null,[this.wordField,st(e,"by word")]),...e.state.readOnly?[]:[he("br"),this.replaceField,i("replace",()=>th(e),[st(e,"replace")]),i("replaceAll",()=>Vb(e),[st(e,"replace all")])],he("button",{name:"close",onclick:()=>Sd(e),"aria-label":st(e,"close"),type:"button"},["×"])])}commit(){let e=new gd({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:Zn.of(e)}))}keydown(e){sg(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?ir:tr)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),th(this.view))}update(e){for(let t of e.transactions)for(let i of t.effects)i.is(Zn)&&!i.value.eq(this.query)&&this.setQuery(i.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(tn).top}}function st(n,e){return n.state.phrase(e)}const fs=30,ds=/[\s\.,:;?!]/;function _a(n,{from:e,to:t}){let i=n.state.doc.lineAt(e),s=n.state.doc.lineAt(t).to,r=Math.max(i.from,e-fs),o=Math.min(s,t+fs),a=n.state.sliceDoc(r,o);if(r!=i.from){for(let l=0;la.length-fs;l--)if(!ds.test(a[l-1])&&ds.test(a[l])){a=a.slice(0,l);break}}return $.announce.of(`${n.state.phrase("current match")}. ${a} ${n.state.phrase("on line")} ${i.number}.`)}const Nb=$.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Hb=[Gt,ri.low(qb),Nb];class ih{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class di{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(Kt).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((d,p)=>d.from-p.from||d.to-p.to),o=new Bt,a=[],l=0,c=i.doc.iter(),h=0,u=i.doc.length;for(let d=0;;){let p=d==r.length?null:r[d];if(!p&&!a.length)break;let m,g;if(a.length)m=l,g=a.reduce((x,C)=>Math.min(x,C.to),p&&p.from>m?p.from:1e8);else{if(m=p.from,m>u)break;g=p.to,a.push(p),d++}for(;dx.from||x.to==m))a.push(x),d++,g=Math.min(x.to,g);else{g=Math.min(x.from,g);break}}g=Math.min(g,u);let y=!1;if(a.some(x=>x.from==m&&(x.to==g||g==u))&&(y=m==g,!y&&g-m<10)){let x=m-(h+c.value.length);x>0&&(c.next(x),h=m);for(let C=m;;){if(C>=g){y=!0;break}if(!c.lineBreak&&h+c.value.length>C)break;C=h+c.value.length,h+=c.value.length,c.next()}}let b=Td(a);if(y)o.add(m,m,B.widget({widget:new nS(b),diagnostics:a.slice()}));else{let x=a.reduce((C,k)=>k.markClass?C+" "+k.markClass:C,"");o.add(m,g,B.mark({class:"cm-lintRange cm-lintRange-"+b+x,diagnostics:a.slice(),inclusiveEnd:a.some(C=>C.to>g)}))}if(l=g,l==u)break;for(let x=0;x{if(!(e&&o.diagnostics.indexOf(e)<0))if(!i)i=new ih(s,r,e||o.diagnostics[0]);else{if(o.diagnostics.indexOf(i.diagnostic)<0)return!1;i=new ih(i.from,r,i.diagnostic)}}),i}function xd(n,e){let t=e.pos,i=e.end||t,s=n.state.facet(Kt).hideOn(n,t,i);if(s!=null)return s;let r=n.startState.doc.lineAt(e.pos);return!!(n.effects.some(o=>o.is(Qr))||n.changes.touchesRange(r.from,Math.max(r.to,i)))}function Gb(n,e){return n.field(gt,!1)?e:e.concat(z.appendConfig.of(Kd))}function vd(n,e){return{effects:Gb(n,[Qr.of(e)])}}const Qr=z.define(),wd=z.define(),kd=z.define(),gt=Te.define({create(){return new di(B.none,null,null)},update(n,e){if(e.docChanged&&n.diagnostics.size){let t=n.diagnostics.map(e.changes),i=null,s=n.panel;if(n.selected){let r=e.changes.mapPos(n.selected.from,1);i=Ni(t,n.selected.diagnostic,r)||Ni(t,null,r)}!t.size&&s&&e.state.facet(Kt).autoPanel&&(s=null),n=new di(t,s,i)}for(let t of e.effects)if(t.is(Qr)){let i=e.state.facet(Kt).autoPanel?t.value.length?nr.open:null:n.panel;n=di.init(t.value,i,e.state)}else t.is(wd)?n=new di(n.diagnostics,t.value?nr.open:null,n.selected):t.is(kd)&&(n=new di(n.diagnostics,n.panel,t.value));return n},provide:n=>[Vi.from(n,e=>e.panel),$.decorations.from(n,e=>e.diagnostics)]}),_b=B.mark({class:"cm-lintRange cm-lintRange-active"});function Jb(n,e,t){let{diagnostics:i}=n.state.field(gt),s,r=-1,o=-1;i.between(e-(t<0?1:0),e+(t>0?1:0),(l,c,{spec:h})=>{if(e>=l&&e<=c&&(l==c||(e>l||t>0)&&(eCd(n,t,!1)))}const nh=n=>{let e=n.state.field(gt,!1);return!e||!e.panel?!1:(n.dispatch({effects:wd.of(!1)}),!0)},eS=xe.fromClass(class{constructor(n){this.view=n,this.timeout=-1,this.set=!0;let{delay:e}=n.state.facet(Kt);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){clearTimeout(this.timeout);let n=Date.now();if(nPromise.resolve(i(this.view))),i=>{this.view.state.doc==e.doc&&this.view.dispatch(vd(this.view.state,i.reduce((s,r)=>s.concat(r))))},i=>{ze(this.view.state,i)})}}update(n){let e=n.state.facet(Kt);(n.docChanged||e!=n.startState.facet(Kt)||e.needsRefresh&&e.needsRefresh(n))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}});function tS(n,e,t){let i=[],s=-1;for(let r of n)r.then(o=>{i.push(o),clearTimeout(s),i.length==n.length?e(i):s=setTimeout(()=>e(i),200)},t)}const Kt=K.define({combine(n){return{sources:n.map(e=>e.source).filter(e=>e!=null),...yt(n.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:sh,tooltipFilter:sh,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,r)=>e(i,s,r)||t(i,s,r):e:t,autoPanel:(e,t)=>e||t})}}});function sh(n,e){return n?e?(t,i)=>e(n(t,i),i):n:e}function iS(n,e={}){return[Kt.of({source:n,config:e}),eS,Kd]}function Pd(n){let e=[];if(n)e:for(let{name:t}of n){for(let i=0;ir.toLowerCase()==s.toLowerCase())){e.push(s);continue e}}e.push("")}return e}function Cd(n,e,t){var i;let s=t?Pd(e.actions):[];return he("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},he("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage(n):e.message),(i=e.actions)===null||i===void 0?void 0:i.map((r,o)=>{let a=!1,l=d=>{if(d.preventDefault(),a)return;a=!0;let p=Ni(n.state.field(gt).diagnostics,e);p&&r.apply(n,p.from,p.to)},{name:c}=r,h=s[o]?c.indexOf(s[o]):-1,u=h<0?c:[c.slice(0,h),he("u",c.slice(h,h+1)),c.slice(h+1)],f=r.markClass?" "+r.markClass:"";return he("button",{type:"button",class:"cm-diagnosticAction"+f,onclick:l,onmousedown:l,"aria-label":` Action: ${c}${h<0?"":` (access key "${s[o]})"`}.`},u)}),e.source&&he("div",{class:"cm-diagnosticSource"},e.source))}class nS extends Ut{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return he("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class rh{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=Cd(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class nr{constructor(e){this.view=e,this.items=[];let t=s=>{if(!(s.ctrlKey||s.altKey||s.metaKey)){if(s.keyCode==27)nh(this.view),this.view.focus();else if(s.keyCode==38||s.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(s.keyCode==40||s.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(s.keyCode==36)this.moveSelection(0);else if(s.keyCode==35)this.moveSelection(this.items.length-1);else if(s.keyCode==13)this.view.focus();else if(s.keyCode>=65&&s.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:r}=this.items[this.selectedIndex],o=Pd(r.actions);for(let a=0;a{for(let r=0;rnh(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(gt).selected;if(!e)return-1;for(let t=0;t{for(let h of c.diagnostics){if(o.has(h))continue;o.add(h);let u=-1,f;for(let d=i;di&&(this.items.splice(i,u-i),s=!0)),t&&f.diagnostic==t.diagnostic?f.dom.hasAttribute("aria-selected")||(f.dom.setAttribute("aria-selected","true"),r=f):f.dom.hasAttribute("aria-selected")&&f.dom.removeAttribute("aria-selected"),i++}});i({sel:r.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:a,panel:l})=>{let c=l.height/this.list.offsetHeight;a.topl.bottom&&(this.list.scrollTop+=(a.bottom-l.bottom)/c)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let i=e;e=i.nextSibling,i.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=this.view.state.field(gt),i=Ni(t.diagnostics,this.items[e].diagnostic);i&&this.view.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0,effects:kd.of(i)})}static open(e){return new nr(e)}}function Qs(n,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(n)}')`}function ps(n){return Qs(``,'width="6" height="3"')}const sS=$.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ps("#f11")},".cm-lintRange-warning":{backgroundImage:ps("orange")},".cm-lintRange-info":{backgroundImage:ps("#999")},".cm-lintRange-hint":{backgroundImage:ps("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function rS(n){return n=="error"?4:n=="warning"?3:n=="info"?2:1}function Td(n){let e="hint",t=1;for(let i of n){let s=rS(i.severity);s>t&&(t=s,e=i.severity)}return e}class Rd extends Mt{constructor(e){super(),this.diagnostics=e,this.severity=Td(e)}toDOM(e){let t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;let i=this.diagnostics,s=e.state.facet(Pr).tooltipFilter;return s&&(i=s(i,e.state)),i.length&&(t.onmouseover=()=>aS(e,t,i)),t}}function oS(n,e){let t=i=>{let s=e.getBoundingClientRect();if(!(i.clientX>s.left-10&&i.clientXs.top-10&&i.clientYe.getBoundingClientRect()}}})}),e.onmouseout=e.onmousemove=null,oS(n,e)}let{hoverTime:s}=n.state.facet(Pr),r=setTimeout(i,s);e.onmouseout=()=>{clearTimeout(r),e.onmouseout=e.onmousemove=null},e.onmousemove=()=>{clearTimeout(r),r=setTimeout(i,s)}}function lS(n,e){let t=Object.create(null);for(let s of e){let r=n.lineAt(s.from);(t[r.from]||(t[r.from]=[])).push(s)}let i=[];for(let s in t)i.push(new Rd(t[s]).range(+s));return N.of(i,!0)}const cS=Bu({class:"cm-gutter-lint",markers:n=>n.state.field(la),widgetMarker:(n,e,t)=>{let i=[];return n.state.field(la).between(t.from,t.to,(s,r,o)=>{s>t.from&&si.is(Ja)?i.value:t,n)},provide:n=>gr.from(n)}),hS=$.baseTheme({".cm-gutter-lint":{width:"1.4em","& .cm-gutterElement":{padding:".2em"}},".cm-lint-marker":{width:"1em",height:"1em"},".cm-lint-marker-info":{content:Qs('')},".cm-lint-marker-warning":{content:Qs('')},".cm-lint-marker-error":{content:Qs('')}}),uS=Eu(Jb,{hideOn:xd}),Kd=[gt,$.decorations.compute([gt],n=>{let{selected:e,panel:t}=n.field(gt);return!e||!t||e.from==e.to?B.none:B.set([_b.range(e.from,e.to)])}),uS,sS],Pr=K.define({combine(n){return yt(n,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function fS(n={}){return[Pr.of(n),la,cS,hS,$d]}const Zd=1,Ue=Object.freeze({ready:"studio.ready",documentOpen:"document.open",documentReplace:"document.replace",documentChanged:"document.changed",documentSave:"document.save",documentSetReadOnly:"document.setReadOnly",documentResources:"document.resources",editorInsert:"editor.insert",editorFormat:"editor.format",editorSetTheme:"editor.setTheme",editorGetState:"editor.getState",diagnosticsPublish:"diagnostics.publish"});function dS(n,e={},t=null,i=null){return{protocolVersion:Zd,type:n,documentID:t,...i===null?{}:{sessionID:i},payload:e}}function pS(n){if(window.WKWebViewJavascriptBridge){n(window.WKWebViewJavascriptBridge);return}if(window.WKWVJBCallbacks){window.WKWVJBCallbacks.push(n);return}window.webkit?.messageHandlers?.iOS_Native_InjectJavascript&&(window.WKWVJBCallbacks=[n],window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null))}function nn(n,e,t={},i=null,s=()=>{},r=null){if(!n){s({result:"unavailable"});return}n.callHandler(e,dS(e,t,i,r),s)}function mS(n){const e={capabilities:["jsx","format","search","completion","diagnostics"]};nn(n,Ue.ready,e)}const gS=[{id:"$storage.getString",arguments:["key"],returns:"string",documentation:"Read a package-scoped string. Missing keys return an empty string."},{id:"$storage.setString",arguments:["key","value"],returns:"boolean",documentation:"Set a package-scoped string, limited to 256 KiB of UTF-8. Check the success result."},{id:"$storage.getJSON",arguments:["key"],returns:"json",documentation:"Read a package-scoped JSON object. Missing or invalid values return an empty object."},{id:"$storage.setJSON",arguments:["key","value"],returns:"boolean",documentation:"Store a valid JSON object, limited to 256 KiB encoded. Check the success result."},{id:"$storage.compareAndSetString",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a string only when it still matches expected. A missing key matches an empty string. Conflicts return false; reread and retry a bounded number of times. Requires the shared storage container."},{id:"$storage.compareAndSetJSON",arguments:["key","expected","value"],returns:"boolean",minimumRuntimeVersion:"1.3",documentation:"Atomically replace a JSON object if its current value equals expected, independent of property order. A missing key matches an empty object. Wrong types and conflicts return false. Requires the shared storage container."},{id:"$storage.remove",arguments:["key"],returns:"boolean",documentation:"Remove a key from this package only."},{id:"$storage.keys",arguments:[],returns:"string[]",documentation:"List keys in this package's namespace."},{id:"$storage.clear",arguments:[],returns:"boolean",documentation:"Clear this package's storage. Other packages are unaffected."}].map(n=>({minimumRuntimeVersion:"1.0",...n,preview:"initialState"})),OS=[{id:"$notifications.status",group:"notifications",value:{authorization:"authorized"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.pending",group:"notifications",value:[],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"read",mock:"editable"},{id:"$notifications.schedule",group:"notifications",value:{key:"daily",status:"scheduled"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$notifications.cancel",group:"notifications",value:{key:"daily",status:"cancellationRequested"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeNotifications.swift",operation:"write",mock:"editable"},{id:"$health.dailyStatistics",group:"health",value:{metric:"steps",unit:"count",aggregation:"sum",timeZone:"UTC",items:[{date:"2026-01-01",value:6840,hasSamples:!0}]},platforms:["ios"],authorization:"healthRead",notes:"Runtime 1.6. Read-only daily HealthKit statistics on installed iPhone/iPad widgets. Declare health and minimumRuntimeVersion 1.6, review Health access in native Settings. No separate System Access toggle. Missing readings are null/hasSamples false and cannot establish read denial. No raw samples, persistence or queries in future/Live Activity presentations. Preview fixtures never access real Health data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHealth.swift",operation:"read",mock:"editable"},{id:"$calendar.create",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$calendar.update",group:"calendar",value:{id:"sample.event",calendarID:"sample.calendar",status:"applied",replayed:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data. Calendar writes need calendar and calendarWrite; updates are limited to events this installation created.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeCalendar.swift",operation:"write",mock:"editable"},{id:"$weather.forecast",group:"weather",value:{provider:"MET Norway",attribution:{text:"Weather data from MET Norway",url:"https://www.met.no/en/free-meteorological-data/Download-services"},latitude:37.33,longitude:-122.01,fetchedAt:"2026-01-01T12:00:00Z",isStale:!1,hours:[{time:"2026-01-01T12:00:00Z",temperatureC:21,windMetersPerSecond:2,precipitationMM:0,condition:"partlycloudy_day"}]},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeWeather.swift",operation:"read",mock:"editable"},{id:"$alarms.status",group:"alarms",value:{authorization:"authorized"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.pending",group:"alarms",value:[],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"read",mock:"editable"},{id:"$alarms.schedule",group:"alarms",value:{key:"focus",status:"scheduled",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.cancel",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.stop",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.pause",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$alarms.resume",group:"alarms",value:{key:"focus",status:"requested"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["key"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeAlarms.swift",operation:"write",mock:"editable"},{id:"$documents.list",group:"documents",value:[{id:"550e8400-e29b-41d4-a716-446655440000",name:"Sample.json",type:"json",bytes:17},{id:"550e8400-e29b-41d4-a716-446655440001",name:"Sample.csv",type:"csv",bytes:24}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readJSON",group:"documents",value:{goal:12,done:7},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$documents.readCSV",group:"documents",value:{headers:["day","value"],rows:[["Monday","7"],["Tuesday","9"]],truncated:!1},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["id"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeDocuments.swift",operation:"read",mock:"editable"},{id:"$contacts.selected",group:"contacts",value:[{id:"sample.contact",name:"Alex Example",organization:"Sample",phones:["+1 202 555 0100"],emails:["alex@example.com"]}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeContacts.swift",operation:"read",mock:"editable"},{id:"$maps.search",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.geocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["address"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.reverseGeocode",group:"maps",value:[{name:"Example Park",address:"Sample address",latitude:37.33,longitude:-122.01}],platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$maps.snapshot",group:"maps",value:{image:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIHWP4z8DwHwAFgAI/ScLbtAAAAABJRU5ErkJggg==",width:256,height:256,provider:"Apple Maps"},platforms:["ios","macos"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeMaps.swift",operation:"read",mock:"editable"},{id:"$home.items",group:"home",value:[{id:"sample.light",name:"Living Room Lamp",kind:"power",value:!0,isCached:!0,metric:"power",unit:"boolean"},{id:"scene-sample",name:"Evening",kind:"scene",value:null,isCached:!0,metric:"scene",unit:"none"}],platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:[],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"read",mock:"editable"},{id:"$home.setPower",group:"home",value:{id:"sample.light",value:!0,status:"acknowledged"},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"},{id:"$home.runScene",group:"home",value:{id:"scene-sample",status:"acknowledged",replayed:!1},platforms:["ios"],authorization:"systemAccess",notes:"Runtime 1.6. Installed widgets require manifest permission, explicit native System Access, system authorization where applicable, an active installation and bounded queries. Writes require a user action; future timelines and Live Activities cannot call this API. Web and CLI fixtures never access real device data.",arguments:["options"],asynchronous:!0,minimumRuntimeVersion:"1.6",nativeSource:"Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntimeHome.swift",operation:"write",mock:"editable"}],ca="2026-01-01T00:00:00Z",zt="2026-01-01T12:00:00Z",lo=(n,e)=>({value:n,unit:e,hasSamples:!0,start:ca,end:zt}),oh=(n,e,t)=>Object.entries(e).map(([i,s])=>({id:`$${n}.${i}`,group:n,value:s,legacy:[t,i]})),yS=[{id:"$music.isAvailable",group:"music",value:!0},{id:"$music.authorizationStatus",group:"music",value:"authorized"},{id:"$music.current",group:"music",value:{provider:"appleMusic",state:"playing",hasItem:!0,title:"Morning Light",artist:"ScriptWidget Sessions",album:"Focus",duration:224,position:86,capturedAt:zt}},{id:"$services.status",group:"services",value:"connected"},{id:"$services.profile",group:"services",value:{service:"github",subject:"42",username:"octocat",displayName:"Mona",publicRepositories:32,privateRepositories:8,followers:128,following:24}},...oh("device",{screen:{width:390,height:844,scale:3},language:"en",model:"iPhone",name:"My iPhone",battery:{level:.8,state:"unplugged"},systemVersion:"26.0",isdarkmode:!1,totalDiskSpace:128e9,freeDiskSpace:64e9},"device"),...oh("system",{appInfo:{name:"ScriptWidget",bundleId:"com.everettjf.scriptwidget",version:"27.1.2",build:"27012"},locale:"en_US",preferredLanguages:["en-US"],timeZone:{identifier:"UTC",abbreviation:"GMT",offsetSeconds:0},is24HourClock:!1,calendarInfo:{identifier:"gregorian",firstWeekday:1,minimumDaysInFirstWeek:1},systemUptime:3600,memory:{physical:8589934592},thermalState:"nominal",lowPowerMode:!1,brightness:.5,reduceMotionEnabled:!1,platform:"ios",hostName:"My iPhone",processName:"ScriptWidgetWidget",osVersionString:"Version 26.0",processorCount:6,activeProcessorCount:6},"system"),{id:"$photos.isAvailable",group:"photos",value:!0},{id:"$photos.authorizationStatus",group:"photos",value:"authorized"},{id:"$photos.requestAuthorization",group:"photos",value:!0},{id:"$photos.items",group:"photos",value:{status:"ready",items:[{id:"sample.photo",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/biiiiu08cKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fbPe3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDQK/QnooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9uKKKK7TxwooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865Pl26H91CDwo9T6t6mhs5cTiVSXmX/ABx49v8Axdc+UmYbKM/u4vX/AGm9T+g/U6/w38fv4buRpOqMTYynr18pj3H+ye4/H1z5TRU3PHVean7S+p+gSOkiCSMhlYZBHIIPcU6vmn4YfEL+zXTw5rb/AOjscQyN/wAsyf4Sf7p7Ht9On0tVHuUKyqx5kFFFFBsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABTXdIkMkhwo5JNOrjPEN8ZJfsUZ+VeW9z/8AWry84zOGXYd4iSu9ku7O7L8FLF1lSjt19Av/ABDLIxjsvkX+8ep/wrn5J5pjmVyx9zmoqK/HsdmuJxsnPETb8ui9EfoWFwNHDR5aUbefX7yWOeaE5icqfY4roLDxDLGwjvfnX+8Oo/xrmqKMDmuJwUlPDza8uj9UGKwNHEx5asb+fX7z1ZHSVBJGcqeQRTq4zw9fGOX7FIflblfY/wD167Ov2HJ8zhmOHWIirPZrsz89zDBSwlZ0pbdPQKKKK9Q4QooooAKKKKAP/9P9uKKKK7TxwooooAKKKKACiiigAooooAK5zxP4o0vwpp5vtRbJPEcY+87eg/qe1UvGHjPTfCFj51yfMncfuoQeWPqfRfU18ia7r2peI9QfUtUk3u3AH8KjsqjsBQ2ceKxape7Hct+J/FGqeK9QN9qLYUcRxj7qL6D+p71zdFFSeJKTk7yCiiigQV9EfC74h+cI/DGuSfOPlt5W7+iMfX+6e/T0r53pQSDkcEUGtGs6UuaJ+gdFeOfDP4hDXIl0LWX/ANMjH7tz/wAtVH/sw7+o59a9jqj36VRVI80QooooNAooooAKKKKACiiigAooooAKKKKACiiigAryyeQzTPKerEn869TryyeMwzPEeqkj8q+B475uShba8vv0t+p9Xwvbmq99P1IqKKK/OD7AKKKKAJYJDDMko6qQfyr1OvLIIzNMkQ6sQPzr1Ov0fgTm5K99rx+/W/6Hx/FFual31/QKKKK++PlAooooAKKKKAP/1P24ooortPHCiiigAooooAKKKKACuA8cePbDwja+UmJr2Qfu4vT/AGm9B+p/UZ3j74i2vheJtO04iW/YdOqxg929/QfieOvypeXl1qF097eyGWWQ7mZjkk0mzgxWM5PchuT6pql/rN8+o6lIZZpDkk/yHoB2FZ9FFI8du+rCiiigQUUUUAFFFFAEkM0tvKs8DFHQhlYHBBHQg19afDvx7F4qtPsN+Qt/CvzDp5gH8Q/qP6V8j1bsb670y8jv7FzHNEdysOoNCZ0Yeu6Ur9D75orhvA3jW08X6dvOI7uIATR/+zL/ALJ/Tp9e5qj3oTU1zRCiiigoKKKKACiiigAooooAKKKKACiivnP43/HOz+Hts2geH2WfWZV9ituCOGcd2/ur+J4wC0rmVatGjFzqPQufGv436f8ADizbR9IK3GszL8qdVhB6PJ7/AN1e/U8deK+GvxhsfiHCtnqu231dF/eIOFmwPvp7/wB5e3UcdPge+vrzU7yXUdRlaeeZi8kjnLMx6kk0y1urmxuY7yzkaKWJgyOpwykdCCK87N8qhmOHeHm7PdPszycv4lrYTFLExXu7OPdf5n6sUV4l8H/ivD46jXQNXZYtXQfKDhRcAd07bx3X8RxkD3KSCaE4lQqfcYr8bx+U4nAzcMRBrz6P0Z+y5fmuHx9NVcNO9+nVeqIqKljgmmOIkLH2Ga6Cw8PSyMJL35F/ujqf8KWByrE42Shh4N+fRerNsVjqOGjzVZW8uv3B4esTJL9tkHyrwvuf/rV2dNREiQRxjCjgAU6v2HJ8shl2HWHi7vdvuz89zDGyxdZ1ZbdPQKKKK9Q4QooooAKKKKAP/9X9uKKKK7TxwooooAKKKKACvHfiF8S4tDD6NoTB7zo79Vi/xb27d/Ssr4ifE8WvmaF4akzLyss69F9VQ+vqe3bnp85kliWY5J6mk2ebi8Zb3Kf3j5ZZZ5WnnYu7klmY5JJ6kmo6KKR5IUUUUAFFFFABRRRQAUUUUAFFFFAGpo2s3+g6jHqmmvsljP4EdwR3B719keEvFVh4t0tb+0O2RcCWM9Ub+oPY9/rmviOug8M+JNQ8LaompWB6cOh+669wf6HsaEzrwuJdJ2ex9yUVi+H9f0/xJpkeqac2Ufgqeqt3U+4/+vW1VHuJpq6CiiigYUUUUAFFFFABRRXy38dfj1D4Ojk8J+EZFk1ZhtllGCtsD+hk9B/D1PpTSuY168KMHOoy58cvjvbeBYZPDPhh1m1iRcO3DLbA9z2LkfdXt1PYH857q6ub65kvb2RpZpWLu7klmYnJJJ5JNMnnmupnubl2kkkYszMSWZjySSeSSepqKtErHyGLxk8TLmlt0QUUUUzkJYJ57WdLm2do5I2DI6khlYHIII5BB71+hvwL+PkHjBIvCfi+RYtVUbYpjwtwB29BJ7dG7c8V+dtPR3icSxEqynII4II6EGk1c6sJi54eXNHbqj9taK+RvgT+0AniAQ+DfHEoW/4S3uWOBP6K57Seh/i/3uv1zWbVj6/D4iFeHPTYUUUUjcKKKKACiiigAooooA//1v24ooortPHCiio5ZYoImnnYIiAlmY4AA6kmgB5IUFmOAK+c/iJ8UDdeZoXhqTEXKyzr1b1VD6ep79uOuX8Q/iXLrhfRtCYpZjh36NL/AIL7d+/pXjlJs8rFYy/uU/vCiiikeYFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHYeDfF974Q1MXUOXgkwJouzD1H+0Oxr7F0vU7LWbCPUtOcSQyjKkfyPoR3FfBVeheAfHNx4Sv/KnJeymP7xP7p/vr7jv6j8KaZ3YTFezfJLY+wqKgtbq3vbZLu0cSRSAMrLyCDU9M9oKKKKACiivkD48fH9dEE3gvwNNm95S5ukPEPYoh/v8Aqf4eg+b7rSuYYjEQoQ55su/Hf4+x+GFl8HeC5Q+pHKz3C8i39VX1k9f7v16fn5JJJNI00zF3YksxOSSepJ9aRmZ2LuSSTkk9SabWiVj5DFYueIlzT+SCiiimcoUUUUAFFFFACgkHI4Ir7p+BH7QYvvJ8FePZsT8JbXjn7/YJKT/F2Dd+h55PwrRSaudOGxU8PPngftxRXw58CP2gzB5Pgrx9P8nCW145+72CSk9vRj06HjkfcYOeRWbVj6/DYmGIhzwCiiikdAUUUUAFFFFAH//X/biiis/VNUsNGsX1HUpBFDGMkn+Q9SewrtPGbtqye8vLXT7Z729kEUUY3MzHAAr5U8ffEW68UStp2nExWCnp0aQju3t6D8Tz0zvHHj2/8XXXlJmGyjP7uL1/2m9T+g/WuApNnj4rGOfuQ2CiiikcAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB6v8N/H7+G7gaTqjE2Mp69fKY9x/snuPxHfP1WjpIgkjIZWGQRyCD3Ffn7Xt3ww+IX9munhzXH/0djiGRv8AlmT/AAk/3T2Pb6dGmelg8Vy/u57H0tRRXxH8ef2gf9d4J8BT+qXV5GfwMcRH5Mw+g9apK53YnEww8OeZe+PP7QIsfO8E+BJv3/KXV2h+52McZH8XZmHToOeR8LEknJpKK0SsfIYrFTxE+eYUUUUzmCiiigAooooAKKKKACiiigAr7A+BH7QLaL5Pgzx1MTZcJbXTnmHsEkP9z0b+Hv8AL934/opNXN8PiJ0J88GftsrK6h0IKkZBHQinV+enwK+PsvhRovCHjKQyaYSFhnPLW/oD3Mf6r244H6DwzRXES3FuweNwGVlOQQeQQR1BrNqx9fhMXDER5ofNElFFFI6gooooA//Q/Z/Xde03w5p76lqkmxF4A/iY9lUdya+RPGHjPUvF9951yfLt0P7qEHhR6n1b1NUvE/ijVPFeoG+1FsAcRxj7qL6D+p71zldjZ8XisW6vux2CiiikcYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFISAMngCvGvGPjQ3m7StIbEXSSQfxew9vfv9OrSuRUqKCuz0Pxn8e/Ec/ho+BdGnxEMpLdKf3jR9PLU+nYt1I46dfm6iitkrHn1a06rvNhRRRTMgooooAKKKKACiiigAooooAKKKKACiiigAr6a+B3x5uvA00fhjxS7TaO5wj8s1sT3Hcp6r26juD8y0UjahXnRkp03qfthaXdrfW0d7ZSLNDKodHQgqynkEEcEGrFfmf8EvjnffDy6XQtdLXGiytyOrW5J5ZPVe7L+I5zn9JNO1Gx1axi1PTJVnt51DxyIcqynoQazasfXYPGQxMbx36ouUUUUjsP/R+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZVUsxwBySaR3SNDJIQqqMkngAV4h4w8ZPqjNpumMVthwzdC/8A9j/OnGNzOpUUFdkvjHxm2oFtL0psQdHcdX9h/s/z+leb0UVslY86c3N3YUUUUyAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvePgx8bNT+Gl8NN1Hdc6PM2ZIurRE9Xjz39V6H2PNeD0UjSlWlSkpwdmftNo+saZr+mQ6xo0y3FtcLvjkQ5BH9COhB5B4NaVflf8IPjJrHww1LyZN1zpU7Znt88g9N8eejDuOjDg9iP038P+INH8UaRDrmhTrcWs67kdf1BHUEdCDyDUNWPrsFjo4mPZ9Uf//S+tKKKK6z8/CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSSRwxtLKwVVGSTwABSTTRW8TTzsERBkseABXhHi3xfLrchsrIlLVT9C5Hc+3oPz9nGNzOpVUFdkvi/xjJrDmw08lbVTyehkI7n29B+ftwNFFbJWPNnNyd2FFFFMkKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvWvhP8W9b+F+r+bBm40+dh9otieG7bk/uuB379D2x5LRSLp1JU5KcHZo//0/rSiiius/PwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtYWublgiIMsx6AU26ureyt3urpwkaDJY14H4q8V3GvzeTDmO1Q/Kvdvdv8O1OMbmVWqoIk8WeLZtdlNrbZS1Q8Du59T/AEFcXRRWyVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9T60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKKKKACq15eW2n2z3d44SNBkk0y/v7XTbV7y9cJGg5J/kPU18/eJfE114hucnKW6H5I/6n1P8qqMbmVWqoLzJPFHim58QXGxcx2yH5E9fdvf+VcpRRWqVjzpScndhRRRTJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9X60ooorrPz8KKKKACiiigAooooAKKKKACiiigAooooAKo6jqNppVo17etsRfzJ9B6mm6pqlnpFm17ettReg7k+gHrXz34h8Q3niC786c7Y1+5GOij+p9TVRjcxq1lBeY/xH4ku/EN1vk+SFD8kfYe59TXOUUVqedKTbuwooopiCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9b60oqRYZX+4pP0FWV03UX+5byH6Kf8K6z4CzKVFay6Drj/AHLKc/SNv8KsJ4V8Tv8Ac026P0hf/CgfJLsYNFdOngvxc/TTbn8Y2H8xVhPAHjN+mnTfiMfzoH7KfZnIUV3C/Dbxu/TT3/FkH82qyvws8dt/y44+skf/AMVQV7Cp/K/uPPqK9JT4S+OG62yL9ZE/oTVlfg94zbqkK/WQf0BosP6vU/lZ5bRXra/Bjxc3V7Zfq7f0U1YX4JeKD9+4tR/wJz/7JRYf1Wr/ACnjlZmravZaLZte3rYUcADqx9BXpXjnwZH8PNCfXPEeoQKv3Y4k3GSV/wC6gIH4noB1r4t1vXL3Xrw3V2cAcIg6KPQf1PeqjG5y4mTo+7Jaj9e1+91+8NzcnCDhEHRR/j6msOiitTy223dhRRRTEFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/Z",width:384,height:256},{id:"sample.photo.2",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/ayiiivVAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9rKKKK9UAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo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AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySe1NkkSJDJIQqqMkngADua+f8Axv46fWGbStJYrag4Zuhk/wDsf51dOm5uyJbsT+OPHbamX0jR2xbDh5B1k9h/s/z+leV0UV6UIKKsjJu4UUUVYgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvoL4IfHTVfhdfjTNS3XWiztmSHq0RPWSPPf1Xo3sea+faKzq0o1IuE1oVGbi+aJ+5Gi61pXiLS4Na0SdLm1uF3xyIcgj+hHQg8g8HmtSvyU+DHxs1r4Vap5Em660i4bM9tnkHp5keeA47jow4PYj9UPDviPRfFmjQa/4fnW5tbhdyOv6gjqCDwQeQa+ZxeElQl5Hq0ayqLzP//S+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo5ZYoI2mmYIiDLMTgADuaSeeG2ha4uGCIgyzHgACvnbxp42m1+Q2NgSlmp+hkI7n29B+J9tKVJzdkTKViXxt44k1x203TSUtFPJ6GQjuf9n0H4n284oor0oxUVZGLdwoooqgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr2H4QfGLXvhTrPm2+bjTZ2H2m1J4btvT+64Hfv0PbHj1FROEZxcZrQcZOLuj//T+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubm3s7d7q6cRxxjLMegFNu7y2sLZ7y8cRxxjLMe1fN/jDxlc+JJ/IgzHaIflTux/vN7+g7VpSpObJlKxL4y8aXHiKY2lpmOzQ8L0Lkd2/oK4OiivSjFRVkYt3CiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1PqCiiivszygooooAKKKKACiiigAooooAKKKKACiiigAooooAKqX19aabave3riOKMZJP+etN1HUbPSrN76/cRxoOSf5D1J9K+afFfiy88TXeTmO2Q/u4/6t6n+XataVJzfkTKViXxd4vu/EtzsTMdrGfkj9f9pvf+VcbRRXoxioqyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//V+oKKKK+zPKCiiigAooooAKKKKACiiigAooooAKKKKACs/VNUstHsnv799kafmT2AHcmmavq9jolk1/qD7UXoO7HsAO5NfM3iXxNfeJb3z7j5Il/1cY6KP6k9zW1Ki5vyJlKxL4o8VXvia78yX5IEP7uMdB7n1PvXLUUV6EYpKyMW7hRRRVAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1vqCipFhlf7ik/QVZTTdRk+5byH6IT/SvsrnlWKVFay6Drr/AHLKc/SNv8Ksp4U8UP8Ac026P0hf/ClzLuOzMCiuoXwT4vfpplz+MbD+Yqynw/8AGj9NNm/EY/nS549x8j7HHUV3K/DXxy/TT3/FkH82qyvwq8ev/wAuGPrLEP8A2al7WHdByS7HntFelp8I/HLdbZF+sif0NWU+DnjRuqQr9ZB/QGl7aH8w/Zy7HldFeur8FfGDdXtl+rt/Rasr8D/FR+/c2o/4E5/9kpe3h3H7KXY8ZrJ1rWrDQbFr+/bCjhVHVj6AetemePvB0Xw20B9f8TajAq/diiTcZJX/ALqAgZ9z0A5NfCviDxBf+Ir43l6cAcIg+6g9B/U966sPBVfeWxlUvDRkniPxHf8AiS9N1dnai8Rxjoo/x9TXP0UV6aSSsjAKKKKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//Z",width:384,height:256},{id:"sample.photo.3",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//R/byiiiu09MKKKKACiiigAooooAKKKKACiiigAooooAKKrXl5a6fave3sgiijG5mY4AFOtbq3vbZLu0cSRSAMrLyCDTt1AnooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9L9vKKKK7T0wooooAKKKKACiiigAooooAKKKKACs/VNUsNGsX1HUpBFDGMkn+Q9Sewqtruvab4c099S1STYi8AfxMeyqO5NfInjDxnqfi++865PlwIf3UIPCj1Pq3qa3o0XUfkXCHMX/HHjy/8AF115SZhsoz+7iz1/2m9T+g/U6/w38fv4buRpWqMTYSnr18pj3H+ye4/Ed8+U0V6DpR5eS2h0cqtY/QJHSVBJGQysMgjkEHuKdXzT8MPiF/Zjp4c1t/8ARmOIZGP+rJ/hP+ye3p9On0tXmVKbg7M5pR5XYKKKKzJCiiigAooooAKKKKACiiigAooooAKKKKACiiigApkkiRIZJDtUckmn1xXiK/aSb7DGflTlvc//AFqmcuVXPJzrNYZbhpYiau9ku7C/8RTSMY7H5F/vHqf8K52SeaY5ldmPuc1FRXHKTe5+LY/NsVjpOeIm35dF6IljnmhOYnZT7HFdFYeIpo2Ed986/wB4dR/jXMUURk1sGAzbFYGSnh5teXR+qPWY5ElQSRncp5BFPrivDt+0c32GQ/K/K+x/+vXa12QlzK5+05LmsMyw0cRBWezXZhRRRVHrBRRRQAUUUUAf/9P9vKKKK7T0wooooAKKKKACiiigAooooAK5vxP4p0vwpp5vtRbLHiOMfec+g/qe1U/GHjPTfCFj51yfMuHH7qEHlj6n0X1NfIeu69qXiPUH1LVJN8jcAfwqOyqOwH+ea6KNBz1expCnfVlvxP4o1TxXqBvtRbAHEcY+6i+g/qe9c5RRXpJJKyOlK2wUUUUwCvoj4XfEPzRH4Y1yT5x8tvK3f0Rj6/3T36elfO9KCQcjgioqU1NWZMoqSsz9A6K8c+GfxBGtxLoWsv8A6ZGP3bn/AJaqP/Zh39Rz617HXlTg4PlZyyjZ2YUUUVAgooooAKKKKACiiigAooooAKKKKACiiigAryieQzTPKerMT+der15RPGYZniPVWI/KsK/Q/O/EDm5KFtry+/S36kVFFFcx+ZhRRRQBLBIYZklHVWB/KvV68ogjM0yRDqzAfnXq9dNDqfpnh/zcle+14/frf9Aooorc/RAooooAKKKKAP/U/byiiiu09MKKKKACiiigAooooAK4Dxx49sPCNr5SYmvZB+7i9P8Aaf0H6n8zWd4++Itr4XibTtOIlv2HTqsYPdvf0H4njr8qXl5dahcve3shllkO5mY5JNdVDD83vS2NYU76sn1TVL/Wb59R1KQyzSHJY/yHoB2FZ9FFeilbY6AooooAKKKKACiiigCSGaW3lWeBijoQysDggjoQa+s/h349i8U2n2G/IW/hX5h08xR/EP6j+lfJFW7G+u9MvI7+xcxzRHcrDqDWVWkqisROPMj75orhvA3jW08X6duOI7uIATR/+zL/ALJ/TpXc15couLszlatowoooqQCiiigAooooAKKKKACiiigAoor5v+OXx2svh5av4f8ADzLPrUq/VbdSOGf1b+6v4njAOlOnKpLlgioU3N8sS58bfjlp/wANrJtH0crca1MvyJ1WEHo8nv8A3V79Tx14j4Z/GOx+IsK2eq7bfWEX94g4WbA++nv/AHl7dRx0+Ab+/vdUvZdR1GVp552LySOcszHkkk0y0u7mxuY7yykaKWJgyOpwykdCCK9eeWQlS5Hv3FnPDtLMsI8LN2e6fZ/5H6wUV4f8HfixB47iXw/rDLFq6D5QcKLgDunbeO6/iOMge6yQTQnEqMp9xivmq1CdGThNH4HmeS4vLqjpYqm1br0foyKipY4JpjiJGY+wzXRWHh2aRhJffIv90dT/AIVnGLexngMpxWOkoYeDfn0Xqw8O2DSTfbpB8qcL7n/61drTI40iQRxjao4AFPrshHlVj9pyXKoZbho4eDu92+7CiiiqPWCiiigAooooA//V/byiiiu09MKKKKACiiigArxz4h/EuLQw+jaEwe8PDydVi/xb+Xf0rK+InxPFr5mheGpMy8rLOv8AD6qh9fU9u3PT50JLEsxyTXbQw9/embU6fVj5ZZZ5WmnYu7klmY5JJ6kmo6KK7jcKKKKACiiigAooooAKKKKACiiigDU0bWL/AEHUY9U019ksZ/AjuCO4Pevsjwl4qsPFulrf2nyyLxLGTyjf4Hse9fEddB4a8Sah4X1RNTsD04dD0de4P9D2NYV6POrrcicOY+5KKxfD+v6f4k0xNU01so3DKfvK3dT7itqvMatozlYUUUUgCiiigAooooAKKK+Vvjx8fofBkcvhLwhIsmrONssowVtgf0MnoP4ep9K1pUpVZcsC6dNzfLEu/HX49WvgOCTwx4XdZtZkXDtwy2wPc9i5H3V7dT2B/N+7u7q/upL29kaWaVi7u5JZmJySSeSSaZPPPdTvc3LtJJIxZ3YkszHkkk8kk1FX0OHw8aMbLc9mjRVJWQUUUV0GxNb3E9rOl1au0ckbBkdSQysDkEEcgg96/RT4EftAQeMUi8JeMZFi1ZRtimOAtyB29BJ7dG7c8V+ctPjkeJ1liYqynII4II6EGufEYeNaNpGVaiqqsz9waK+QfgN+0GniEQ+DPHMwW/4S3umOBP6I57Seh/i/3uv19Xz1ajKlLlmeLUpypvlkFFFFZEBRRRQAUUUUAFFFFAH/1v28ooortPTCiio5poreJp52CIgJZmOAAOpJoAeSFBZjgDqa+c/iJ8UDd+ZoXhqTEXKyzr1b1VD6ep79uOuV8Q/iXLrhfRtCYpZjh36NL/gvt37+leO130MPb3pm8KdtWFFFFdhsFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHX+DfF974R1MXUOXgkwJouzD1H+0Oxr7G0vU7LWbCPUtOcSQyjKkfyPoR3FfBVeg+AfHNx4Rv8Ayp8vZTH94n90/wB9fcd/UfhjmxFHn96O5nUhfVH2HRUFrdW97bJd2jiSKQBlZeQQanrzTmCiiigAoor46+Pn7Qa6GJvBXgWbN7ylzdIeIexSM/3/AFP8PQfN93WjRlVlywNKdJ1HyxL3x6/aBj8MLN4N8Eyh9SOVnuF5Fv6qvrJ/6D9en56ySSTSNNMxd3JLMTkknqSfWkZmdi7kkk5JPUmm19FQw8aMeWJ7NGiqasgooorc1CiiigAooooAUEg5HBFfd/wF/aGF95Pgnx/PifhLW8c/f7BJSf4uwY9eh55PwfRWNehGrHlkZ1aUai5ZH7iUV8LfAX9ocweT4J8fz/JwlreOfu9gkpPb0c9Oh45H3SDnkV87XoSpS5ZHi1aUqb5ZBRRRWJmFFFFABRRRQB//1/28oorP1TVLDRrF9R1KQRQxjJJ/kPUnsK7kr6I9MnvLy10+1e9vZBFFGNzMxwAK+U/H3xFuvFErafp5MVgp6dGkI7t7eg/E89M/xx48v/F115SZhsoz+7iz1/2m9T+g/U8BXoUMPy+9Lc6IU7asKKKK6jUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9W+G/j9/DdyNK1RibCU9evlMe4/2T3H4/X6sR0lQSRkMrDII5BB7ivz9r274YfEL+zXTw5rb/AOjscQyMf9WT/CT/AHT29Pp048RQv78TGpC+qPpaiivh34+/tC/67wP4Bn9UuryM/gY4iPyZh9B61zUaMqsuWJFKk6j5Yl/4+ftCCx87wR4Cn/f8pdXiH7nYxxkfxdmYdOg55HweSScmkor6KhQjSjyxPapUlTXLEKKKK2NAooooAKKKKACiiigAooooAK+xfgL+0K2iGHwX47mLWXCW1255h7BJD3T0b+Hv8v3fjqisq1GNWPLIipTVRcsj9wkdZFDoQVIyCOhFOr87PgP+0DN4TaLwf40lMmlkhYJzy1v6A9zH+q9uOB+h8M0NxCtxbuJI3AZWU5BB5BBHBBr53EYeVGXLI8WtRdJ2ZJRRRWBkFFFFAH//0P2j13XtN8Oae+papJsReAP4mPZVHcmvkTxh4z1Pxffedcny4EP7qEHhR6n1b1NUvE3ijVPFWoG/1FuBxHGPuovoP6nvXOV9BRoKGr3PchDl1YUUUV0GgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFISAMngCvE/Gvjc3hfSNGfEPSSQfx+w/2ffv9Otwg5OyLhTc3ZHonjb4/eI7jw0fAeiT4iGUlulJ8xo8Y8tT6di3Ujjp1+aKKK7KdKNNWijvhTUFaIUUUVoWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFfT3wL+Pl14Fmj8L+KnabR3OEflmtie47lPVe3UdwfmGis6tKNSPLMipTU1yyP28tLu1v7WO9spFmhlUOjoQyspGQQRwQRVivzH+CHx2v/h1dLoOvM1xosrcjq1uSeWT1Xuy/iOc5/SvTtRsNXsYtT0yZZ7edQ8ciHKsp6EGvnsThpUZWex41eg6Ts9i7RRRXMYn/0friiiivqD6AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACkZlRS7nAHJJpHdI0MkhCqoySeAAK8J8Z+NX1Zm0zS2K2w4Zuhk/wDsf51cIOT0Lp03N2RL408bNqJbStJbFuOHcdX9h/s/z+leZUUV3RioqyPQjFRVkFFFFUUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV738Fvjfqnwyvhpmo7rnRpmzJF1aInq8ee/qvQ+x5rwSioqU41I8sloTOCmuWR+2Oj6zpfiDTIdZ0adbi1uFDxyIcgj+hHQg8g8GtOvym+Dvxm1j4Xan5Em650mdsz2+eQf+ekeeAw7jow4PYj9P8Aw/4h0fxTpEOu6DOtxa3C7kdf1BHUEdCDyDXz2JwsqL8jxq+HdJ+R/9L64ooor6g+gCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwABTZpobaJp52CIgyzHgACvAfGHjKXXZDZWJKWin6FyO59vQfn7XTpubNKdNzehL4y8aSay50/TiVtFPJ6GQj19vQfnXntFFd0YqKsj0IxUVZBRRRVDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAr134S/F3XPhbq/m2+bjTp2H2i2J4btvT+64Hfv0PbHkVFROCmuWS0FKKkuWR//0/riiiivqD6AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqG4uILSBrm5cJGgyzHoBTbu7t7G3e7u3EcaDLMe1fPXizxdceIZ/IhzHaoflTu3+039B2rSnTc2aU6bmyXxf4wn1+U2trlLRDwO7kd2/oK4eiiu2MVFWR6EYqKsgoooqhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//U+uKKKK+oPoAooooAKKKKACiiigAooooAKKKKACiiigAooooAKq3t7a6daveXjhI0GST/AJ602/v7TTLR729cJGg5J/kPUmvnXxR4pu/EdzzmO3Q/u4/6n1P8q0p03M1pUnN+RJ4q8V3XiK42LmO2Q/Inr/tN7/yrkaKK7UklZHfGKirIKKKKoYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/9X64ooor6g+gCiiigAooooAKKKKACiiigAooooAKKKKACqGpalZ6TZtfXz7I1/Mn0A7k03VdVstGs2vr59qL0Hcn0A7mvnLxH4jvfEV558/yxL/AKuMdFH9T6mtadPm9DWlSc/Qk8S+JrzxHd+ZJ8kKH93H2HufU1zNFFdqSSsjvSSVkFFFFMYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1vriipFilf7ik/QVZXTtQf7kEh+in/CvqD6ApUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf/AApcy7iuYNFdOngvxc/TTbn8Y2H8xVhfAPjJ+mnTfiMfzpc8e4XRyFFdwvw38bv009/xZB/NqsL8LfHbf8uOPrJH/wDFUvaR7hzLuef0V6Svwl8cN1tkX6yJ/Q1ZX4P+M26pCv1kH9AaXtYdxc67nltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AAJz/wCyUvbw7hzx7njlZesaxY6JZNe3zYUcADqx9APWvSvHfg6P4daE+u+JNQgVfuxxJuMkr/3UBAz7noB1r4j13Xr7xBem7vDgDhEHRR6D+p710UIqpqtjejT9pr0JPEHiC+8Q3hubo7UXhIx0Uf4+prBoorvStojvSS0QUUUUxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//2Q==",width:384,height:256},{id:"sample.photo.4",image:"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBARXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAABgKADAAQAAAABAAABAAAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgBAAGAAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMAAgICAgICBAICBAYEBAQGCAYGBgYICggICAgICgwKCgoKCgoMDAwMDAwMDA4ODg4ODhAQEBAQEhISEhISEhISEv/bAEMBAwMDBQQFCAQECBMNCw0TExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE//dAAQAGP/aAAwDAQACEQMRAD8A/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//Q/biiiiuc9UKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK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0ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApGZUUu5wBySaR3SNDJIQqqMkngACvBvGnjZ9WZtM0titqDhm6GT/7H+dJuxrSpOo7Im8a+OG1ItpOkNi36O46v7D/Z/n9K8woorNu560IKC5YhRRRSLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK98+Cvxw1T4ZXw0zUd1zo07Zki6tET1ePPf1XofrzXgdFMyq0o1YuE1oftro2s6X4h0yHWdFnW5tbhd8ciHII/oR0IPIPBrTr8o/g58Z9Z+Fup+TJuudJnbM9vnkHp5keeA47jow4PYj9QvD3iHRvFWjw69oE63NrcLuR1/UEdQQeCDyDTTPlMbgpYeXddGf/9L60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmSyxwxtNMwVFGSTwAB3NNnnhtoWuLhgiIMsx4AAr5+8Y+M5tekNlYkpaKfoXI7n29B+J9k3Y2o0XUdkS+MvGsmtO2nacSlop5PQyEdz7eg/E155RRWbdz1YQUFyxCiiikWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXrvwk+L2ufCzWPNt83GnTsPtNqTw3ben91wO/foe2PIqKDOpTjUi4TV0f/T+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACobi4gtIHublwkaDLMegFNu7u2sbZ7u7cRxoMsx7V87+LfF9z4in8iHMdoh+VO7H+839B2pN2NqNF1H5EvjDxjP4gmNra5jtEPC93I7t/QVw1FFZtnqwgorliFFFFIsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9T60ooorI+1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAqre3trp1q95euI40GST/nrTNQ1C00u0e9vnCRoOSf5D1Jr5y8U+KrvxJdZOY7dD+7j/qfU/wAqTdjejRdR+RL4r8WXXiO52LmO1Q/Inr/tN7/yrkKKKzPVjFRVkFFFFIoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V+tKKKKyPtQooooAKKKKACiiigAooooAKKKKACiiigAqhqep2ekWb318+yNPzJ9AO5NM1XVrLRbJr6/fai9B3Y9gB3NfN/iPxJe+I7zz7j5Yl/wBXGOij+p9TUt2OihQdR+RJ4m8T3niO78yT5IEP7uPsPc+prmaKKg9SMVFWQUUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/W+tKKkWKV/uKT9BVlNO1CT7kEjfRT/hWR9rcpUVqpoWuP9yznP0jb/CrK+FvE7/c066P0hf8AwoFzLuYNFdMvgvxc/TTbn8Y2H8xVlfAPjJ+mnTfiMfzoF7SPc5Ciu4X4b+N36ae/4sg/masL8LfHb/8ALjj6yR//ABVIXtYfzI8/or0lPhL44brbIv1kT+hqynwf8Zt1SFfrIP6A0C9tD+ZHltFetL8GPFzdXt1+rt/RTVlfgl4oP37i1H/AnP8A7JQL6xT/AJjxysrWNZsdDsmvr5sKOAB1Y+gHrXpXjvwfF8OdBfXfEmoQKv3Yok3GSV/7qAgZ9z0A618Q69r194gvTd3hwBwiDoo9B/U96TdjrwtNVveWw/xB4hvvEV6bm6O1F4SMdFH+PqawaKKg9dJJWQUUUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9k=",width:384,height:256}],unavailableCount:0,fetchedAt:zt,source:"system",stale:!1}},{id:"$calendar.isAvailable",group:"calendar",value:!0},{id:"$calendar.authorizationStatus",group:"calendar",value:"authorized"},{id:"$calendar.requestAuthorization",group:"calendar",value:!0},{id:"$calendar.calendars",group:"calendar",value:[{id:"sample.personal",title:"Personal"}]},{id:"$calendar.events",group:"calendar",value:{status:"ready",items:[{id:"sample.event",calendarID:"sample.personal",title:"Read and recharge",start:"2026-01-01T15:00:00Z",end:"2026-01-01T15:30:00Z",allDay:!1}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.isAvailable",group:"reminders",value:!0},{id:"$reminders.authorizationStatus",group:"reminders",value:"authorized"},{id:"$reminders.requestAuthorization",group:"reminders",value:!0},{id:"$reminders.lists",group:"reminders",value:[{id:"sample.reminders",title:"Personal"}]},{id:"$reminders.items",group:"reminders",value:{status:"ready",items:[{id:"sample.reminder",listID:"sample.reminders",title:"Read a chapter",due:"2026-01-01T16:00:00Z",hasTime:!0,completed:!1,completedAt:null,priority:0}],fetchedAt:zt,source:"system",stale:!1,truncated:!1}},{id:"$reminders.create",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.update",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$reminders.setCompleted",group:"reminders",value:{id:"sample.reminder",listID:"sample.reminders",status:"applied",replayed:!1}},{id:"$health.authorizationStatus",group:"health",value:"notDisclosed"},{id:"$health.sleepSummary",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,totalSleepSeconds:27e3,inBedSeconds:30600,awakeSeconds:1800,stages:{unspecified:0,core:16200,deep:5400,rem:5400},sourceCount:1,truncated:!1,conflictSeconds:0,aggregation:"union-awake-rem-deep-core-unspecified"}},{id:"$health.activitySummary",group:"health",value:{date:"2026-01-01",timeZone:"UTC",hasSamples:!0,moveMode:"activeEnergy",move:{value:480,goal:600,unit:"kcal"},exercise:{value:26,goal:30,unit:"min"},stand:{value:9,goal:12,unit:"count"}}},{id:"$health.workouts",group:"health",value:{start:ca,end:zt,timeZone:"UTC",hasSamples:!0,truncated:!1,items:[{id:"550e8400-e29b-41d4-a716-446655440000",activity:"running",start:"2026-01-01T09:00:00.000Z",end:"2026-01-01T09:45:00.000Z",duration:2700,energyKcal:285,distanceMeters:5200}]}},{id:"$health.isAvailable",group:"health",value:!0},{id:"$health.requestAuthorization",group:"health",value:!0,legacy:["health"]},{id:"$health.stepCountToday",group:"health",value:lo(6840,"count"),legacy:["health.stepCountToday"]},{id:"$health.activeEnergyToday",group:"health",value:lo(420,"kcal"),legacy:["health.activeEnergyToday"]},{id:"$health.heartRateLatest",group:"health",value:lo(72,"bpm"),legacy:["health.heartRateLatest"]},{id:"$location.isAvailable",group:"location",value:!0},{id:"$location.authorizationStatus",group:"location",value:"authorizedWhenInUse"},{id:"$location.isAuthorizedForWidgetUpdates",group:"location",value:!0},{id:"$location.requestAuthorization",group:"location",value:!0,legacy:["location.authorization"]},{id:"$location.current",group:"location",value:{latitude:37.3349,longitude:-122.009,altitude:0,accuracy:10,verticalAccuracy:10,speed:-1,course:-1,timestamp:zt,accuracyAuthorization:"full",age:0,isStale:!1},legacy:["location"]}],AS={music:{platforms:["ios"],authorization:"musicRead",notes:"Runtime 1.4. Read-only Music app playback, not every audio player. Requires an installed owner, music permission and Music library approval in native Settings. current() is asynchronous and returns provider, state, hasItem, nullable title/artist/album/duration/position and capturedAt. State may be playing while details are absent (Home Sharing). Native player access is main-thread-only: synchronous hosts prepare one snapshot before JSC waits; background previews capture on the main queue. No playback/queue mutation, scans, artwork, credential or subscription inference. No live queries in future entries/Live Activities. Main system-player API is unavailable on macOS; Web supplies editable samples, never actual device access."},services:{platforms:["ios","macos"],authorization:"serviceAccount",notes:"Runtime 1.4: status(service) and profile(service) are asynchronous. Only provider: github. Unknown providers reject with service_operation. Requires an installed owner and services permission. profile additionally requires network and api.github.com in networkDomains, a native connected GitHub account and explicit owner grant. Native Settings handles credentials; scripts cannot log in or obtain tokens. profile returns service, subject, username, displayName, publicRepositories, privateRepositories, followers and following (missing values are null). No live queries in future entries or Live Activities. Eight shared data queries; native requests also share the eight concurrent/32 total network budget, while Web uses its existing preview network budget. Web uses editable best-state samples only; it never authenticates or sends these requests."},photos:{platforms:["ios","macos"],authorization:"photosRead",notes:"Requires photos permission and explicit native photo/album selection (none by default). Limited Photos authorization is supported. items({limit:1..4,offset:0..63,maxAgeSeconds:0..86400}) returns bounded, metadata-stripped JPEG thumbnails as image data URLs. Four 768px / 128KiB thumbnails at most; private snapshots expire after 24h and are rechecked against current access, selected sources and asset revisions. Cloud-only items report unavailableCount; download them in Photos first. Future timeline/Live Activity presentations read matching snapshots only. Web uses editable sample data and photosSelection IDs; no actual library access."},reminders:{platforms:["ios","macos"],authorization:"remindersRead",notes:"Requires reminders in widget.json and full system Reminders access. Reads require native Settings selected lists. create/update/setCompleted additionally require remindersWrite and a native declared action, stable requestID, durable replay receipts and an unchanged selected list. Web writes update preview-only items/receipts; receipt identities are derived from that state, with configurable API errors. Use lists() for IDs. items() selects pending due dates or completed completion dates in a positive window of at most 31 days, up to 50 items. Undated pending reminders are excluded. remindersSelection mocks the user scope without granting permission."},calendar:{platforms:["ios","macos"],authorization:"calendarRead",notes:"Requires calendar in widget.json and full system Calendar access. The user's native Settings source selection limits metadata, events and cached snapshots; scripts cannot enlarge it. Use calendars() for permitted IDs and show setup when no sources are selected. Queries are read-only, limited to 31 days and 50 items. Preview calendarSelection simulates this scope without granting package permission."},device:{platforms:["ios","macos"],authorization:"none",notes:"Device values depend on hardware. Some legacy Mac values are placeholders; inspect the API documentation before using them as measurements."},system:{platforms:["ios","macos"],authorization:"none",notes:"System metadata, not whole-device CPU, FPS or network traffic monitoring. Hardware-specific values may be unavailable."},health:{platforms:["ios"],authorization:"healthRead",notes:"Read-only HealthKit. Request access in the app. Runtime 1.4 adds sleepSummary (up to 7 days / 256 samples, union with explicit stage-conflict precedence), activitySummary (one local Gregorian day including active-energy or move-time mode and optional goals), and workouts (up to 31 days / 50 fully-contained summaries, optional kcal/meters). These require an explicit health manifest; all share the query budget and cannot run in future/Live Activity presentations. No Health readings are persisted by the API. Authorization completion does not reveal whether individual read types were granted; empty results must not be labelled permission denied. API 1.3 readings add hasSamples: false means no readable samples, never a read-denial verdict. Existing value/unit/start/end fields remain."},location:{platforms:["ios"],authorization:"locationWhenInUse",notes:"Package 2.0 requires location permission. Request system access in the app. Widgets also require isAuthorizedForWidgetUpdates. Cache is rechecked against authorization and precision, discarded after 24 hours or revocation, and reports age/isStale."}},bS=[...yS.map(n=>{const e=n.id.split(".")[1],t=n.group==="music"&&e==="current"||n.group==="services"||["calendar","reminders","photos"].includes(n.group)&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="health"&&!["isAvailable","authorizationStatus"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e),i=n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)||n.group==="location"&&["current","requestAuthorization"].includes(e)||["calendar","reminders","photos"].includes(n.group)&&["events","items"].includes(e);return{...n,...AS[n.group],minimumRuntimeVersion:["music","services","reminders","photos"].includes(n.group)||n.group==="health"&&["sleepSummary","activitySummary","workouts"].includes(e)?"1.4":["calendar"].includes(n.group)||["$health.authorizationStatus","$location.isAuthorizedForWidgetUpdates"].includes(n.id)?"1.3":"1.0",arguments:n.group==="services"?["service"]:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?["options"]:i?["options?"]:[],...n.group==="reminders"&&["create","update","setCompleted"].includes(e)?{authorization:"remindersWrite"}:{},asynchronous:t,nativeSource:`Shared/ScriptWidgetRuntime/Widget/API/ScriptWidgetRuntime${n.group[0].toUpperCase()}${n.group.slice(1)}.swift`,operation:n.group==="reminders"&&["create","update","setCompleted"].includes(e)?"write":e==="requestAuthorization"?"authorization":["isAvailable","authorizationStatus","isAuthorizedForWidgetUpdates"].includes(e)?"availability":"read",mock:"editable"}}),...OS],$e={globalProperties:{background:{type:"color",documentation:"Background color, hex value, or named color."},backgroundMaterial:{type:"enum",values:["none","ultraThin","thin","regular","thick","ultraThick"],documentation:"Runtime API 1.4. Public SwiftUI frosted material inside the widget, not Home Screen wallpaper blur or system Liquid Glass. At most four material backgrounds per tree. background supplies an opaque-composited Reduce Transparency fallback. In accented/vibrant mode local material is omitted for system rendering; none keeps the ordinary background."},color:{type:"color",documentation:"Foreground color, hex value, or named color."},font:{type:"enum",values:["largeTitle","title","title2","title3","headline","subheadline","body","callout","footnote","caption","caption2"],documentation:"Semantic text style."},fontWeight:{type:"enum",values:["ultraLight","thin","light","regular","medium","semibold","bold","heavy","black"],documentation:"Font weight."},fontDesign:{type:"enum",values:["default","rounded","serif","monospaced"],documentation:"Font design."},frame:{type:"number|string",documentation:'Square size (64 or "64"), width,height ("64,48"), or flexible frame ("max", "max,48").'},padding:{type:"number|string",documentation:"Padding amount or edge description."},corner:{type:"number",documentation:"Corner radius."},opacity:{type:"number",documentation:"Opacity from 0 through 1."},alignment:{type:"enum",values:["center","leading","trailing","top","bottom","topLeading","topTrailing","bottomLeading","bottomTrailing","firstTextBaseline","lastTextBaseline"],documentation:"Layout alignment."},clip:{type:"enum",values:["circle","rect","capsule","ellipse"],documentation:"Clip the view to a shape."},rotation:{type:"number",documentation:"Rotation in degrees."},rotation3d:{type:"string",documentation:"Static degree,x,y,z rotation with four finite numbers and a nonzero axis. Invalid values are ignored; axis magnitude is normalized. Reduce Motion removes the tilt. This does not read device motion or provide parallax."},shadow:{type:"string",documentation:"Shadow color, radius, and offset description."},animation:{type:"string",documentation:"iOS public SwiftUI scheduled clock/swing effect. Mac renders static standard-clock poses; other effects remain at rest. Signed clockCustom intervals specify a half-turn (full cycle = 2 * abs(interval)), minimum magnitude 0.25 seconds. App previews can animate; WidgetKit decides cadence and may freeze. Reduced motion/luminance freezes standard clock poses and keeps custom/swing effects at rest. Dynamic scripts are not rerun on animation ticks."},widgetAccentable:{type:"boolean",documentation:"Group this view into the accent layer in tinted and vibrant widget appearances."},linkurl:{type:"url",documentation:"Widget deep link URL."}},components:{VStack:{documentation:"Arrange children vertically.",children:!0,properties:{spacing:{type:"number"}}},HStack:{documentation:"Arrange children horizontally.",children:!0,properties:{spacing:{type:"number"}}},ZStack:{documentation:"Overlay children.",children:!0,properties:{}},VGrid:{documentation:"Vertical lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["leading","center","trailing"]}}},HGrid:{documentation:"Horizontal lazy grid.",children:!0,properties:{columns:{type:"string",required:!0},spacing:{type:"number"},alignment:{type:"enum",values:["top","center","bottom","firstTextBaseline","lastTextBaseline"]}}},Text:{documentation:"Display text content.",children:!1,properties:{text:{type:"string"}}},Date:{documentation:"Display a formatted date.",children:!1,properties:{date:{type:"date|number",required:!0},style:{type:"enum",values:["time","date","relative","offset","timer"]}}},Image:{documentation:"Display a bundled, remote, or SF Symbol image.",children:!1,properties:{systemName:{type:"string"},name:{type:"string"},id:{type:"string",deprecated:"Use name."},url:{type:"url"},src:{type:"url",deprecated:"Use url."},ratio:{type:"number"},mode:{type:"enum",values:["fit","fill"]},accentedRenderingMode:{type:"enum",values:["accented","desaturated","accentedDesaturated","fullColor"],documentation:"Control how the image is rendered in tinted and clear widget appearances."}}},Gif:{documentation:"Display a bounded package GIF using system decoding: up to 8 MiB input and 1,048,576 canvas pixels. iOS retains at most 60 downsampled frames / 4 MiB decoded pixels; more frames fall back to the first frame. Mac, Reduce Motion and reduced luminance use a static first frame. Active iOS previews use public SwiftUI timing with variable frame delays. Snapshots, inactive scenes, Mac and accessibility fallbacks use the first frame. No private clock bridge or continuous WidgetKit guarantee.",children:!1,properties:{file:{type:"string",required:!0}}},Spacer:{documentation:"Flexible layout space.",children:!1,properties:{minLength:{type:"number"}}},Rect:{documentation:"Rectangle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},RoundedRect:{documentation:"Filled rounded rectangle.",children:!1,properties:{radius:{type:"number"}}},Capsule:{documentation:"Capsule shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Ellipse:{documentation:"Ellipse shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Circle:{documentation:"Circle shape.",children:!1,properties:{trim:{type:"number|string"},stroke:{type:"string"}}},Gauge:{documentation:"Display a gauge or instrument.",children:!1,properties:{type:{type:"string"},value:{type:"number"},style:{type:"enum",values:["circular","linear"]},text:{type:"string"},current:{type:"string"},min:{type:"string"},max:{type:"string"},angle:{type:"number"},thickness:{type:"number"},needleColor:{type:"color"},label:{type:"string"},title:{type:"string"},sections:{type:"string"}}},Chart:{documentation:"Render chart data.",children:!1,availability:{ios:"16.0",macos:"26.0"},properties:{type:{type:"enum",values:["bar","bar-x","bar-y","bar-gantt","line","point","line-point","area","rect","rule-x"]},data:{type:"json",required:!0},category:{type:"boolean"},hideLegend:{type:"boolean"},hideXAxis:{type:"boolean"},hideYAxis:{type:"boolean"}}},Link:{documentation:"Open a URL when selected.",children:!0,properties:{url:{type:"url",required:!0}}},Divider:{documentation:"Horizontal or vertical separator.",children:!1,properties:{thickness:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Line:{documentation:"Fixed-length line.",children:!1,properties:{thickness:{type:"number"},length:{type:"number"},axis:{type:"enum",values:["horizontal","vertical"]}}},Icon:{documentation:"SF Symbol icon.",children:!1,properties:{systemName:{type:"string",required:!0},size:{type:"number"}}},Label:{documentation:"Text paired with an SF Symbol.",children:!1,properties:{title:{type:"string"},systemName:{type:"string",required:!0}}},Progress:{documentation:"Linear or circular progress.",children:!1,properties:{value:{type:"number",required:!0},total:{type:"number"},label:{type:"string"},style:{type:"enum",values:["linear","circular"]},trackColor:{type:"color"},thickness:{type:"number"}}},Ring:{documentation:"Circular progress ring.",children:!1,properties:{value:{type:"number",required:!0},thickness:{type:"number"},trackColor:{type:"color"}}},Badge:{documentation:"Compact status badge.",children:!1,properties:{text:{type:"string"},radius:{type:"number"}}},Chip:{documentation:"Outlined metadata chip.",children:!1,properties:{text:{type:"string"},radius:{type:"number"},borderColor:{type:"color"}}},Stat:{documentation:"Title, value, and subtitle statistic.",children:!1,properties:{title:{type:"string"},value:{type:"string",required:!0},subtitle:{type:"string"},mutedColor:{type:"color"}}},Button:{documentation:"Interactive widget button. Use actionID to share a declared Package 2.0 action with Siri, Shortcuts, and Control Widgets.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["action","onClick","actionID"],properties:{action:{type:"enum",values:["reload"],conflicts:["actionID"]},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",conflicts:["action","onClick"]}}},Toggle:{documentation:"Interactive widget toggle. A declared actionID requires a package-relative storage stateKey.",children:!0,availability:{interactiveIos:"17.0"},requiredAny:["onClick","actionID"],properties:{on:{type:"boolean",required:!0},onClick:{type:"function",conflicts:["actionID"]},actionID:{type:"action-id",requires:["stateKey"],conflicts:["onClick"]},stateKey:{type:"storage-key",requires:["actionID"]}}}},functions:{...Object.fromEntries(gS.map(n=>[n.id,n])),...Object.fromEntries(bS.map(n=>[n.id,{documentation:n.notes,minimumRuntimeVersion:n.minimumRuntimeVersion,arguments:n.arguments,returns:n.asynchronous?"Promise":typeof n.value=="object"?"json":typeof n.value}])),"$icloud.readJSON":{documentation:"Read cached JSON and revision; conflicts preserve all heads. Requires icloud permission and a native connection. Never certifies upload.",arguments:["name"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.writeJSON":{documentation:"Save a new immutable JSON revision locally from a user action. Requires the revision from readJSON. Background exchange is eventual.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.resolveJSON":{documentation:"Explicitly resolve all observed conflicting heads into a new revision. Stale tokens fail; originals remain.",arguments:["name","value","expectedRevision"],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.sync":{documentation:"Exchange materialized revisions with iCloud; requires a user action. Upload completion is unknown.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$icloud.status":{documentation:"Read native connection state. Cloud store IDs are granted in the app, never by the script. Web uses preview mocks.",arguments:[],returns:"Promise",minimumRuntimeVersion:"1.5"},"$file.exists":{documentation:"Return whether a regular file is locally present inside this package, including binary assets. Missing files, directories, unsafe paths and links return false. Does not download iCloud files or read outside the package. Web preview uses workspace file presence.",arguments:["path"],returns:"boolean",minimumRuntimeVersion:"1.3"},"$file.read":{documentation:"Read package-relative UTF-8 text. Missing or unavailable files return an empty string.",arguments:["path"],returns:"string"},"$file.readJSON":{documentation:"Read a package-relative JSON object.",arguments:["path"],returns:"json"},fetch:{documentation:"Perform a network request and return its response text. Existing HTTP methods keep this string result."},"$http.getResponse":{documentation:"GET response metadata: {status, body, headers}. Headers are limited to content-type, cache-control, expires, last-modified, date and retry-after (lowercase; each at most 2048 UTF-8 bytes). Network permissions, public-host policy, redirects, body limits and timeline restrictions still apply. HTTP error statuses resolve; transport errors reject.",arguments:["url","options?"],returns:"Promise",minimumRuntimeVersion:"1.3"},importJS:{documentation:"Import a package-relative JavaScript file."},"$dataSource.request":{documentation:"Call a declared Data Source Plugin operation. Requires Package 2.0 plugins, network permission, and networkDomains declarations.",arguments:["pluginID","operationID","parameters"],returns:"Promise"},"$xml.parse":{documentation:"Parse up to 256 KiB of XML into {name, attributes, text, children}. DTDs and external entities are rejected; depth and node limits apply.",arguments:["source"],returns:"XMLNode"}}};function SS(n,e){const t=Object.entries(e.properties??{}).filter(([,s])=>s.required).map(([s,r])=>`${s}=${r.type.includes("number")||r.type==="boolean"?"{${}}":'"${}"'}`).join(" "),i=t?` ${t}`:"";return e.children?`<${n}${i}> + \${} +`:`<${n}${i} />`}const ah=Object.entries($e.components).map(([n,e])=>({label:n,type:"class",detail:`ScriptWidget · ${Object.keys(e.properties??{}).length} properties`,info:e.documentation,apply:SS(n,e)}));function xS(n){const e=n.match(/<([A-Za-z][\w]*)\b([^<>]*)$/);return!e||e[2].includes(">")?null:{name:e[1],attributes:e[2]}}function vS(n,e){const t=$e.components[n];return t?Object.entries({...$e.globalProperties,...t.properties??{}}).filter(([i])=>!e.has(i)).map(([i,s])=>({label:i,type:"property",detail:s.required?`${s.type} · required`:s.type,info:s.deprecated?`Deprecated: ${s.deprecated}`:s.documentation,apply:`${i}=${s.type.includes("number")||s.type==="boolean"?"{${}}":'"${}"'}`})):[]}function wS(n){const e=n.match(/<([A-Za-z][\w]*)\b[^<>]*\b([A-Za-z][\w]*)\s*=\s*["']([^"']*)$/);if(!e)return null;const t=$e.components[e[1]]?.properties?.[e[2]]??$e.globalProperties[e[2]];return t?.values?{typed:e[3],values:t.values}:null}function kS(n){const e=n.state.doc.sliceString(Math.max(0,n.pos-1200),n.pos),t=wS(e);if(t)return{from:n.pos-t.typed.length,options:t.values.map(o=>({label:o,type:"enum"})),validFor:/^[\w-]*$/};const i=n.matchBefore(/<[A-Za-z]*$/);if(i)return{from:i.from+1,options:ah,validFor:/^[A-Za-z]*$/};const s=xS(e);if(s&&/(?:\s|^)\w*$/.test(s.attributes)){const o=n.matchBefore(/[A-Za-z][\w]*$/),a=new Set([...s.attributes.matchAll(/\b([A-Za-z][\w]*)\s*=/g)].map(l=>l[1]));return{from:o?.from??n.pos,options:vS(s.name,a),validFor:/^[A-Za-z][\w]*$/}}const r=n.matchBefore(/\$[A-Za-z]+\.[A-Za-z]*$/);if(r){const o=r.text.slice(0,r.text.indexOf(".")+1),a=Object.entries($e.functions).filter(([l])=>l.startsWith(o));return a.length?{from:r.from+o.length,options:a.map(([l,c])=>({label:l.slice(o.length),type:"function",detail:c.returns,info:c.documentation})),validFor:/^[A-Za-z]*$/}:null}return n.explicit?{from:n.pos,options:ah,validFor:/^[A-Za-z]*$/}:null}function lh(n,e){const t=[];for(let i=n.node.firstChild;i;i=i.nextSibling)i.name===e&&t.push(i);return t}function Md(n){const e=[];return Ce(n).iterate({enter(t){if(t.name!=="JSXOpenTag"&&t.name!=="JSXSelfClosingTag")return;const s=lh(t,"JSXIdentifier")[0];s&&e.push({name:n.doc.sliceString(s.from,s.to),from:s.from,to:s.to,attributes:lh(t,"JSXAttribute").map(r=>{const o=r.firstChild;return o?{name:n.doc.sliceString(o.from,o.to),from:o.from,to:o.to}:null}).filter(Boolean)})}}),e}function Ed(n){const e=[];for(const t of Md(n.state)){const i=$e.components[t.name];if(!i)continue;const s=new Set([...Object.keys($e.globalProperties),...Object.keys(i.properties??{})]),r=new Set(t.attributes.map(o=>o.name));for(const o of t.attributes){s.has(o.name)||e.push({from:o.from,to:o.to,severity:"warning",message:`“${o.name}” is not supported by <${t.name}>.`});const a=i.properties?.[o.name]??$e.globalProperties[o.name];a?.deprecated&&e.push({from:o.from,to:o.to,severity:"warning",message:`${o.name} is deprecated. ${a.deprecated}`})}for(const[o,a]of Object.entries(i.properties??{}))if(a.required&&!r.has(o)&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires the “${o}” property.`}),r.has(o)){for(const l of a.requires??[])r.has(l)||e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> “${o}” requires the “${l}” property.`});for(const l of a.conflicts??[])r.has(l)&&o cannot combine “${o}” with “${l}”.`})}i.requiredAny?.length&&!i.requiredAny.some(o=>r.has(o))&&e.push({from:t.from,to:t.to,severity:"error",message:`<${t.name}> requires one of: ${i.requiredAny.map(o=>`“${o}”`).join(", ")}.`})}return e}function QS(n,e){const t=Md(n.state).find(s=>e>=s.from&&e<=s.to);if(!t)return null;const i=$e.components[t.name];return i?{pos:t.from,end:t.to,above:!0,create(){const s=document.createElement("div");s.className="studio-hover";const r=document.createElement("strong");r.textContent=`<${t.name}>`;const o=document.createElement("p");return o.textContent=i.documentation,s.append(r,o),{dom:s}}}:null}const ch={light:{background:"#FAFAFC",foreground:"#202124",gutter:"#F3F3F6",gutterText:"#8A8A93",activeLine:"#EDEEF3",selection:"#B9D7FF",caret:"#0067C0"},dark:{background:"#1E1F22",foreground:"#E8E8ED",gutter:"#191A1D",gutterText:"#777982",activeLine:"#292A2F",selection:"#315A85",caret:"#65B7FF"}};function PS(n,e){return $.theme({"&":{height:"100%",color:n.foreground,backgroundColor:n.background,fontSize:"13px"},".cm-scroller":{fontFamily:'ui-monospace, "SFMono-Regular", Menlo, Monaco, Consolas, monospace',lineHeight:"1.58",overscrollBehavior:"contain"},".cm-content":{caretColor:n.caret,padding:"12px 0 32px"},".cm-line":{padding:"0 8px"},".cm-cursor, .cm-dropCursor":{borderLeftColor:n.caret},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:n.selection},".cm-activeLine":{backgroundColor:n.activeLine},".cm-gutters":{backgroundColor:n.gutter,color:n.gutterText,border:"none",paddingLeft:"env(safe-area-inset-left)"},".cm-activeLineGutter":{backgroundColor:n.activeLine,color:n.foreground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:`1px solid ${n.gutterText}`,color:n.gutterText},".cm-tooltip":{border:e?"1px solid #41434A":"1px solid #D2D3D8",backgroundColor:e?"#292A2F":"#FFFFFF",borderRadius:"8px",overflow:"hidden",boxShadow:"0 8px 28px rgba(0, 0, 0, 0.2)"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:e?"#315A85":"#DCEBFA",color:n.foreground},".cm-panels":{backgroundColor:n.gutter,color:n.foreground},".cm-searchMatch":{backgroundColor:e?"#725C1D":"#FFE69A"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:e?"#8D6D20":"#FFD45C"}},{dark:e})}const CS=Xn.define([{tag:[O.keyword,O.controlKeyword,O.moduleKeyword,O.operatorKeyword,O.bool,O.null],color:"#FF7AB2"},{tag:[O.string,O.special(O.string)],color:"#FF8170"},{tag:[O.number,O.regexp],color:"#D9C97C"},{tag:[O.comment,O.lineComment,O.blockComment],color:"#7F8C98",fontStyle:"italic"},{tag:[O.tagName,O.typeName,O.className],color:"#5DD8FF"},{tag:O.attributeName,color:"#B281EB"},{tag:[O.propertyName,O.function(O.variableName),O.function(O.propertyName)],color:"#67B7A4"},{tag:O.definition(O.variableName),color:"#4EB0CC"},{tag:[O.variableName,O.operator,O.punctuation,O.bracket],color:"#E8E8ED"},{tag:O.invalid,color:"#FF453A"}]);function Ud(n){const e=n==="dark";return[PS(e?ch.dark:ch.light,e),JO(e?CS:i0)]}const TS=Xt.parser.configure({dialect:"jsx"}),RS=new Map(Object.keys($e.components).map(n=>[n.toLowerCase(),n])),$S=new Set(["VStack","HStack","ZStack","VGrid","HGrid"]),KS=512*1024,ZS=512,MS=32,ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},hi=(n,e)=>n.slice(e.from,e.to),de=n=>{throw new Error(n)},Fd=n=>{let e=!0;const t=n.replace(/&([^;\s]+);/g,(i,s)=>{const r={amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "};if(Object.hasOwn(r,s))return r[s];if(/^#(?:[0-9]+|x[0-9a-f]+)$/i.test(s)){const o=s[1].toLowerCase()==="x"?parseInt(s.slice(2),16):Number(s.slice(1));if(o>0&&o<=1114111&&!(o>=55296&&o<=57343))return String.fromCodePoint(o)}return e=!1,i});return e?t:void 0};function co(n,e=!1){if(e)return Fd(n.slice(1,-1));const t=n.trim();if(/^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(t)){const i=Number(t);return Number.isFinite(i)?i:void 0}if(t==="true"||t==="false")return t==="true";if(t.startsWith('"'))try{const i=JSON.parse(t);return typeof i=="string"?i:void 0}catch{}}function vi(n){const e={formatVersion:1,source:n,nodes:[],roots:[],issue:""};if(typeof n!="string"||new TextEncoder().encode(n).length>KS)return{...e,issue:"Layout editing supports source files up to 512 KiB."};const t=TS.parse(n);let i=!1;if(t.iterate({enter:r=>{r.type.isError&&(i=!0)}}),i)return{...e,issue:"Fix the JavaScript/JSX syntax before using Layout. Your source is preserved."};function s(r,o,a){(a>MS||e.nodes.length>=ZS)&&de("Layout editing supports up to 512 layers and 32 nesting levels.");const l=ci(r),c=l[0],h=l.at(-1),u=ci(c).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)),f=u?hi(n,u):"Fragment",d=RS.get(f.toLowerCase()),p=$e.components[d],m={...$e.globalProperties,...p?.properties??{}},g=c.name==="JSXOpenTag"&&h?.name==="JSXCloseTag",y=g?ci(h).find(S=>["JSXBuiltin","JSXIdentifier","JSXNamespacedName","JSXMemberExpression"].includes(S.name)):null;u&&g&&(!y||hi(n,y)!==f)&&de("Opening and closing JSX tags must match before using Layout.");const b={id:String(r.from),parentID:o,tag:f,component:d??null,from:r.from,to:r.to,openingEnd:c.to,insertAt:c.to-(g?1:2),contentFrom:c.to,contentTo:g?h.from:c.to,children:[],properties:[],locked:!p,structure:!1,text:null,textEditable:!1,depth:a};let x=!1;for(const S of ci(c)){if(S.name==="JSXSpreadAttribute"&&(x=!0),S.name!=="JSXAttribute")continue;const w=ci(S),U=hi(n,w[0]),F=w[2],V=F?co(hi(n,F),F.name==="JSXAttributeValue"):!0,E=F?.name==="JSXEscape"?co(n.slice(F.from+1,F.to-1)):V,M=Object.hasOwn(m,U)?m[U]:null;b.properties.push({name:U,value:E??null,from:S.from,to:S.to,editable:!!(p&&M&&M.type!=="function"&&E!==void 0),definition:M??null})}const C=new Set(b.properties.map(S=>S.name)).size!==b.properties.length;b.locked||=x||C,b.reason=x?"Spread properties are preserved; edit this element in Code.":C?"Duplicate properties are preserved; resolve them in Code.":p?"":"Custom components and fragments are preserved; edit them in Code.",b.locked&&b.properties.forEach(S=>{S.editable=!1}),e.nodes.push(b);const k=g?l.slice(1,-1):[];for(const S of k)S.name==="JSXElement"&&b.children.push(s(S,b.id,a+1).id);if(b.structure=!b.locked&&g&&$S.has(d)&&k.every(S=>S.name==="JSXElement"||S.name==="JSXText"&&!hi(n,S).trim())&&b.children.every(S=>!e.nodes.find(w=>w.id===S).locked),!b.locked&&d==="Text"&&g&&k.length===1){const S=k[0],w=hi(n,S),U=S.name==="JSXText"&&!/[\r\n]/.test(w)?Fd(w):S.name==="JSXEscape"?co(w.slice(1,-1)):void 0;typeof U=="string"&&(b.text=U,b.textEditable=!0)}return b}try{t.iterate({enter(r){if(r.name!=="CallExpression")return;const o=ci(r.node);if(o[0]?.name!=="VariableName"||hi(n,o[0])!=="$render"||o[1]?.name!=="ArgList")return;const a=ci(o[1]).filter(l=>!["(",")"].includes(l.name));if(a.length===1&&a[0].name==="JSXElement")return e.roots.push(s(a[0],null,0).id),!1}})}catch(r){return{...e,nodes:[],roots:[],issue:r.message}}return e.roots.length||(e.issue="Layout needs a direct $render(…) or another native JSX element. Variables, loops and functions stay editable in Code."),e}function ha(n){return!n?.component||n.locked?{}:{...$e.globalProperties,...$e.components[n.component]?.properties??{}}}function ES(n,e,t){(n.source!==e||n.issue)&&de("Layout changed. Select the layer again before editing.");const i=n.nodes.find(l=>l.id===t.id);(!i||i.locked)&&de("This layer is locked. Edit its source in Code.");let s=[],r=i.from;if(t.type==="property"){const l=ha(i),c=Object.hasOwn(l,t.name)?l[t.name]:null,h=i.properties.find(d=>d.name===t.name);(!c||c.type==="function"||h&&!h.editable)&&de("Dynamic or unsupported properties must be edited in Code.");const u=new Set(i.properties.map(d=>d.name)),f=$e.components[i.component];if(t.remove?(f.requiredAny?.includes(t.name)&&!f.requiredAny.some(d=>d!==t.name&&u.has(d))&&de("Keep at least one required component property."),Object.entries(f.properties??{}).some(([d,p])=>u.has(d)&&p.requires?.includes(t.name))&&de("Another property requires this value. Edit the dependent properties together in Code.")):(c.requires?.some(d=>!u.has(d))&&de("Add the required related properties together in Code."),(c.conflicts?.some(d=>u.has(d))||Object.entries(f.properties??{}).some(([d,p])=>d!==t.name&&u.has(d)&&p.conflicts?.includes(t.name)))&&de("This property conflicts with another component property.")),t.remove)(!h||c.required)&&de("This property cannot be removed."),s=[{from:h.from,to:h.to,insert:""}];else{const d=t.value;(!["string","number","boolean"].includes(typeof d)||typeof d=="number"&&!Number.isFinite(d)||typeof d=="string"&&d.length>8192)&&de("Use a bounded string, finite number or Boolean."),c.values&&!c.values.includes(d)&&de("Choose one of the supported property values."),c.type==="boolean"&&typeof d!="boolean"&&de("This property needs true or false."),c.type==="number"&&!(typeof d=="number"||typeof d=="string"&&d.trim()&&Number.isFinite(Number(d)))&&de("This property needs a number."),typeof d=="boolean"&&c.type!=="boolean"&&de("This property does not accept a Boolean."),typeof d=="number"&&!c.type.includes("number")&&de("This property needs a string value."),t.name==="opacity"&&!(Number(d)>=0&&Number(d)<=1)&&de("Opacity must be between zero and one.");const p=`${t.name}={${JSON.stringify(d)}}`;s=h?[{from:h.from,to:h.to,insert:p}]:[{from:i.insertAt,to:i.insertAt,insert:` ${p}`}]}}else if(t.type==="text")(!i.textEditable||typeof t.value!="string"||t.value.length>8192)&&de("Dynamic text is preserved. Edit it in Code."),s=[{from:i.contentFrom,to:i.contentTo,insert:`{${JSON.stringify(t.value)}}`}];else if(t.type==="move"||t.type==="remove")if(n.nodes.find(c=>c.id===i.parentID)?.structure||de("Only literal children of a supported stack/grid can be moved or removed."),t.type==="remove")s=[{from:i.from,to:i.to,insert:""}];else{const c=n.nodes.find(p=>p.id===t.parentID);(!c?.structure||c.from>=i.from&&c.to<=i.to)&&de("Choose a supported container outside this layer.");const h=p=>{for(;p.parentID!==null;)p=n.nodes.find(m=>m.id===p.parentID);return p.id};h(i)!==h(c)&&de("Layers cannot move between render branches or JavaScript scopes.");const u=c.children.filter(p=>p!==i.id),f=t.index;(!Number.isInteger(f)||f<0||f>u.length)&&de("Invalid layer position.");const d=f===u.length?c.contentTo:n.nodes.find(p=>p.id===u[f]).from;if(d===i.from||d===i.to)return{changes:[],selectedFrom:r};s=[{from:i.from,to:i.to,insert:""},{from:d,to:d,insert:e.slice(i.from,i.to)}],r=d-(d>i.to?i.to-i.from:0)}else if(t.type==="add"){i.structure||de("Choose a supported container with literal JSX children.");const l={text:'New text',spacer:"",stack:'',icon:''};Object.hasOwn(l,t.kind)||de("Unsupported new layer."),s=[{from:i.contentTo,to:i.contentTo,insert:l[t.kind]}],r=i.contentTo}else de("Unsupported layout operation.");s.sort((l,c)=>l.from-c.from);let o=e;for(const l of[...s].reverse())o=o.slice(0,l.from)+l.insert+o.slice(l.to);return vi(o).issue&&de("This edit would leave the supported layout. Your source was not changed."),{changes:s,selectedFrom:r}}const Dd=Xt.parser.configure({dialect:"jsx"}),Ci=n=>{const e=[];for(let t=n.firstChild;t;t=t.nextSibling)e.push(t);return e},Qe=n=>{throw new Error(n)},Hi=Object.freeze({background:{type:"color"},surface:{type:"color"},foreground:{type:"color"},muted:{type:"color"},accent:{type:"color"},titleFont:{values:$e.globalProperties.font.values},bodyFont:{values:$e.globalProperties.font.values},fontDesign:{values:$e.globalProperties.fontDesign.values},corner:{type:"number",maximum:48},padding:{type:"number",maximum:48},spacing:{type:"number",maximum:32}}),ms={titleFont:"headline",bodyFont:"caption",fontDesign:"rounded",corner:20,padding:16,spacing:10},sr=Object.freeze({Meadow:Object.freeze({...ms,background:"#F2FAF5",surface:"#FFFFFF",foreground:"#193F31",muted:"#607C70",accent:"#328963"}),Paper:Object.freeze({...ms,background:"#F4F7FD",surface:"#FFFFFF",foreground:"#243454",muted:"#687795",accent:"#4777D6"}),Peach:Object.freeze({...ms,background:"#FFF5EE",surface:"#FFFFFF",foreground:"#56392C",muted:"#967461",accent:"#C86B43"}),Midnight:Object.freeze({...ms,background:"#192332",surface:"#283548",foreground:"#F1F5FC",muted:"#AABAD0",accent:"#8EB7FF"})});function Ld(n,e){Object.hasOwn(Hi,n)||Qe("Unknown theme token.");const t=Hi[n];t.type==="color"&&!(typeof e=="string"&&/^#[0-9a-f]{6}(?:[0-9a-f]{2})?$/i.test(e))&&Qe(`${n} needs a six or eight digit hex color.`),t.values&&!t.values.includes(e)&&Qe(`${n} needs a supported font value.`),t.type==="number"&&!(typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=t.maximum)&&Qe(`${n} needs a number from zero to ${t.maximum}.`)}function el(n){(!n||typeof n!="object"||Array.isArray(n)||Object.keys(n).length!==Object.keys(Hi).length)&&Qe("A theme needs exactly the documented tokens.");for(const e of Object.keys(n))Ld(e,n[e]);return n}function Xd(n){(typeof n!="string"||new TextEncoder().encode(n).length>4096)&&Qe("Theme JSON is limited to 4 KiB.");const e=JSON.parse(n);return(!e||Array.isArray(e)||Object.keys(e).sort().join()!=="formatVersion,name,tokens"||e.formatVersion!==1||typeof e.name!="string"||!e.name.trim()||/[\u0000-\u001f]/.test(e.name)||new TextEncoder().encode(e.name).length>64)&&Qe("Use a version 1 theme with a name of at most 64 bytes."),el(e.tokens),e}function US(n,e="My theme"){const t=JSON.stringify({formatVersion:1,name:e,tokens:n},null,2);return Xd(t),t}function rr(n){const e={source:n,tokens:null,ranges:{},issue:"",canInitialize:!1};try{(typeof n!="string"||new TextEncoder().encode(n).length>512*1024)&&Qe("Theme editing supports files up to 512 KiB.");const t=Dd.parse(n),i=[],s=[];if(t.iterate({enter(l){l.type.isError&&Qe("Fix JavaScript syntax before editing the theme."),["VariableDefinition","VariableName"].includes(l.name)&&n.slice(l.from,l.to).includes("\\")&&Qe("Escaped identifiers stay in Code."),n.slice(l.from,l.to)==="widgetTheme"&&["VariableDefinition","VariableName"].includes(l.name)&&(l.name==="VariableDefinition"?i:s).push(l.node)}}),!i.length&&!s.length){const l=vi(n);e.canInitialize=!l.issue&&l.roots.length===1&&!l.nodes[0].locked;let c=!1;for(const h of Ci(t.topNode)){const u=h.firstChild;l.nodes[0]&&h.name==="ExpressionStatement"&&u?.name==="CallExpression"&&n.slice(u.firstChild.from,u.firstChild.to)==="$render"&&u.froml.nodes[0].to&&(c=!0)}return e.canInitialize&&=c,e}i.length!==1&&Qe("Keep one top-level const widgetTheme object. Other bindings stay in Code.");const r=i[0].parent,o=Ci(r);(r.name!=="VariableDeclaration"||r.parent?.name!=="Script"||o[0]?.name!=="const"||o[1]?.from!==i[0].from||o[2]?.name!=="Equals"||o[3]?.name!=="ObjectExpression"||o.slice(4).some(l=>l.name!==";"))&&Qe("Theme editing needs a single top-level const widgetTheme = { … } declaration.");const a={};for(const l of Ci(o[3])){if(["{","}",","].includes(l.name))continue;const c=Ci(l),h=c[0]?n.slice(c[0].from,c[0].to):"",u=c[0]?.name==="String"&&h.startsWith('"')?JSON.parse(h):h;(l.name!=="Property"||c.length!==3||!["PropertyDefinition","String"].includes(c[0].name)||c[1].name!==":"||!["String","Number"].includes(c[2].name)||Object.hasOwn(a,u))&&Qe("Theme tokens must be unique literal properties. Computed or dynamic values stay in Code.");let f;try{f=JSON.parse(n.slice(c[2].from,c[2].to))}catch{Qe("Theme values use JSON strings or numbers. Edit this declaration in Code.")}Ld(u,f),a[u]=f,e.ranges[u]={from:c[2].from,to:c[2].to}}el(a);for(const l of s){const c=l.parent,h=Ci(c),u=h[2]?n.slice(h[2].from,h[2].to):"";(c.name!=="MemberExpression"||h[0].from!==l.from||h[1]?.name!=="."||h[2]?.name!=="PropertyName"||!Object.hasOwn(Hi,u))&&Qe("Theme references must read widgetTheme.token. Other uses stay in Code."),c.parent?.name==="MemberExpression"&&Qe("Mutable theme references stay in Code.");for(let f=c.parent;f;f=f.parent)(["UpdateExpression","PostfixExpression"].includes(f.name)||f.name==="UnaryExpression"&&/^(?:delete|\+\+|--)/.test(n.slice(f.from,c.from).trim())||f.name==="AssignmentExpression"&&f.firstChild.from<=c.from&&f.firstChild.to>=c.to||f.name==="ForOfSpec"||f.name==="ForInSpec")&&Qe("Mutable theme references stay in Code.")}e.tokens=a}catch(t){e.issue=t.message}return e}function ho(n,e,t){return(n.source!==e||n.issue||!n.tokens)&&Qe("Theme changed or is unsupported. Reopen Theme before editing."),el(t),{changes:Object.keys(Hi).filter(s=>t[s]!==n.tokens[s]).map(s=>({...n.ranges[s],insert:JSON.stringify(t[s])})).sort((s,r)=>s.from-r.from)}}function FS(n,e="Meadow"){(!rr(n).canInitialize||!Object.hasOwn(sr,e))&&Qe("Start with a literal top-level layout without an existing widgetTheme binding.");const i=vi(n),s=i.nodes[0],r=[];function o(c,h,u,f=!1){const d=c.properties.find(m=>m.name===h);if(c.locked||d&&!d.editable||!d&&!f)return;const p=`${h}={widgetTheme.${u}}`;r.push(d?{from:d.from,to:d.to,insert:p}:{from:c.insertAt,to:c.insertAt,insert:` ${p}`})}for(const c of["background","corner","padding"])o(s,c,c,!0);s.structure&&o(s,"spacing","spacing",!0);for(const c of i.nodes)if(c.component==="Text"){const h=c.properties.find(f=>f.name==="font")?.value,u=["headline","largeTitle","title","title2","title3"].includes(h);o(c,"font",u?"titleFont":"bodyFont",!0),o(c,"color",u?"foreground":"muted",!0),o(c,"fontDesign","fontDesign",!0)}else c.component==="Icon"&&o(c,"color","accent",!0);let a=0;for(const c of Ci(Dd.parse(n).topNode))if(!(c.name==="LineComment"||c.name==="BlockComment"))if(c.name==="ExpressionStatement"&&c.firstChild?.name==="String")a=c.to;else break;r.push({from:a,to:a,insert:` +const widgetTheme = ${JSON.stringify(sr[e],null,2)}; +`}),r.sort((c,h)=>c.from-h.from);let l=n;for(const c of[...r].reverse())l=l.slice(0,c.from)+c.insert+l.slice(c.to);return(!rr(l).tokens||vi(l).issue)&&Qe("This layout cannot be themed automatically. Your source was preserved."),{changes:r}}function Bd(n){if(!Array.isArray(n)||n.length>4096)return[];const e=new Map,t=new Set;for(const i of n){if(typeof i!="string"||new TextEncoder().encode(i).length>1024||/[\\\u0000-\u001f\u007f-\u009f]/.test(i))continue;const s=i.split("/");if(s.length!==2||s[0]!=="image"||!s[1]||new TextEncoder().encode(s[1]).length>255||s[1]!==s[1].trim()||s[1].includes("..")||!/\.(png|jpe?g|webp)$/i.test(s[1]))continue;const r=i.normalize("NFC").toLowerCase();e.has(r)&&e.get(r)!==i&&t.add(r),e.set(r,i)}return[...e].filter(([i])=>!t.has(i)).map(([,i])=>i).sort().slice(0,256)}const tl=z.define(),or=Te.define({create:()=>[],update(n,e){for(const t of e.effects)t.is(tl)&&(n=Bd(t.value));return n}});function il(n,e){n.state.field(or,!1)!==void 0&&n.dispatch({effects:tl.of(e)})}const Id=Object.freeze({bloom:Object.freeze({name:"Bloom mark",description:"A small four-petal flower",kind:"icon"}),leaf:Object.freeze({name:"Leaf mark",description:"A tilted leaf and stem",kind:"icon"}),pebble:Object.freeze({name:"Pebble friend",description:"A quiet, round-eared companion",kind:"pet"})}),uo=`/* +ScriptWidget original geometric assets 1: Bloom mark, Leaf mark, Pebble friend. +Source: https://github.com/everettjf/scriptwidget (Editor/editorfe/src/visualAssets.js) +SPDX-License-Identifier: MIT +Copyright (c) 2021-2022 everettjf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ +`;function DS(n,e){const t=i=>e?`{widgetTheme.${i}}`:JSON.stringify(sr.Meadow[i]);if(n==="bloom")return``;if(n==="leaf")return``;if(n==="pebble")return``;throw new Error("Choose an original asset from the catalog.")}function LS(n,e,{id:t,kind:i,path:s},r=[]){if(n.source!==e||n.issue)throw new Error("Layout changed. Select the container again.");const o=n.nodes.find(f=>f.id===t);if(!o?.structure)throw new Error("Select a stack/grid with literal JSX children in Layout or Assets.");let a;if(i==="photo"){if(!Bd(r).includes(s))throw new Error("This image is no longer in the package resource list. Refresh images.");a=``}else{if(!Object.hasOwn(Id,i))throw new Error("Choose an original asset from the catalog.");a=DS(i,!!rr(e).tokens)}const l=[{from:o.contentTo,to:o.contentTo,insert:a}];let c=o.contentTo;if(i!=="photo"&&!e.includes(uo)){const f=e.startsWith("#!")?e.indexOf(` +`)+1:0;l.push({from:f,to:f,insert:uo}),c+=uo.length}l.sort((f,d)=>f.from-d.from);let h=e;for(const f of[...l].reverse())h=h.slice(0,f.from)+f.insert+h.slice(f.to);if(vi(h).issue)throw new Error("This asset would exceed the supported layout limits. Your source was preserved.");return{changes:l,selectedFrom:c}}const XS=n=>["string","number","number|string","date|number","boolean","enum","color","url","action-id","storage-key"].includes(n.type);function X(n,e,t){const i=document.createElement(n);return e&&(i.className=e),t!==void 0&&(i.textContent=t),i}function BS(n,e){const t=X("section","sw-layout"),i=X("div","sw-layout-header"),s=X("div","sw-layout-body");t.setAttribute("aria-label","Visual layout editor");let r=!1,o="layout",a=null,l=null,c="",h=null,u=!1,f=0;const d=String(Math.random()),p=(Q,D)=>P=>{if(u||!t.contains(Q)){P.preventDefault();return}return D(P)},m=(Q,D,P)=>Q.addEventListener(D,p(Q,P)),g=(Q,D,P=!1)=>{const j=X("button","sw-layout-button",Q);return j.type="button",j.disabled=P,m(j,"click",D),j},y=g("Layout",()=>{r=o==="layout"?!r:!0,o="layout",Y(),n.requestMeasure()});y.classList.add("sw-layout-toggle"),y.setAttribute("aria-expanded","false");const b=X("span","sw-layout-hint","Select layers and edit literal JSX"),x=g("Undo",()=>La(n)),C=g("Redo",()=>zs(n)),k=g("Theme",()=>{r=o==="theme"?!r:!0,o="theme",Y(),n.requestMeasure()});k.setAttribute("aria-expanded","false");const S=g("Assets",()=>{r=o==="assets"?!r:!0,o="assets",Y(),n.requestMeasure()});S.setAttribute("aria-expanded","false"),i.append(y,k,S,b,x,C),t.append(i,s),s.hidden=x.hidden=C.hidden=!0;const w=X("p","sw-layout-error");w.setAttribute("role","alert"),w.hidden=!0,t.append(w);function U(){a=vi(n.state.doc.toString());const Q=X("div","sw-layout-inspector sw-theme-inspector");if(s.replaceChildren(Q),Q.append(X("div","sw-layout-title","Widget assets")),Q.append(X("p","sw-layout-notice","Insert editable original JSX or a package image. Originals follow connected theme colors; pet artwork is static. Import photos with the app's existing image tools or Web Studio's Add image.")),a.issue){Q.append(X("p","sw-layout-notice",a.issue));return}const D=a.nodes.filter(I=>I.structure),P=X("select");P.setAttribute("aria-label","Asset destination");for(const I of D){const H=X("option","",`${I.tag} · line ${n.state.doc.lineAt(I.from).number}`);H.value=I.id,P.append(H)}D.some(I=>I.id===l)?P.value=l:l=P.value,m(P,"change",()=>{l=P.value}),Q.append(P);const j=n.state.readOnly||!D.length;D.length||Q.append(X("p","sw-layout-notice","Add a stack/grid with literal JSX children in Code to insert assets."));function ae(I,H){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const ce=LS(a,n.state.doc.toString(),{id:P.value,kind:I,path:H},n.state.field(or));l=P.value,w.hidden=!0,n.dispatch({changes:ce.changes,selection:{anchor:ce.selectedFrom},annotations:ws.of("full"),userEvent:"input.asset",scrollIntoView:!0})}catch(ce){w.textContent=ce.message,w.hidden=!1}}for(const[I,H]of Object.entries(Id)){const ce=X("div","sw-layout-actions");ce.append(g(`Insert ${H.name}`,()=>ae(I),j),X("span","",H.description)),Q.append(ce)}Q.append(X("div","sw-layout-title","Package images"));const J=n.state.field(or),ee=X("select");ee.setAttribute("aria-label","Package image");for(const I of J){const H=X("option","",I);H.value=I,ee.append(H)}ee.disabled=!J.length,Q.append(ee,g("Insert package image",()=>ae("photo",ee.value),j||!J.length)),J.length||Q.append(X("p","sw-layout-notice","No supported images in image/. Add a PNG, JPEG or WebP to the package, then refresh or reopen the editor.")),e.refreshResources&&Q.append(g("Refresh images",async()=>{const I=++f,H=n.state.doc,ce=()=>!u&&I===f&&n.state.doc===H;try{const q=await e.refreshResources();ce()&&(w.hidden=!0,il(n,q))}catch{ce()&&(w.textContent="Images could not be refreshed. Reopen this document and try again.",w.hidden=!1)}})),Q.append(X("p","sw-layout-notice","Bloom mark, Leaf mark and Pebble friend: original ScriptWidget geometry, MIT licensed. Package photos retain their own rights. See the Studio assets documentation."))}function F(Q,D){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");const P=n.state.doc.toString();if(P!==D)throw new Error("Source changed. Reopen Theme before editing.");const j=Q(P);w.hidden=!0,j.changes.length&&n.dispatch({changes:j.changes,annotations:ws.of("full"),userEvent:"input.theme"})}catch(P){w.textContent=P.message,w.hidden=!1}}function V(){const Q=n.state.doc.toString(),D=rr(Q),P=n.state.readOnly,j=X("div","sw-layout-inspector sw-theme-inspector");if(s.replaceChildren(j),j.append(X("div","sw-layout-title","Widget theme")),j.append(X("p","sw-layout-notice","Saved as ordinary JavaScript with your widget. Dynamic values stay in Code. Applying a theme changes the connected colors, fonts and spacing.")),D.issue){j.append(X("p","sw-layout-notice",D.issue));return}if(!D.tokens){j.append(g("Connect layout to Meadow theme",()=>F(ee=>FS(ee),Q),P||!D.canInitialize)),D.canInitialize||j.append(X("p","sw-layout-notice","Use a literal top-level $render layout, or define the documented widgetTheme object in Code."));return}const ae=X("div","sw-layout-actions");for(const[ee,I]of Object.entries(sr))ae.append(g(ee,()=>F(H=>ho(D,H,I),Q),P));j.append(ae);for(const[ee,I]of Object.entries(Hi)){const H=X("form","sw-layout-form"),ce=X("label","",ee),q=X(I.values?"select":"input");if(I.values)for(const re of I.values){const Me=X("option","",re);Me.value=re,q.append(Me)}I.type==="number"&&(q.type="number",q.min="0",q.max=String(I.maximum),q.step="any"),q.value=String(D.tokens[ee]),q.setAttribute("aria-label",`Theme ${ee}`),q.disabled=P;const te=g(`Apply ${ee}`,()=>{},P);te.type="submit",H.append(ce,q,te),m(H,"submit",re=>{re.preventDefault();const Me=I.type==="number"?q.value.trim()?Number(q.value):NaN:q.value;F(Oe=>ho(D,Oe,{...D.tokens,[ee]:Me}),Q)}),j.append(H)}const J=X("textarea");J.rows=5,J.setAttribute("aria-label","Reusable theme JSON"),J.value=US(D.tokens),j.append(X("label","","Copy this JSON to reuse a theme, or paste a version 1 theme and import it."),J,g("Import theme JSON",()=>F(ee=>ho(D,ee,Xd(J.value).tokens),Q),P))}function E(Q,D=a?.source){if(!u)try{if(n.state.readOnly)throw new Error("This document is read only.");if(D!==n.state.doc.toString())throw new Error("Source changed during this operation. Select the layer again.");const P=ES(a,n.state.doc.toString(),Q);if(w.hidden=!0,!P.changes.length)return;n.dispatch({changes:P.changes,selection:{anchor:P.selectedFrom},annotations:ws.of("full"),userEvent:"input.layout",scrollIntoView:!0})}catch(P){w.textContent=P.message,w.hidden=!1}}function M(Q){u||(l=Q.id,c="",n.dispatch({selection:{anchor:Q.from,head:Q.to},scrollIntoView:!0,userEvent:"select.layout"}),Y())}function Y(){if(y.setAttribute("aria-expanded",String(r&&o==="layout")),k.setAttribute("aria-expanded",String(r&&o==="theme")),S.setAttribute("aria-expanded",String(r&&o==="assets")),s.hidden=!r,x.hidden=C.hidden=!r,b.hidden=r,x.disabled=n.state.readOnly||vc(n.state)===0,C.disabled=n.state.readOnly||wc(n.state)===0,!r)return;if(o==="assets"){U();return}if(o==="theme"){V();return}if(a=vi(n.state.doc.toString()),s.replaceChildren(),a.issue){s.append(X("p","sw-layout-notice",a.issue));return}const Q=n.state.selection.main.from,D=a.nodes.filter(q=>q.from<=Q&&Qq.id===l&&q.from<=Q&&Q<=q.to)??D??a.nodes[0];l=P.id;const j=X("div","sw-layout-layers");j.setAttribute("role","tree"),j.setAttribute("aria-label","Layout layers");const ae=n.state.readOnly,J=q=>{const te=q.text??q.properties.find(re=>re.name==="text"&&re.editable&&typeof re.value=="string")?.value;return`<${q.tag}>${te?` · ${te.slice(0,32)}`:""}${q.locked?" · locked":""}`};for(const[q,te]of a.nodes.entries()){const re=a.nodes.find(ie=>ie.id===te.parentID),Me=!ae&&!te.locked&&re?.structure,Oe=g(J(te),()=>M(te));Oe.classList.add("sw-layout-layer"),Oe.dataset.layerId=te.id,Oe.style.paddingInlineStart=`${8+te.depth*14}px`,Oe.setAttribute("role","treeitem"),Oe.setAttribute("aria-level",String(te.depth+1)),Oe.setAttribute("aria-selected",String(te.id===P.id)),Oe.tabIndex=te.id===P.id?0:-1,Oe.draggable=!!Me,m(Oe,"keydown",ie=>{let ve;ie.key==="ArrowUp"&&(ve=a.nodes[Math.max(0,q-1)]),ie.key==="ArrowDown"&&(ve=a.nodes[Math.min(a.nodes.length-1,q+1)]),ie.key==="ArrowLeft"&&(ve=re),ie.key==="ArrowRight"&&(ve=a.nodes.find(Ie=>Ie.id===te.children[0])),ie.key==="Home"&&(ve=a.nodes[0]),ie.key==="End"&&(ve=a.nodes.at(-1)),ve&&(ie.preventDefault(),ie.stopPropagation(),M(ve),ee().find(Ie=>Ie.dataset.layerId===ve.id)?.focus())}),m(Oe,"dragstart",ie=>{if(!Me){ie.preventDefault();return}h={id:te.id,source:a.source},ie.dataTransfer.setData("application/x-scriptwidget-layer",d),ie.dataTransfer.effectAllowed="move"}),m(Oe,"dragover",ie=>{h&&re?.structure&&te.id!==h.id&&(ie.preventDefault(),ie.dataTransfer.dropEffect="move")}),m(Oe,"drop",ie=>{if(!h||ie.dataTransfer.getData("application/x-scriptwidget-layer")!==d||!re?.structure)return;ie.preventDefault();const ve=h;h=null,E({type:"move",id:ve.id,parentID:re.id,index:re.children.filter(Ie=>Ie!==ve.id).indexOf(te.id)},ve.source)}),m(Oe,"dragend",()=>{h=null}),j.append(Oe)}function ee(){return[...t.querySelectorAll(".sw-layout-layer")]}const I=X("div","sw-layout-inspector"),H=X("div","sw-layout-title",`<${P.tag}>`);if(I.append(H),(ae||P.locked)&&I.append(X("p","sw-layout-notice",ae?"This document is read only.":P.reason)),!ae&&!P.locked){let Oe=function(){c=re.value;const oe=ha(P)[c],Ae=P.properties.find(tt=>tt.name===c);if(Me.replaceChildren(),te.onsubmit=tt=>tt.preventDefault(),Ae&&!Ae.editable){Me.append(X("span","sw-layout-notice","Dynamic value: edit it in Code. Connected widgetTheme tokens can be changed in Theme."));return}const le=X(oe.values||oe.type==="boolean"?"select":"input");le.setAttribute("aria-label","Layout property value");for(const tt of oe.values??(oe.type==="boolean"?[!0,!1]:[])){const ai=X("option","",String(tt));ai.value=String(tt),le.append(ai)}le.value=Ae?String(Ae.value):oe.values?.[0]??(oe.type==="boolean"?"true":"");const qe=g("Apply",()=>{});qe.type="submit",Me.append(le,qe,g("Remove",()=>E({type:"property",id:P.id,name:c,remove:!0}),!Ae||oe.required)),te.onsubmit=p(te,tt=>{tt.preventDefault();const ai=oe.type==="boolean"?le.value==="true":oe.type==="number"?le.value.trim()?Number(le.value):NaN:le.value;E({type:"property",id:P.id,name:c,value:ai})})};if(P.textEditable){const oe=X("form","sw-layout-form"),Ae=X("label","","Text"),le=X("input");le.value=P.text,le.setAttribute("aria-label","Layer text");const qe=g("Apply text",()=>{});qe.type="submit",oe.append(Ae,le,qe),m(oe,"submit",tt=>{tt.preventDefault(),E({type:"text",id:P.id,value:le.value})}),I.append(oe)}const q=Object.entries(ha(P)).filter(([,oe])=>XS(oe)),te=X("form","sw-layout-form"),re=X("select");re.setAttribute("aria-label","Layout property");for(const[oe]of q){const Ae=X("option","",oe);Ae.value=oe,re.append(Ae)}q.some(([oe])=>oe===c)||(c=P.structure?"alignment":"color"),re.value=c,re.value||(re.selectedIndex=0,c=re.value);const Me=X("div","sw-layout-property");te.append(re,Me),m(re,"change",Oe),Oe(),I.append(te);const ie=a.nodes.find(oe=>oe.id===P.parentID),ve=ie?.children.indexOf(P.id)??-1,Ie=X("div","sw-layout-actions");if(Ie.append(g("Move up",()=>E({type:"move",id:P.id,parentID:ie.id,index:ve-1}),!ie?.structure||ve<=0),g("Move down",()=>E({type:"move",id:P.id,parentID:ie.id,index:ve+1}),!ie?.structure||ve>=ie.children.length-1),g("Delete layer",()=>E({type:"remove",id:P.id}),!ie?.structure)),I.append(Ie),ie?.structure){const oe=a.nodes.filter(le=>le.structure&&!(le.from>=P.from&&le.to<=P.to)),Ae=X("select");Ae.setAttribute("aria-label","Move layer into container");for(const le of oe){const qe=X("option","",`${le.tag} · line ${n.state.doc.lineAt(le.from).number}`);qe.value=le.id,Ae.append(qe)}I.append(Ae,g("Move inside",()=>{const le=a.nodes.find(qe=>qe.id===Ae.value);E({type:"move",id:P.id,parentID:le.id,index:le.children.filter(qe=>qe!==P.id).length})},!oe.length))}if(P.structure){const oe=X("div","sw-layout-actions");for(const[Ae,le]of[["text","Add text"],["stack","Add stack"],["spacer","Add spacer"],["icon","Add icon"]])oe.append(g(le,()=>E({type:"add",id:P.id,kind:Ae})));I.append(oe)}}const ce=P.properties.filter(q=>!q.editable).map(q=>q.name);ce.length&&I.append(X("p","sw-layout-notice",`Preserved in Code: ${ce.join(", ")}`)),!P.structure&&P.children.length&&I.append(X("p","sw-layout-notice","This child structure stays in Code. Reordering is available on literal stack/grid children.")),s.append(j,I)}return{dom:t,top:!0,update(Q){if(!r)return;const D=n.state.selection.main.from,P=a?.nodes.filter(ae=>ae.from<=D&&Dae.effects.some(J=>J.is(tl)));(Q.docChanged||j||Q.startState.readOnly!==n.state.readOnly||Q.selectionSet&&P!==l)&&(Q.docChanged&&o!=="assets"&&(l=null),Y()),x.disabled=n.state.readOnly||vc(n.state)===0,C.disabled=n.state.readOnly||wc(n.state)===0},destroy(){u=!0}}}const IS=$.baseTheme({".sw-layout":{fontFamily:"system-ui, sans-serif",fontSize:"12px",backgroundColor:"#f6f7fa",color:"#272a34",borderBottom:"1px solid #dce0e9"},"&dark .sw-layout":{backgroundColor:"#252830",color:"#eceef5",borderColor:"#414552"},".sw-layout-header":{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px",padding:"6px 10px"},".sw-layout-toggle":{fontWeight:"600"},".sw-layout-hint":{opacity:"0.65",fontSize:"11px"},".sw-layout-button":{fontFamily:"inherit",fontSize:"11px",color:"inherit",backgroundColor:"transparent",border:"1px solid #a0a5b655",borderRadius:"6px",padding:"4px 8px",cursor:"pointer",whiteSpace:"nowrap"},".sw-layout-button:disabled":{opacity:"0.4",cursor:"default"},".sw-layout-body":{display:"grid",gridTemplateColumns:"minmax(120px, 1fr) minmax(180px, 1.6fr)",maxHeight:"280px",overflow:"auto",borderTop:"1px solid #a0a5b633"},".sw-layout-body[hidden]":{display:"none"},".sw-layout-layers":{padding:"6px 2px",overflow:"auto",borderRight:"1px solid #a0a5b633"},".sw-layout-layer":{display:"block",border:0,borderRadius:"4px",width:"100%",textAlign:"left",overflow:"hidden",textOverflow:"ellipsis",margin:"1px 0",paddingBlock:"6px"},'.sw-layout-layer[aria-selected="true"]':{backgroundColor:"#4085f52b",color:"inherit"},".sw-layout-inspector":{padding:"8px 10px",display:"flex",alignItems:"start",flexDirection:"column",gap:"8px",minWidth:0},".sw-theme-inspector":{gridColumn:"1 / -1"},".sw-theme-inspector textarea":{boxSizing:"border-box",width:"100%",fontFamily:"monospace",backgroundColor:"transparent",color:"inherit",border:"1px solid #a0a5b666",borderRadius:"5px"},".sw-layout-title":{fontWeight:"600"},".sw-layout-form":{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"5px",width:"100%"},".sw-layout-property,.sw-layout-actions":{display:"flex",flexWrap:"wrap",gap:"5px",alignItems:"center"},".sw-layout input,.sw-layout select":{fontFamily:"inherit",fontSize:"12px",minWidth:0,maxWidth:"100%",padding:"4px 6px",border:"1px solid #a0a5b666",borderRadius:"5px",backgroundColor:"transparent",color:"inherit"},".sw-layout-notice":{margin:"8px",lineHeight:"1.5",fontSize:"11px",opacity:"0.7"},".sw-layout-body > .sw-layout-notice":{gridColumn:"1 / -1"},".sw-layout-error":{margin:"0 10px 6px",color:"#b32636",fontSize:"12px"},"&dark .sw-layout-error":{color:"#ff99a4"},".sw-layout button:focus-visible,.sw-layout input:focus-visible,.sw-layout select:focus-visible":{outline:"2px solid #4085f5",outlineOffset:"1px"},"@media (max-width: 480px)":{".sw-layout-body":{gridTemplateColumns:"minmax(90px, 1fr) minmax(150px, 1.6fr)"},".sw-layout-hint":{display:"none"}}});function qS(n={}){return[IS,or,Vi.of(e=>BS(e,n))]}const qd="scriptwidget.studio.document-state.v1.";function Wd(n,e,t){if(!n||!e)return!1;try{return n.setItem(`${qd}${e}`,JSON.stringify({anchor:Number(t.anchor)||0,head:Number(t.head)||0,scrollTop:Number(t.scrollTop)||0})),!0}catch{return!1}}function WS(n,e,t){if(!n||!e)return null;try{const i=JSON.parse(n.getItem(`${qd}${e}`));if(!i||typeof i!="object")return null;const s=r=>Math.max(0,Math.min(Number(r)||0,t));return{anchor:s(i.anchor),head:s(i.head),scrollTop:Math.max(0,Number(i.scrollTop)||0)}}catch{return null}}const zS="scriptwidget.web-studio.draft.v1:";function nl(n){return`${zS}${n}`}function VS(n,e){if(!e)return null;try{const t=JSON.parse(n.getItem(nl(e))||"null");return t&&typeof t.content=="string"&&typeof t.baseRevision=="string"?t:null}catch{return null}}function hh(n,e,t,i,s=Date.now()){if(!e||typeof i!="string")return null;const r={documentID:e,content:t,baseRevision:i,updatedAt:s};return n.setItem(nl(e),JSON.stringify(r)),r}function fo(n,e){e&&n.removeItem(nl(e))}function jS(n,e,t,i){const s=VS(n,e);return!s||s.content===t?null:{...s,serverContent:t,serverRevision:i,isStale:s.baseRevision!==i}}function YS(){return{connection:"connecting",save:"idle",preview:"idle",conflict:null}}function NS(n,e){switch(e.type){case"CONNECTED":return{...n,connection:"connected"};case"OFFLINE":return{...n,connection:"offline",save:n.save==="saving"?"draft":n.save};case"DISCONNECTED":return{...n,connection:"disconnected"};case"EDITED":return{...n,save:"draft",conflict:null};case"SAVING":return{...n,save:"saving"};case"SAVED":return{...n,save:"saved",preview:e.preview||"requested",conflict:null};case"SAVE_FAILED":return{...n,save:"error"};case"CONFLICT":return{...n,save:"conflict",conflict:e.conflict};default:return n}}class HS{constructor(e){this.send=e,this.epoch=0,this.context=null,this.inFlight=null,this.needsFlush=!1}open({documentID:e,packageID:t,path:i,revision:s,content:r}){return this.epoch+=1,this.context={documentID:e,packageID:t,path:i,revision:s,content:r,generation:0,savedGeneration:0},this.needsFlush=!1,this.snapshot()}edit(e){return this.context?(this.context.content=e,this.context.generation+=1,this.snapshot()):null}rebase(e){return this.context&&(this.context.revision=e),this.snapshot()}get isDirty(){return!!(this.context&&this.context.generation!==this.context.savedGeneration)}snapshot(){return this.context?{...this.context,dirty:this.isDirty}:null}async flush(){if(!this.context||!this.isDirty)return{skipped:!0,snapshot:this.snapshot()};if(this.inFlight)return this.needsFlush=!0,this.inFlight.then(()=>this.isDirty?this.flush():{skipped:!0,snapshot:this.snapshot()});const e=this.epoch,t={...this.context};this.needsFlush=!1,this.inFlight=this.send({documentID:t.documentID,packageID:t.packageID,path:t.path,content:t.content,baseRevision:t.revision}).then(s=>this.epoch!==e||this.context?.documentID!==t.documentID?{ignored:!0,result:s,snapshot:this.snapshot()}:(this.context.revision=s.revision,this.context.savedGeneration=t.generation,{result:s,snapshot:this.snapshot()})).finally(()=>{this.inFlight=null});const i=await this.inFlight;return this.needsFlush&&this.isDirty?this.flush():i}}function uh(n){return["draft","saving","error","conflict"].includes(n)}class GS extends Error{constructor(e,t,i={}){super(e),this.name="StudioAPIError",this.status=t,this.body=i}}class _S{constructor({fetchImpl:e=globalThis.fetch,token:t=()=>"",onUnauthorized:i=()=>{}}={}){if(typeof e!="function")throw new TypeError("A fetch implementation is required");this.fetchImpl=e,this.token=t,this.onUnauthorized=i}async request(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t)),s=await i.json().catch(()=>({}));return this.validate(i,e,s),s}async requestBlob(e,t={}){const i=await this.fetchImpl(e,this.authorizedOptions(t));if(!i.ok){const s=await i.json().catch(()=>({}));this.validate(i,e,s)}return i.blob()}authorizedOptions(e){return{...e,headers:{"Content-Type":"application/json","X-Studio-Token":this.token(),...e.headers||{}}}}validate(e,t,i){if(!e.ok){const s=new GS(i.message||`Request failed (${e.status})`,e.status,i);throw e.status===401&&t!=="/api/v1/pair"&&this.onUnauthorized(s),s}}}const sl=/^https?:$/.test(window.location.protocol),JS=document.querySelector(sl?"#editor":"#native-editor"),rl=new Gi,ar=new Gi;let qt=null,me=null,Et=null,at=0,wi=0,ua=!1,Mn=null,fh=null;const dh=document.querySelector("#save-status");let zd=null;function En(n,e="idle"){dh.textContent=n,dh.dataset.state=e}function e1(){window.clearTimeout(fh),fh=window.setTimeout(()=>{const n=W.state.selection.main;Wd(window.localStorage,me,{anchor:n.anchor,head:n.head,scrollTop:W.scrollDOM.scrollTop})},180)}function Vd(){return window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light"}function ol(){window.clearTimeout(Mn),En("Saving…","saving"),Mn=window.setTimeout(()=>{const n=W.state.doc.toString(),e=at,t=me,i=Et,s=wi;nn(qt,Ue.documentSave,{content:n,version:e},t,(r={})=>{sl||t!==me||i!==Et||s!==wi||e!==at||En(r.result==="ok"||r.result==="unavailable"?"Saved":"Save failed",r.result==="failed"?"error":"saved")},i)},700)}function t1(n){if((n.selectionSet||n.viewportChanged||n.docChanged)&&e1(),!n.docChanged||ua)return;at+=1,zd?.documentChanged();const e=[];n.changes.iterChanges((t,i,s,r,o)=>{e.push({from:t,to:i,insert:o.toString(),newFrom:s,newTo:r})}),nn(qt,Ue.documentChanged,{changes:e,version:at},me,void 0,Et),ol()}const jd=[nO(),oO(),xg(),w0(),qS({refreshResources:()=>new Promise((n,e)=>{const t=me,i=wi,s=Et,r=window.setTimeout(()=>e(new Error("Resource refresh timed out")),5e3);nn(qt,Ue.documentResources,{},t,(o={})=>{window.clearTimeout(r),t!==me||i!==wi||o.result!=="ok"||o.documentID!==t||!Array.isArray(o.resources)?e(new Error("Document resources are unavailable")):n(o.resources)},s)})}),HO(),hg(),gg(),_.allowMultipleSelections.of(!0),UO(),c0(),uA(),xA({override:[kS],activateOnTyping:!0}),Mg(),Fg(),Cg(),Qb(),fS(),iS(Ed,{delay:350}),Eu(QS),yb({jsx:!0}),mr.of([Py,...mA,...Qy,...jb,...Z0,...VO,...nd]),rl.of(_.readOnly.of(!1)),ar.of(Ud(Vd())),$.updateListener.of(t1),$.contentAttributes.of({autocapitalize:"off",autocomplete:"off",spellcheck:"false"})],W=new $({state:_.create({doc:"",extensions:jd}),parent:JS});function _t(n,e=me,t=0,i=!1){window.clearTimeout(Mn),wi+=1;const s=W.state.selection.main;Wd(window.localStorage,me,{anchor:s.anchor,head:s.head,scrollTop:W.scrollDOM.scrollTop}),ua=!0;const r=e!==me;me=e,at=t;const o=WS(window.localStorage,me,(n??"").length),a=o?{anchor:o.anchor,head:o.head}:{anchor:0};if(r){const l=ar.get(W.state),c=W.state.readOnly;let h=_.create({doc:n??"",extensions:jd,selection:a});h=h.update({effects:[ar.reconfigure(l),rl.reconfigure(_.readOnly.of(c))]}).state,W.setState(h)}else W.dispatch({changes:{from:0,to:W.state.doc.length,insert:n??""},selection:a,scrollIntoView:!0});o&&window.requestAnimationFrame(()=>{W.scrollDOM.scrollTop=o.scrollTop}),ua=!1,i&&nn(qt,Ue.documentChanged,{content:W.state.doc.toString(),version:at},me,void 0,Et),En("Saved","saved")}function ph(n){if(W.state.readOnly)return!1;const e=W.state.selection.main;return W.dispatch({changes:{from:e.from,to:e.to,insert:n},selection:{anchor:e.from+n.length},userEvent:"input"}),W.focus(),!0}async function lr(){if(W.state.readOnly)return!1;const n=W.state.doc.toString(),e=wi,t=at,i=()=>!W.state.readOnly&&e===wi&&t===at&&n===W.state.doc.toString();try{const[{format:s},{default:r},{default:o}]=await Promise.all([Cr(()=>import("./standalone-Cayz_KD-.js"),[],import.meta.url),Cr(()=>import("./babel-BktJt1uC.js"),[],import.meta.url),Cr(()=>import("./estree-DFfjoHvx.js"),[],import.meta.url)]),a=await s(n,{parser:"babel",plugins:[r,o],semi:!0,singleQuote:!0,trailingComma:"es5"});return i()?(_t(a,me,at+1,!0),ol(),!0):!1}catch(s){return i()&&nn(qt,"diagnostics.publish",{message:String(s),severity:"error"},me,void 0,Et),!1}}function Xi(n){W.dispatch({effects:rl.reconfigure(_.readOnly.of(!!n))})}function cr(n){const e=n==="dark"||n==="light"?n:Vd();document.documentElement.dataset.theme=e,W.dispatch({effects:ar.reconfigure(Ud(e))})}function i1(n=[]){const e=n.map(t=>({from:Math.max(0,Math.min(t.from??0,W.state.doc.length)),to:Math.max(0,Math.min(t.to??t.from??0,W.state.doc.length)),severity:t.severity??"error",message:t.message??"Unknown error"}));W.dispatch(vd(W.state,e))}function rt(n,e){qt.registerHandler(n,async(t={},i=()=>{})=>{try{if(Et!==null&&n!==Ue.documentOpen&&n!==Ue.editorSetTheme&&(t.documentID!==me||t.sessionID!==Et))throw new Error("The editor session changed.");i({result:"ok",...await e(t)})}catch(s){i({result:"failed",message:String(s)})}})}pS(n=>{qt=n,rt(Ue.documentOpen,({payload:e={},documentID:t,sessionID:i=null})=>(Et=i,_t(e.content,t,e.version??0),il(W,e.resources??[]),Xi(e.readOnly),e.dirty&&(En("Restored unsaved edits","editing"),e.readOnly||ol()),{protocolVersion:Zd})),rt(Ue.documentReplace,({payload:e={},documentID:t})=>{if(W.state.readOnly||e.expectedContent!==void 0&&e.expectedContent!==W.state.doc.toString())throw new Error("The file changed or is read only.");return _t(e.content,t,e.version??at,!0),{}}),rt(Ue.documentSetReadOnly,({payload:e={}})=>(Xi(e.readOnly),{readOnly:!!e.readOnly})),rt(Ue.editorInsert,({payload:e={}})=>({inserted:ph(e.content??"")})),rt(Ue.editorFormat,async()=>({formatted:await lr()})),rt(Ue.editorSetTheme,({payload:e={}})=>(cr(e.theme),{})),rt(Ue.editorGetState,()=>({content:W.state.doc.toString(),version:at,documentID:me,sessionID:Et,selection:{from:W.state.selection.main.from,to:W.state.selection.main.to}})),rt(Ue.diagnosticsPublish,({payload:e={}})=>(i1(e.items),{})),rt("editor_setValue",({value:e})=>(_t(e),{})),rt("editor_insertValue",({value:e})=>({inserted:ph(e??"")})),rt("editor_getValue",()=>({value:W.state.doc.toString()})),rt("editor_setReadonly",({readonly:e})=>(Xi(e),{readonly:!!e})),rt("editor_formatCode",async()=>({formatted:await lr()})),mS(qt)});sl&&(document.querySelector("#native-editor").hidden=!0,document.querySelector("#web-studio").hidden=!1,n1());async function n1(){const n=document.querySelector("#pair-dialog"),e=document.querySelector("#pair-form"),t=document.querySelector("#pair-error"),i=document.querySelector("#package-select"),s=document.querySelector("#file-select"),r=document.querySelector("#connection-status"),o=document.querySelector("#disconnect-button"),a=document.querySelector("#studio-grid"),l=document.querySelector(".editor-column"),c=document.querySelector("#recovery-banner"),h=document.querySelector("#conflict-banner"),u=document.querySelector("#command-dialog"),f=document.querySelector("#command-search"),d=document.querySelector("#command-list"),p=document.querySelector("#compare-dialog");let m=window.sessionStorage.getItem("scriptwidget.web-studio.token")||"",g=[],y=null,b=null,x=null,C=0,k=null,S="",w="",U=null,F=YS(),V="",E="",M=null;function Y(v="Session ended. Enter the new code shown on your device."){m="",window.sessionStorage.removeItem("scriptwidget.web-studio.token"),o.hidden=!0,Q({type:"DISCONNECTED"}),r.textContent=v,Xi(!0),n.open||n.showModal()}function Q(v){F=NS(F,v);const Z={connecting:"Connecting",connected:"Connected",offline:"Offline",disconnected:"Disconnected"},L={idle:"Ready",draft:"Draft saved locally",saving:"Saving…",saved:"Saved",error:"Save failed",conflict:"Conflict"};r.dataset.state=F.connection,document.querySelector("#status-connection").textContent=Z[F.connection]||F.connection,En(L[F.save]||F.save,F.save),document.querySelector("#dirty-indicator").hidden=!["draft","saving","error","conflict"].includes(F.save),document.querySelector("#status-preview").textContent=F.preview==="requested"?"Preview requested":"Preview idle",document.querySelector("#preview-detail").textContent=F.preview==="requested"?"Requested on device":"Not requested"}const D=new _S({token:()=>m,onUnauthorized:()=>Y()}),P=(v,Z)=>D.request(v,Z);M=new HS(({packageID:v,path:Z,content:L,baseRevision:ne})=>P("/api/v1/document",{method:"PUT",body:JSON.stringify({package:v,path:Z,content:L,baseRevision:ne})}));async function j(v){m=(await P("/api/v1/pair",{method:"POST",body:JSON.stringify({code:v})})).token,window.sessionStorage.setItem("scriptwidget.web-studio.token",m),o.hidden=!1,Q({type:"CONNECTED"}),ae()}function ae(){window.clearInterval(y),y=window.setInterval(async()=>{if(m)try{const v=await P("/api/v1/session");if(!navigator.onLine)return;q(v),Q({type:"CONNECTED"})}catch(v){v.status!==401&&(r.textContent=`Interrupted · ${v.message}`,Q({type:"OFFLINE"}))}},5e3)}async function J(){if(g=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...g.map(Z=>new Option(Z.name,Z.id))),!g.length){r.textContent="No editable widgets",Xi(!0);return}await ee()}async function ee(){const v=g.find(ne=>ne.id===i.value),Z=v?.files||[];s.replaceChildren(...Z.map(ne=>new Option(ne,ne)));const L=Z.includes(v?.entry)?v.entry:Z[0];L&&(s.value=L),await H()}async function I(v=""){g=(await P("/api/v1/packages")).packages||[],i.replaceChildren(...g.map(ge=>new Option(ge.name,ge.id))),V&&(i.value=V);const L=g.find(ge=>ge.id===i.value),ne=L?.files||[];s.replaceChildren(...ne.map(ge=>new Option(ge,ge))),s.value=ne.includes(v)?v:ne.includes(E)?E:L?.entry||ne[0]}async function H(){if(!i.value||!s.value)return;const v=new URLSearchParams({package:i.value,path:s.value}),Z=await P(`/api/v1/document?${v}`),L=`${i.value}/${s.value}`;V=i.value,E=s.value,S=Z.revision,w=Z.content,U=null,h.hidden=!0,_t(Z.content,L,0),il(W,g.find(ge=>ge.id===V)?.files??[]),M.open({documentID:L,packageID:V,path:E,revision:Z.revision,content:Z.content}),Xi(!!Z.readOnly),ce(Z);const ne=jS(window.localStorage,L,Z.content,Z.revision);c.hidden=!ne,c._draft=ne,document.querySelector("#recovery-message").textContent=ne?.isStale?"The device version also changed. Review before saving.":"Restore it or keep the device version.",r.textContent="Connected",Q({type:"CONNECTED"}),o.hidden=!1,Oe(),ae(),Me()}function ce(v){document.querySelector("#breadcrumb-package").textContent=v.packageName||i.value,document.querySelector("#breadcrumb-file").textContent=s.value,document.querySelector("#editor-tab-name").textContent=s.value,document.querySelector("#revision-detail").textContent=S?S.slice(0,8):"—",document.querySelector("#access-detail").textContent=v.readOnly?"Read only":"Editable"}function q(v){v.device&&(document.querySelector("#device-name").textContent=v.device.name||v.device.model,document.querySelector("#device-system").textContent=`${v.device.model} · ${v.device.system}`),v.preview?.package&&(document.querySelector("#preview-target").textContent=v.preview.package),v.preview?.snapshotSequence&&te()}async function te(){try{const v=await D.requestBlob("/api/v1/preview"),Z=URL.createObjectURL(v),L=document.querySelector("#device-preview"),ne=k;k=Z,L.onload=()=>{ne&&URL.revokeObjectURL(ne)},L.src=Z,L.hidden=!1,document.querySelector("#preview-detail").textContent="Rendered on device"}catch{}}function re(v){const Z=document.querySelector("#console-list"),L=document.createElement("li");for(L.className=v.level||"info",L.textContent=v.message||"",Z.append(L);Z.children.length>200;)Z.firstChild.remove();Z.scrollTop=Z.scrollHeight}function Me(){window.clearTimeout(x);const v=async()=>{if(m)try{const Z=await P(`/api/v1/events?after=${C}`);C=Z.nextSequence??C;for(const L of Z.events||[])L.type==="console"&&re(L.payload||{}),L.type==="preview.snapshot"&&te(),L.type==="preview.requested"&&(document.querySelector("#status-preview").textContent="Preview requested",document.querySelector("#preview-detail").textContent="Requested on device"),L.type==="files.changed"&&L.payload?.package===V&&I(E).catch(Ie);Q({type:"CONNECTED"})}catch(Z){Z.status!==401&&Q({type:"OFFLINE"})}finally{m&&(x=window.setTimeout(v,1e3))}};v()}function Oe(){const v=Ed(W);document.querySelector("#problems-list").replaceChildren(...v.map(L=>{const ne=W.state.doc.lineAt(L.from),ge=document.createElement("li");ge.className=`problem-item ${L.severity}`;const it=document.createElement("button");return it.type="button",it.innerHTML=`${L.severity==="error"?"●":"▲"}Ln ${ne.number}`,it.children[1].textContent=L.message,it.addEventListener("click",()=>{W.dispatch({selection:{anchor:L.from},scrollIntoView:!0}),W.focus()}),ge.append(it),ge})),document.querySelector("#problems-count").textContent=String(v.length),document.querySelector("#status-problem-count").textContent=String(v.length),document.querySelector("#problems-summary").textContent=v.length?`${v.filter(L=>L.severity==="error").length} errors, ${v.filter(L=>L.severity!=="error").length} warnings`:"No problems detected"}async function ie(v,Z,L=null){M.snapshot()?.content!==v&&M.edit(v),L&&M.rebase(L),Q({type:"SAVING"});try{const ne=await M.flush();if(ne.ignored){Z({result:"ok",ignored:!0});return}if(ne.skipped){Q({type:"SAVED"}),Z({result:"ok",skipped:!0});return}const ge=ne.result||{},it=M.snapshot();S=it?.revision||S,w=it?.content||v,fo(window.localStorage,me),U=null,h.hidden=!0,document.querySelector("#revision-detail").textContent=S?.slice(0,8)||"—",Q({type:"SAVED",preview:ge.preview?.state}),Z({result:"ok",...ge})}catch(ne){ne.status===409?(U=ne.body,h.hidden=!1,Q({type:"CONFLICT",conflict:U})):Q({type:"SAVE_FAILED"}),Z({result:"failed",message:ne.message})}}qt={registerHandler(){},callHandler(v,Z,L=()=>{}){if(v===Ue.documentSave)ie(Z.payload.content,L);else if(v===Ue.documentResources){const ne=me,ge=V;P("/api/v1/packages").then(it=>{if(ne!==me||Z.documentID!==me||ge!==V){L({result:"failed"});return}L({result:"ok",documentID:ne,resources:(it.packages??[]).find(zn=>zn.id===ge)?.files??[]})}).catch(()=>L({result:"failed"}))}else L({result:"ok"})}},zd={documentChanged(){const v=W.state.doc.toString();M.edit(v),hh(window.localStorage,me,v,M.snapshot()?.revision||S),Q({type:"EDITED"}),window.clearTimeout(b),b=window.setTimeout(Oe,380)}};async function ve(v,Z){if(!uh(F.save)){await v();return}try{if(window.clearTimeout(Mn),await ie(W.state.doc.toString(),()=>{}),!M.isDirty&&F.save!=="conflict"){await v();return}}catch{}window.confirm("This document has changes that are not saved on the device. A browser draft is available. Switch anyway?")?await v():Z()}i.addEventListener("change",()=>{const v=i.value;i.value=V,ve(async()=>{i.value=v,await ee()},()=>{i.value=V}).catch(Ie)}),s.addEventListener("change",()=>{const v=s.value;s.value=E,ve(async()=>{s.value=v,await H()},()=>{s.value=E}).catch(Ie)});function Ie(v){r.textContent=v.message||String(v),Q({type:"SAVE_FAILED"})}e.addEventListener("submit",async v=>{v.preventDefault(),t.textContent="";try{await j(document.querySelector("#pair-code").value),n.close(),await J()}catch(Z){t.textContent=Z.message}}),o.addEventListener("click",async()=>{try{await P("/api/v1/session",{method:"DELETE"})}catch{}Y("Disconnected. Start a new session with the code on your device.")}),document.querySelector("#new-file").addEventListener("click",async()=>{const v=window.prompt("New package-relative text file","source/helper.js")?.trim();if(v)try{await P("/api/v1/document",{method:"POST",body:JSON.stringify({package:V,path:v})}),await I(v),await H()}catch(Z){Ie(Z)}}),document.querySelector("#delete-file").addEventListener("click",async()=>{const v=g.find(Z=>Z.id===V);if(!E||E===v?.entry){window.alert("The widget entry file cannot be deleted.");return}if(window.confirm(`Delete ${E}? This cannot be undone.`))try{const Z=new URLSearchParams({package:V,path:E});await P(`/api/v1/document?${Z}`,{method:"DELETE"}),E="",await I(),await H()}catch(Z){Ie(Z)}}),document.querySelector("#clear-console").addEventListener("click",()=>document.querySelector("#console-list").replaceChildren()),document.querySelector("#restore-draft").addEventListener("click",()=>{const v=c._draft;v&&(_t(v.content,v.documentID,at+1),c.hidden=!0,hh(window.localStorage,me,v.content,S),Q({type:"EDITED"}),Oe())}),document.querySelector("#discard-draft").addEventListener("click",()=>{fo(window.localStorage,me),c.hidden=!0}),document.querySelector("#reload-server").addEventListener("click",()=>{U&&(fo(window.localStorage,me),S=U.currentRevision,w=U.currentContent,_t(w,me,at+1),M.open({documentID:me,packageID:V,path:E,revision:S,content:w}),U=null,h.hidden=!0,Q({type:"SAVED"}),Oe())}),document.querySelector("#keep-local").addEventListener("click",()=>{U&&ie(W.state.doc.toString(),()=>{},U.currentRevision)}),document.querySelector("#compare-conflict").addEventListener("click",()=>{document.querySelector("#compare-local").textContent=W.state.doc.toString(),document.querySelector("#compare-server").textContent=U?.currentContent||w,p.showModal()}),p.querySelector("button").addEventListener("click",()=>p.close());function oe(){const v=l.classList.toggle("problems-collapsed");document.querySelector("#problems-toggle").setAttribute("aria-expanded",String(!v))}function Ae(v){a.classList.toggle(`show-${v}`)}document.querySelector("#problems-toggle").addEventListener("click",oe),document.querySelector("#status-problems").addEventListener("click",()=>{l.classList.remove("problems-collapsed")}),document.querySelector("#explorer-button").addEventListener("click",()=>Ae("explorer")),document.querySelector("#inspector-button").addEventListener("click",()=>Ae("inspector")),document.querySelectorAll("[data-close-panel]").forEach(v=>v.addEventListener("click",()=>a.classList.remove(`show-${v.dataset.closePanel}`)));const le=[{name:"Save Document",keys:"⌘S",run:()=>{window.clearTimeout(Mn),ie(W.state.doc.toString(),()=>{})}},{name:"Format Document",keys:"⇧⌥F",run:lr},{name:"Toggle Problems",keys:"⌘J",run:oe},{name:"Toggle Explorer",keys:"⌘⇧E",run:()=>Ae("explorer")},{name:"Toggle Inspector",keys:"",run:()=>Ae("inspector")},{name:"Use Light Theme",keys:"",run:()=>cr("light")},{name:"Use Dark Theme",keys:"",run:()=>cr("dark")}];function qe(v=""){const Z=le.filter(L=>L.name.toLowerCase().includes(v.toLowerCase()));d.replaceChildren(...Z.map(L=>{const ne=document.createElement("li"),ge=document.createElement("button");ge.type="button",ge.className="command";const it=document.createElement("span");it.textContent=L.name;const zn=document.createElement("kbd");return zn.textContent=L.keys,ge.append(it,zn),ge.addEventListener("click",()=>{u.close(),L.run()}),ne.append(ge),ne}))}function tt(){qe(),u.showModal(),f.value="",f.focus()}document.querySelector("#command-button").addEventListener("click",tt),f.addEventListener("input",()=>qe(f.value)),document.addEventListener("keydown",v=>{const Z=v.metaKey||v.ctrlKey;Z&&v.shiftKey&&v.key.toLowerCase()==="p"?(v.preventDefault(),tt()):Z&&v.key.toLowerCase()==="s"?(v.preventDefault(),le[0].run()):Z&&v.key.toLowerCase()==="j"?(v.preventDefault(),oe()):Z&&v.shiftKey&&v.key.toLowerCase()==="e"?(v.preventDefault(),Ae("explorer")):v.shiftKey&&v.altKey&&v.key.toLowerCase()==="f"&&(v.preventDefault(),lr())}),W.dom.addEventListener("keyup",ai),W.dom.addEventListener("mouseup",ai);function ai(){const v=W.state.selection.main.head,Z=W.state.doc.lineAt(v);document.querySelector("#cursor-position").textContent=`Ln ${Z.number}, Col ${v-Z.from+1}`}window.addEventListener("offline",()=>{r.textContent="Computer is offline",Q({type:"OFFLINE"})}),window.addEventListener("online",()=>{m&&P("/api/v1/session").then(v=>(q(v),Q({type:"CONNECTED"}),J())).catch(Ie)}),window.addEventListener("beforeunload",v=>{uh(F.save)&&(v.preventDefault(),v.returnValue="")});try{await J()}catch{Y("Pair with the code shown on your device.")}}window.matchMedia?.("(prefers-color-scheme: dark)").addEventListener("change",()=>cr("system"));window.webkit||_t(`// ScriptWidget Studio +const widget = ( + + + +); +`); diff --git a/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html b/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html index f08a8fe2..3bc96711 100644 --- a/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html +++ b/macOS/ScriptWidgetMac/StudioEditor.bundle/index.html @@ -5,7 +5,7 @@ ScriptWidget Web Studio - + diff --git a/macOS/ScriptWidgetMac/macOS.entitlements b/macOS/ScriptWidgetMac/macOS.entitlements index bb9318af..45936c64 100644 --- a/macOS/ScriptWidgetMac/macOS.entitlements +++ b/macOS/ScriptWidgetMac/macOS.entitlements @@ -31,5 +31,9 @@ group.everettjf.scriptwidget + com.apple.security.personal-information.addressbook + + com.apple.security.files.user-selected.read-only + diff --git a/macOS/ScriptWidgetMacWidget/Info.plist b/macOS/ScriptWidgetMacWidget/Info.plist index 6945d3c2..c0ade933 100644 --- a/macOS/ScriptWidgetMacWidget/Info.plist +++ b/macOS/ScriptWidgetMacWidget/Info.plist @@ -25,5 +25,11 @@ ATSApplicationFontsPath . + NSContactsUsageDescription + Select contacts to share with your chosen widgets. + NSHomeKitUsageDescription + Read selected home accessories and run selected controls or scenes from widgets. + NSAlarmKitUsageDescription + Schedule alarms and timers you explicitly request from a widget. diff --git a/macOS/ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements b/macOS/ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements index a9d9948a..cff3a124 100644 --- a/macOS/ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements +++ b/macOS/ScriptWidgetMacWidget/ScriptWidgetMacWidget.entitlements @@ -29,5 +29,7 @@ group.everettjf.scriptwidget + com.apple.security.personal-information.addressbook + From 44612d032e024be6bf8506f1e751817a7293983f Mon Sep 17 00:00:00 2001 From: Everett Date: Mon, 26 Oct 2026 19:30:48 -0700 Subject: [PATCH 02/15] Document system API preview examples and device acceptance --- .../system-services/health-history-web.png | Bin 288572 -> 257413 bytes .../notification-reminder-web.png | Bin 290282 -> 253325 bytes docs/system-services-api.md | 8 ++++++++ 3 files changed, 8 insertions(+) diff --git a/docs/images/system-services/health-history-web.png b/docs/images/system-services/health-history-web.png index bd8ab6de273c0fcff074113f9ce8411a7b3077f9..886ff0d3ff42f2ffb7b18bab2229330021c366b5 100644 GIT binary patch literal 257413 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

    _dv9OgtGPT61P_MePK<7aqiZSJ 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%0D!n2>F!Rwq+?orUjk% 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 z z{FDN*<5@yOCAM^_2L}G+U?7rrcTucah>j7M@Bu-9#(PCe*ZUI;5Sfz?(R5}?8~sM>G|`r zuT#g+#PhyVDYs3Qo_z0BW7id@!N%6L_OtY#Y=NiT22o!G8$D3JgAt`(9;{!KEZ4(*(*VXxBG- zY6Do4A)WVcJ#H$9W!&9Xu(4fSN)r+u&nn2+1ik)*q#8yk%tuZAR7K@iLql}?RXdTc zs9*K^81W9o@&|VMm3e!)9IWx9xxxVCn|OS(&+KUl*Kku~BaqTW$-bkYR6$4AZ+&kF zIma^-N`e?CUH%wLF+1KHbd<0mN=Z?%sHo^oxM$-QtWDxFc$Z@6hUq?5Lr9lLlI!{ktoA8%`rI16y)SGVJBZ-ULVTVu68`yis-oyO22I~ z-Xus)|4Qt9O46b%~f}Z%_l}3AU7Gl7sLK6?8Zx$obXRwT}r8PF&)at z%h7<--?y7z2J*ItA|Op`ix?M<84e^u6c>N>!VBbswFcT}!MKdnKb0=SAE29yB5z+l z(0gXbiUkr)luJF%KcUoWlHiBdg@t!>Nm&q3n2!`JdruBYebzMDD* zs%njp@C>C#`+y6ND3q%l<>9r-sQ0&%V#ir&rv49YZvmCn+IDR#B8{}5NFxYJD@d1u zN-CvvgQRqqbV;amDJiIQcS%ZjcQ?{E@So`3`+1)CeZTMfWBg<6vG*8`4L2^5)7{Yk6>C$9r zV>NX@V~c}sK6n98a6!Sz_IAXSu!f6^i--1%0Hxk*ym0rfl7Z{ZJie$+k)3?R2&y1;rBd3W zn~5P~4~j>L^24+2I!{6I3;CE%C|OKUY?FX^J^3~4p3-jp^zG1VV2xVuG8^7Dx-*|ov#+rwP|A^s4 z^QaqVlxNAXDTnPHdh;#t8N9Ryu$7+Qxd3b%n}0WTQ0=N|`T%$fj5axZjJkUN8h#-Q zBZ~1#eIF;Fippc$KO3fI)AxfN!oq=1)zSZt@@>^ !L5E9T!eXFStyVtNt(X05|) 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 z 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 bmsgNhZg4I6)8-mnzVwl#f<&H}zUTh|VXi;0 literal 288572 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