@bud.sh/app 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/bud/design.js +1 -1
- package/dist/client/assets/canvas-C8hyPWoT.js +1 -0
- package/dist/client/assets/difference-worker-BfF4_N3e.js +8 -0
- package/dist/client/assets/files-D_Tm7gCK.js +1 -0
- package/dist/client/assets/i18n-BtfXum8P.js +1 -0
- package/dist/client/assets/index-Dpxjiok1.js +2 -0
- package/dist/client/assets/pages-B-_CKvDS.js +1 -0
- package/dist/client/assets/project-branches-DzXdaT9L.js +1 -0
- package/dist/client/assets/project-comments-CQkB2jbE.js +1 -0
- package/dist/client/assets/project-thread-links-BN7zL0AX.js +1 -0
- package/dist/client/assets/{project-threads-DezXiVK6.js → project-threads-CHGG-6fo.js} +104 -104
- package/dist/client/assets/{project-work-CB1JHqGW.js → project-work-L5fYMSOu.js} +1 -1
- package/dist/client/assets/task-design-DYqcqq1b.js +23 -0
- package/dist/client/assets/tasks-A2FKo3_h.js +1 -0
- package/dist/client/assets/tasks-request-DGigNdyK.js +1 -0
- package/dist/client/assets/workspace-CvWmU2RK.js +2 -0
- package/dist/client/index.html +2 -1
- package/dist/hosted/assets/{canvas-C69-96GR.js → canvas-MWtOwaWm.js} +69 -41
- package/dist/hosted/assets/{comment-data-CiDuvXi2.js → comment-data-DsgJWq4n.js} +7195 -1067
- package/dist/hosted/assets/{files-DQL5hzs3.js → files-Wvo11G2A.js} +92 -89
- package/dist/hosted/assets/{pages-DFs7jB6M.js → pages-BAmRFVtU.js} +31 -22
- package/dist/hosted/assets/{project-branches-CffV4IS1.js → project-branches-BNloVosX.js} +5 -5
- package/dist/hosted/assets/{project-thread-links-B1Y2bDUx.js → project-thread-links-BmY8HQXt.js} +12 -12
- package/dist/hosted/assets/{screen-BroBb1Z_.js → screen-QmqmI2Aq.js} +18 -18
- package/dist/hosted/assets/{tasks-mzmNhe2d.js → tasks-C8iWPrWg.js} +29 -29
- package/dist/hosted/assets/{tasks-request-Dcrpd2_8.js → tasks-request-C89fN1dK.js} +7 -7
- package/dist/hosted/hosted.js +48 -29
- package/dist/node/design.js +6235 -139
- package/dist/node/index.js +4 -2
- package/dist/node-host/assets/{canvas-BZhzizzt.js → canvas-D_F8SIlm.js} +70 -42
- package/dist/node-host/assets/{comment-data-nUlI0szN.js → comment-data-q_8INiZz.js} +7221 -1093
- package/dist/node-host/assets/{files-CTzcWGjb.js → files-xazOrNCX.js} +92 -89
- package/dist/node-host/assets/{pages-0aWH7z1j.js → pages-D6VkmdfQ.js} +31 -22
- package/dist/node-host/assets/{project-branches-1zs_0J_y.js → project-branches-C26hwmo3.js} +5 -5
- package/dist/node-host/assets/{project-thread-links-LpUAGcDr.js → project-thread-links-BOzjws5W.js} +12 -12
- package/dist/node-host/assets/{screen-DQoTOWYR.js → screen-Dog-YByu.js} +18 -18
- package/dist/node-host/assets/{tasks-C0WqnM7Q.js → tasks-A1_bpb3_.js} +30 -30
- package/dist/node-host/assets/{tasks-request-Bwky5ORf.js → tasks-request-Bie1PpQP.js} +7 -7
- package/dist/node-host/node-host.js +48 -29
- package/dist/server/assets/{branch-previews-BryeA_kA.js → branch-previews-ClkoJ0lM.js} +4 -2
- package/dist/server/assets/{canvas-D6tIkONI.js → canvas-Dn4RYoU2.js} +70 -42
- package/dist/server/assets/{comment-data-BuArfgcc.js → comment-data-B0OLHBGp.js} +7219 -1091
- package/dist/server/assets/{files-DkrEB48U.js → files-C5Vilfe4.js} +92 -89
- package/dist/server/assets/{listener-oKd5ETMj.js → listener-o1STuLju.js} +43 -29
- package/dist/server/assets/{pages-iEdmK_o2.js → pages-BNa0MHEc.js} +31 -22
- package/dist/server/assets/{project-branches-B7rtrvMl.js → project-branches-GtQYyOH5.js} +5 -5
- package/dist/server/assets/{project-thread-links-ue_ad9IX.js → project-thread-links-Nfz9NIny.js} +12 -12
- package/dist/server/assets/{project-work-6aOyja4v.js → project-work-Cy_BpHwR.js} +2 -2
- package/dist/server/assets/{screen-DMUB9a-K.js → screen-BtcJmZwj.js} +18 -18
- package/dist/server/assets/{server-DN5uwE4k.js → server-CYvuOSBA.js} +1 -1
- package/dist/server/assets/{services-Ber8opFE.js → services-DK4fqrlF.js} +2 -2
- package/dist/server/assets/{tasks-C2oa2wSC.js → tasks-B82tHwyQ.js} +31 -31
- package/dist/server/assets/{tasks-request-Bk5EoY_p.js → tasks-request-BtJBlkxV.js} +7 -6
- package/dist/server/capture.js +1 -1
- package/dist/server/migration.js +3 -3
- package/dist/server/runtime.js +4 -4
- package/dist/server/server.js +3 -3
- package/dist/types/assets/{config-Cuauq8xY.d.ts → config-DIC2cf_S.d.ts} +3 -0
- package/dist/types/assets/{contract-BsCQbbxD.d.ts → contract-CAT-XFNq.d.ts} +3 -1
- package/dist/types/companion.d.ts +1 -1
- package/dist/types/hosted.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/node-host.d.ts +2 -2
- package/dist/types/screen.d.ts +1 -1
- package/package.json +1 -1
- package/dist/client/assets/canvas-DxaIItAs.js +0 -1
- package/dist/client/assets/difference-worker-BpqPBs5g.js +0 -8
- package/dist/client/assets/files-C-7xoSt4.js +0 -1
- package/dist/client/assets/index-GPPa1XPO.js +0 -2
- package/dist/client/assets/pages-BVrTX_Eq.js +0 -1
- package/dist/client/assets/project-branches-DpxQx-T4.js +0 -1
- package/dist/client/assets/project-comments-D897aU5O.js +0 -1
- package/dist/client/assets/project-thread-links-Bp_TseD0.js +0 -1
- package/dist/client/assets/task-design-bktfn_Ok.js +0 -23
- package/dist/client/assets/tasks-Cqfj4fQN.js +0 -1
- package/dist/client/assets/tasks-request-mWMk9pBo.js +0 -1
- package/dist/client/assets/workspace-CznMN7F6.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as publishAll, $n as forkUnsafe, $t as provideContext, An as uninterruptible, At as catch_, Bn as effectDiscard, Bt as forever, Cn as tap, Ct as as$1, D as as, Dn as tryPromise, E as FileSystem, Fn as currentTimeMillis, Ft as fail$1, G as make$3, Gn as mergeAll, Gt as map, H as runForEach, Hn as isLayer, Ht as forkScoped, I as fromPubSub, In as build, It as filterOrFail, J as offerUnsafe, Jn as succeed$1, Jt as option, Kn as provide$1, Kt as mapError, L as ignore$1, Ln as buildWithMemoMap, Lt as flatMap, Mn as void_$1, N as empty$1, Nn as withFiber, Nt as die, O as callback, On as try_, Ot as catchIf, P as filter, Pn as yieldNow, Pt as ensuring, Q as publish, Qn as close, R as make$2, Rn as effect, Rt as flatten, S as writeTextAtomic, Sn as sync, St as andThen, T as Path, Tn as timeoutOption, Tt as asVoid, U as tap$1, Un as makeMemoMapUnsafe, Ut as gen, V as merge, Vn as empty, Vt as forkIn, W as unwrap$1, Wt as ignore, X as sliding$1, Xn as sync$1, Xt as orElseSucceed, Y as shutdown$1, Yt as orDie, Z as take, Zn as unwrap, Zt as promise, _n as serviceOption, _t as bytes$1, an as runFork, ar as void_, at as runIn, bn as succeedNone, bt as addFinalizer, cn as runPromiseExit, cr as add, dn as runSync, dr as getOrNull, en as provideService, er as makeUnsafe, et as shutdown, fn as runSyncExit, fr as getOrUndefined, gn as scoped, gr as TaggedError, hn as scope, hr as some, in as runCallbackWith, ir as succeed$2, it as interrupt, j as debounce, jn as uninterruptibleMask, jt as clockWith, kn as undefined_$1, kt as catchTag, ln as runPromiseExitWith, lr as getOption, m as projectModuleFile, mn as runSyncWith, mr as none, nr as doneUnsafe, nt as unbounded, on as runForkWith, or as scopeRemoveFinalizerUnsafe, pn as runSyncExitWith, pr as isNone, q as offer, rn as runCallback, rr as make$4, rt as await_, sn as runPromise, sr as Service, tn as result, tr as _await, tt as sliding, u as Git, un as runPromiseWith, ur as make$1, vn as sleep, vt as acquireRelease, w as RuntimePolicy, wn as tapError, wt as asSome, xn as suspend, xt as all, yn as succeed, zn as effectContext, zt as forEach } from "./branch-previews-
|
|
1
|
+
import { $ as publishAll, $n as forkUnsafe, $t as provideContext, An as uninterruptible, At as catch_, Bn as effectDiscard, Bt as forever, Cn as tap, Ct as as$1, D as as, Dn as tryPromise, E as FileSystem, Fn as currentTimeMillis, Ft as fail$1, G as make$3, Gn as mergeAll, Gt as map, H as runForEach, Hn as isLayer, Ht as forkScoped, I as fromPubSub, In as build, It as filterOrFail, J as offerUnsafe, Jn as succeed$1, Jt as option, Kn as provide$1, Kt as mapError, L as ignore$1, Ln as buildWithMemoMap, Lt as flatMap, Mn as void_$1, N as empty$1, Nn as withFiber, Nt as die, O as callback, On as try_, Ot as catchIf, P as filter, Pn as yieldNow, Pt as ensuring, Q as publish, Qn as close, R as make$2, Rn as effect, Rt as flatten, S as writeTextAtomic, Sn as sync, St as andThen, T as Path, Tn as timeoutOption, Tt as asVoid, U as tap$1, Un as makeMemoMapUnsafe, Ut as gen, V as merge, Vn as empty, Vt as forkIn, W as unwrap$1, Wt as ignore, X as sliding$1, Xn as sync$1, Xt as orElseSucceed, Y as shutdown$1, Yt as orDie, Z as take, Zn as unwrap, Zt as promise, _n as serviceOption, _t as bytes$1, an as runFork, ar as void_, at as runIn, bn as succeedNone, bt as addFinalizer, cn as runPromiseExit, cr as add, dn as runSync, dr as getOrNull, en as provideService, er as makeUnsafe, et as shutdown, fn as runSyncExit, fr as getOrUndefined, gn as scoped, gr as TaggedError, hn as scope, hr as some, in as runCallbackWith, ir as succeed$2, it as interrupt, j as debounce, jn as uninterruptibleMask, jt as clockWith, kn as undefined_$1, kt as catchTag, ln as runPromiseExitWith, lr as getOption, m as projectModuleFile, mn as runSyncWith, mr as none, nr as doneUnsafe, nt as unbounded, on as runForkWith, or as scopeRemoveFinalizerUnsafe, pn as runSyncExitWith, pr as isNone, q as offer, rn as runCallback, rr as make$4, rt as await_, sn as runPromise, sr as Service, tn as result, tr as _await, tt as sliding, u as Git, un as runPromiseWith, ur as make$1, vn as sleep, vt as acquireRelease, w as RuntimePolicy, wn as tapError, wt as asSome, xn as suspend, xt as all, yn as succeed, zn as effectContext, zt as forEach } from "./branch-previews-ClkoJ0lM.js";
|
|
2
2
|
import { $ as parseReviewActionRecovery, A as parseThreadReplyInput, An as iconNames, At as filterFileEntries, Bt as isWithinDirectory, Cn as WorkValidationError, Ct as compileSearchPattern, Dn as record$1, Dt as parseFileSearchQuery, E as parseThreadFilter, En as parseWork, Et as searchPathMatches, Gt as list, Ht as parseFilePath, Jt as strict$1, Kt as parseContract, L as applyReviewSelection, N as parseThreadStatusInput, O as parseThreadInput, On as strict, Rt as parseFileIndexQuery, Sn as statusCategory, St as parseReviewSourceQuery, T as parseThreadCapabilities, Tn as nonempty, Ut as pathHierarchy, Vt as parentPath, Wt as integer, X as parseReviewActionIntent, Y as parseReviewActionApply, Zt as parseWorkWorkspace, _n as parseMessage, _t as parseReviewHistoryQuery, an as parseWorkDetail, at as parseMutationIntent, b as MAX_THREADS, bn as fieldByRole, cn as parseWorkMutationResult, dn as parseWorkSnapshot, dt as validateMutationSelection, en as parseSectionData, gn as valueByRole, hn as parseWorkValue, ht as parseReviewDiffQuery, i as routes, in as parseWorkCreate, it as parseMutationApply, j as parseThreadSnapshot, jt as orderFileEntries, k as parseThreadLinkInput, kt as classifyText, lt as parseRecovery, mn as parseWorkUpdate, on as parseWorkItem, pt as parseReviewComparison, qt as revision, r as parseLiveId, rn as parseWorkConnection, sn as parseWorkItemRef, t as RESYNC, tn as parseWorkActionInput, tt as parseFileSaveRequest, un as parseWorkQuery, ut as pathCollisionKey, vn as parseMessageAuthor, w as parseThread, wn as identifier, wt as matchFileText, xn as parseWorkSchema, zt as isProtectedPath } from "./events-6z5v7Uca.js";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as concat, At as catch_, B as mapError$1, Bn as effectDiscard, C as ProcessRunner, Cn as tap, Ct as as, D as as$1, E as FileSystem, En as timeoutOrElse, Et as cached, F as fromEffect, Fn as currentTimeMillis, Ft as fail, Gn as mergeAll, Gt as map, H as runForEach, Ht as forkScoped, It as filterOrFail, Jn as succeed$1, K as makeUnsafe, Kn as provide, Kt as mapError, Lt as flatMap, M as drop, Mn as void_, Mt as context, N as empty, Nt as die, On as try_, Ot as catchIf, Pt as ensuring, R as make, Rn as effect, Sn as sync, St as andThen, T as Path, Tt as asVoid, Ut as gen, W as unwrap, Wn as merge, Wt as ignore, Xt as orElseSucceed, Yn as succeedContext, Zn as unwrap$1, _n as serviceOption, b as nodeLayer, c as previewsLayer, cr as add, ct as String$1, d as gitLayer, dt as Union, f as Project, fr as getOrUndefined, ft as decodeEffect, gn as scoped, gr as TaggedError, gt as optional, ht as isPattern, i as projectFlows, j as debounce, k as changes, kt as catchTag, lt as Struct, mt as isNonEmpty, nn as retry, ot as ArraySchema, pt as isMaxLength, qn as provideMerge, r as branchPreviewsLayer, s as Previews, sr as Service, st as Record, t as BranchPreviews, tn as result, u as Git, ur as make$1, ut as Undefined, w as RuntimePolicy, xn as suspend, xt as all, yn as succeed, yt as acquireUseRelease, z as mapEffect, zn as effectContext, zt as forEach } from "./branch-previews-
|
|
2
|
-
import { A as adapterRegistryLayer, D as publishChanges, E as liveChannelLayer, F as WorkAdapter, I as WorkError, M as memoryAdapterLayer, N as parseThreadImport, O as AdapterRegistry, P as ThreadAdapter, R as bundledScreensLayer, T as LiveChannel, _ as storeActivityLayer, c as FileReview, d as fileSearchLayer, f as Files, g as StoreActivity, i as fileSavesLayer, j as defineAdapter, k as adapterModuleLoaderLayer, l as fileReviewLayer, n as fileReviewActionsLayer, o as fileMutationsLayer, p as filesLayer, s as fileWriteLockLayer, v as storeLiveLayer, z as sourceScreensLayer } from "./server-
|
|
1
|
+
import { A as concat, At as catch_, B as mapError$1, Bn as effectDiscard, C as ProcessRunner, Cn as tap, Ct as as, D as as$1, E as FileSystem, En as timeoutOrElse, Et as cached, F as fromEffect, Fn as currentTimeMillis, Ft as fail, Gn as mergeAll, Gt as map, H as runForEach, Ht as forkScoped, It as filterOrFail, Jn as succeed$1, K as makeUnsafe, Kn as provide, Kt as mapError, Lt as flatMap, M as drop, Mn as void_, Mt as context, N as empty, Nt as die, On as try_, Ot as catchIf, Pt as ensuring, R as make, Rn as effect, Sn as sync, St as andThen, T as Path, Tt as asVoid, Ut as gen, W as unwrap, Wn as merge, Wt as ignore, Xt as orElseSucceed, Yn as succeedContext, Zn as unwrap$1, _n as serviceOption, b as nodeLayer, c as previewsLayer, cr as add, ct as String$1, d as gitLayer, dt as Union, f as Project, fr as getOrUndefined, ft as decodeEffect, gn as scoped, gr as TaggedError, gt as optional, ht as isPattern, i as projectFlows, j as debounce, k as changes, kt as catchTag, lt as Struct, mt as isNonEmpty, nn as retry, ot as ArraySchema, pt as isMaxLength, qn as provideMerge, r as branchPreviewsLayer, s as Previews, sr as Service, st as Record, t as BranchPreviews, tn as result, u as Git, ur as make$1, ut as Undefined, w as RuntimePolicy, xn as suspend, xt as all, yn as succeed, yt as acquireUseRelease, z as mapEffect, zn as effectContext, zt as forEach } from "./branch-previews-ClkoJ0lM.js";
|
|
2
|
+
import { A as adapterRegistryLayer, D as publishChanges, E as liveChannelLayer, F as WorkAdapter, I as WorkError, M as memoryAdapterLayer, N as parseThreadImport, O as AdapterRegistry, P as ThreadAdapter, R as bundledScreensLayer, T as LiveChannel, _ as storeActivityLayer, c as FileReview, d as fileSearchLayer, f as Files, g as StoreActivity, i as fileSavesLayer, j as defineAdapter, k as adapterModuleLoaderLayer, l as fileReviewLayer, n as fileReviewActionsLayer, o as fileMutationsLayer, p as filesLayer, s as fileWriteLockLayer, v as storeLiveLayer, z as sourceScreensLayer } from "./server-CYvuOSBA.js";
|
|
3
3
|
import { A as parseThreadReplyInput, C as parseAnchor, Cn as WorkValidationError, E as parseThreadFilter, M as parseThreadStatus, N as parseThreadStatusInput, O as parseThreadInput, _n as parseMessage, a as CommentMergeError, an as parseWorkDetail, b as MAX_THREADS, c as parseCommentInput, cn as parseWorkMutationResult, d as parseCommentThread, dn as parseWorkSnapshot, en as parseSectionData, f as revision, fn as parseWorkSync, in as parseWorkCreate, j as parseThreadSnapshot, k as parseThreadLinkInput, l as conversationId, mn as parseWorkUpdate, nn as parseWorkActivity, o as mergeThreads, on as parseWorkItem, p as text$2, pn as parseWorkSyncResult, rn as parseWorkConnection, s as stableJson, tn as parseWorkActionInput, u as object$1, un as parseWorkQuery, vn as parseMessageAuthor, w as parseThread, xn as parseWorkSchema } from "./events-6z5v7Uca.js";
|
|
4
4
|
import { n as PICKER_MODULE_URL, t as pickerPageScript } from "./bridge-B_Blt55E.js";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { _ as taskRoutes, an as parseWorkDetail, cn as parseWorkMutationResult, en as parseSectionData, i as routes, pn as parseWorkSyncResult } from "./events-6z5v7Uca.js";
|
|
2
|
-
import { Bt as Button,
|
|
3
|
-
import { a as predictWorkAction, i as loadItemComments, n as createProjectComments, o as predictWorkCreate, s as predictWorkUpdate, t as defineScreen } from "./screen-
|
|
4
|
-
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-
|
|
5
|
-
import { t as projectWork } from "./project-work-
|
|
6
|
-
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-
|
|
2
|
+
import { Bt as Button, Dn as Text, Ft as CommentThreadDetail, It as CommentThreadItem, K as CommentThreadHeading, Lt as CommentComposer, S as ThreadTaskLinks, Tn as t, _t as taskHref, b as writeOptimistically, bn as toast, dt as conversationLabel, gt as selectedTask, h as storedWorkspace, ht as readConversationLocation, l as projectStore, vt as taskRole, w as ItemDiscussion, x as writeRows, y as plainRow, z as TaskWorkspace } from "./comment-data-B0OLHBGp.js";
|
|
3
|
+
import { a as predictWorkAction, i as loadItemComments, n as createProjectComments, o as predictWorkCreate, s as predictWorkUpdate, t as defineScreen } from "./screen-BtcJmZwj.js";
|
|
4
|
+
import { n as requestTasks, t as TaskRequestError } from "./tasks-request-BtJBlkxV.js";
|
|
5
|
+
import { t as projectWork } from "./project-work-Cy_BpHwR.js";
|
|
6
|
+
import { n as ProjectTaskPicker, t as ProjectThreadLinks } from "./project-thread-links-Nfz9NIny.js";
|
|
7
7
|
import { on, ref } from "remix/component";
|
|
8
8
|
import { Fragment, jsx, jsxs } from "remix/component/jsx-runtime";
|
|
9
9
|
//#region app/client/task-discussion.tsx
|
|
@@ -73,13 +73,13 @@ function TaskDiscussion(handle) {
|
|
|
73
73
|
creating = false;
|
|
74
74
|
handle.update();
|
|
75
75
|
}),
|
|
76
|
-
children: "
|
|
76
|
+
children: t("app.client.taskDiscussion.reply")
|
|
77
77
|
}) : null]
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
function heading(thread) {
|
|
81
81
|
return /* @__PURE__ */ jsx(CommentThreadHeading, {
|
|
82
|
-
location: thread.anchor ? conversationLabel(thread) : "
|
|
82
|
+
location: thread.anchor ? conversationLabel(thread) : t("app.client.taskDiscussion.discussion"),
|
|
83
83
|
actions: handle.props.renderThreadLinks ? void 0 : /* @__PURE__ */ jsx(ProjectThreadLinks, {
|
|
84
84
|
part: "action",
|
|
85
85
|
...threadLinks(thread)
|
|
@@ -113,7 +113,7 @@ function TaskDiscussion(handle) {
|
|
|
113
113
|
let count = threads.reduce((sum, thread) => sum + thread.messageCount, 0);
|
|
114
114
|
return /* @__PURE__ */ jsxs("section", {
|
|
115
115
|
class: "flex min-w-0 flex-col gap-3",
|
|
116
|
-
"aria-label": "
|
|
116
|
+
"aria-label": t("app.client.taskDiscussion.taskDiscussion"),
|
|
117
117
|
mix: mount,
|
|
118
118
|
children: [
|
|
119
119
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -123,7 +123,7 @@ function TaskDiscussion(handle) {
|
|
|
123
123
|
as: "h3",
|
|
124
124
|
variant: "ui",
|
|
125
125
|
weight: "medium",
|
|
126
|
-
children: "
|
|
126
|
+
children: t("app.client.taskDiscussion.discussion")
|
|
127
127
|
}),
|
|
128
128
|
count ? /* @__PURE__ */ jsx(Text, {
|
|
129
129
|
variant: "ui-caption",
|
|
@@ -139,7 +139,7 @@ function TaskDiscussion(handle) {
|
|
|
139
139
|
creating = true;
|
|
140
140
|
handle.update();
|
|
141
141
|
}),
|
|
142
|
-
children: "
|
|
142
|
+
children: t("app.client.taskDiscussion.newDiscussion")
|
|
143
143
|
}) : null
|
|
144
144
|
]
|
|
145
145
|
}),
|
|
@@ -155,18 +155,18 @@ function TaskDiscussion(handle) {
|
|
|
155
155
|
mix: on("click", () => {
|
|
156
156
|
comments.load().then(() => selected ? comments.loadThread(selected, true) : void 0);
|
|
157
157
|
}),
|
|
158
|
-
children: "
|
|
158
|
+
children: t("app.client.taskDiscussion.reloadComments")
|
|
159
159
|
})]
|
|
160
160
|
}) : null,
|
|
161
161
|
!comments.loaded ? /* @__PURE__ */ jsx(Text, {
|
|
162
162
|
variant: "ui-caption",
|
|
163
163
|
tone: "muted",
|
|
164
164
|
role: "status",
|
|
165
|
-
children: "
|
|
165
|
+
children: t("app.client.taskDiscussion.loadingDiscussion")
|
|
166
166
|
}) : !comments.ready ? /* @__PURE__ */ jsx(Text, {
|
|
167
167
|
variant: "ui-caption",
|
|
168
168
|
tone: "muted",
|
|
169
|
-
children: commentsUnavailable
|
|
169
|
+
children: t("app.client.taskDiscussion.commentsUnavailable")
|
|
170
170
|
}) : /* @__PURE__ */ jsxs(Fragment, { children: [threads.length ? threads.map((thread) => !thread.anchor ? /* @__PURE__ */ jsx(ItemDiscussion, {
|
|
171
171
|
thread,
|
|
172
172
|
links: links(thread)
|
|
@@ -201,12 +201,12 @@ function TaskDiscussion(handle) {
|
|
|
201
201
|
}, thread.id)) : /* @__PURE__ */ jsx(Text, {
|
|
202
202
|
variant: "ui-caption",
|
|
203
203
|
tone: "muted",
|
|
204
|
-
children: "
|
|
204
|
+
children: t("app.client.taskDiscussion.noDiscussionYet")
|
|
205
205
|
}), capabilities.create || capabilities.reply && (explicit || threads.some((thread) => !thread.anchor)) ? /* @__PURE__ */ jsxs("div", {
|
|
206
206
|
class: "flex min-w-0 flex-col gap-2",
|
|
207
207
|
children: [capabilities.create && (creating || !explicit && !threads.length) ? /* @__PURE__ */ jsxs("div", {
|
|
208
208
|
class: "flex items-start justify-between gap-2",
|
|
209
|
-
"aria-label": "
|
|
209
|
+
"aria-label": t("app.client.taskDiscussion.newDiscussionTasks"),
|
|
210
210
|
children: [/* @__PURE__ */ jsx(ThreadTaskLinks, {
|
|
211
211
|
itemIds: draftItemIds,
|
|
212
212
|
items: handle.props.items ?? [],
|
|
@@ -224,19 +224,19 @@ function TaskDiscussion(handle) {
|
|
|
224
224
|
creating = false;
|
|
225
225
|
handle.update();
|
|
226
226
|
}),
|
|
227
|
-
children: "
|
|
227
|
+
children: t("app.client.taskDiscussion.cancel")
|
|
228
228
|
}) : null]
|
|
229
|
-
}) : threads.length > 1 ? /* @__PURE__ */
|
|
229
|
+
}) : threads.length > 1 ? /* @__PURE__ */ jsx(Text, {
|
|
230
230
|
variant: "ui-caption",
|
|
231
231
|
tone: "muted",
|
|
232
|
-
children:
|
|
232
|
+
children: t("app.client.taskDiscussion.replyingTo", { name: reply?.messages[0]?.author.name ?? t("app.client.taskDiscussion.theDiscussion") })
|
|
233
233
|
}) : null, /* @__PURE__ */ jsx(CommentComposer, {
|
|
234
|
-
label: "
|
|
235
|
-
placeholder: "
|
|
234
|
+
label: t("app.client.taskDiscussion.addTaskComment"),
|
|
235
|
+
placeholder: t("app.client.taskDiscussion.addContextPlaceholder"),
|
|
236
236
|
busy: comments.busy || replyPending,
|
|
237
237
|
class: "w-full",
|
|
238
238
|
onSubmit: async (body) => {
|
|
239
|
-
if (replyPending) throw new Error("
|
|
239
|
+
if (replyPending) throw new Error(t("app.client.taskDiscussion.loadBeforeReplying"));
|
|
240
240
|
if (reply && capabilities.reply) {
|
|
241
241
|
await write({
|
|
242
242
|
id: reply.id,
|
|
@@ -286,7 +286,7 @@ async function loadTask(token, id, schema, signal, conversationId) {
|
|
|
286
286
|
schema
|
|
287
287
|
]);
|
|
288
288
|
let detail = parseWorkDetail(value, resolved);
|
|
289
|
-
if (detail.item.id !== id) throw new Error("
|
|
289
|
+
if (detail.item.id !== id) throw new Error(t("app.client.projectTasks.differentTaskRefresh"));
|
|
290
290
|
return {
|
|
291
291
|
detail,
|
|
292
292
|
discussion
|
|
@@ -313,7 +313,7 @@ async function loadTasks(project, signal, href, conversationId) {
|
|
|
313
313
|
if (!stored || cause instanceof TaskRequestError) throw cause;
|
|
314
314
|
return open(projectWork(project).refresh(signal).then((value) => value.schema));
|
|
315
315
|
}).catch((cause) => {
|
|
316
|
-
taskError = cause instanceof Error ? cause.message : "
|
|
316
|
+
taskError = cause instanceof Error ? cause.message : t("app.client.projectTasks.couldNotLoadTask");
|
|
317
317
|
return null;
|
|
318
318
|
}) : null;
|
|
319
319
|
try {
|
|
@@ -331,7 +331,7 @@ async function loadTasks(project, signal, href, conversationId) {
|
|
|
331
331
|
return {
|
|
332
332
|
store,
|
|
333
333
|
stored: false,
|
|
334
|
-
error: cause instanceof Error ? cause.message : "
|
|
334
|
+
error: cause instanceof Error ? cause.message : t("app.client.projectTasks.couldNotLoadTasks")
|
|
335
335
|
};
|
|
336
336
|
}
|
|
337
337
|
}
|
|
@@ -385,7 +385,7 @@ function ProjectTasks(handle) {
|
|
|
385
385
|
};
|
|
386
386
|
}
|
|
387
387
|
function currentSchema() {
|
|
388
|
-
if (!workspace) throw new Error("
|
|
388
|
+
if (!workspace) throw new Error(t("app.client.projectTasks.refreshBeforeChanges"));
|
|
389
389
|
return workspace.schema;
|
|
390
390
|
}
|
|
391
391
|
async function write(url, body, parse) {
|
|
@@ -422,7 +422,7 @@ function ProjectTasks(handle) {
|
|
|
422
422
|
...body,
|
|
423
423
|
expectedRevision: prior.to
|
|
424
424
|
} : body, (value) => parseWorkMutationResult(value, currentSchema()));
|
|
425
|
-
if (id && result.item.id !== id) throw new Error("
|
|
425
|
+
if (id && result.item.id !== id) throw new Error(t("app.client.projectTasks.differentTaskRefreshRetry"));
|
|
426
426
|
await accepted(result.item);
|
|
427
427
|
settled.resolve(from ? {
|
|
428
428
|
from,
|
|
@@ -434,7 +434,7 @@ function ProjectTasks(handle) {
|
|
|
434
434
|
return item;
|
|
435
435
|
} catch (cause) {
|
|
436
436
|
settled.resolve(null);
|
|
437
|
-
if (!handle.signal.aborted) toast.error("
|
|
437
|
+
if (!handle.signal.aborted) toast.error(t("app.client.projectTasks.undidTaskChange"), { description: cause instanceof Error ? cause.message : t("app.client.projectTasks.writeNotConfirmed") });
|
|
438
438
|
refreshAfterWrite();
|
|
439
439
|
throw cause;
|
|
440
440
|
} finally {
|
|
@@ -459,7 +459,7 @@ function ProjectTasks(handle) {
|
|
|
459
459
|
act: (id, action) => save(routes.tasksApi.mutate.href({ id }), action, predicted(id, (item) => predictWorkAction(currentSchema(), item, action)), id),
|
|
460
460
|
get: async (id) => {
|
|
461
461
|
let next = await requestTasks(routes.tasksApi.show.href({ id }), project.token, handle.signal, (value) => parseWorkDetail(value, currentSchema()));
|
|
462
|
-
if (next.item.id !== id) throw new Error("
|
|
462
|
+
if (next.item.id !== id) throw new Error(t("app.client.projectTasks.differentTaskRefresh"));
|
|
463
463
|
return next.item;
|
|
464
464
|
},
|
|
465
465
|
section: (id, section, signal = handle.signal) => requestTasks(routes.tasksApi.section.href({
|
|
@@ -490,7 +490,7 @@ function ProjectTasks(handle) {
|
|
|
490
490
|
try {
|
|
491
491
|
await work.refresh(AbortSignal.any([handle.signal, controller.signal]));
|
|
492
492
|
} catch (cause) {
|
|
493
|
-
if (!controller.signal.aborted && !handle.signal.aborted) error = cause instanceof Error ? cause.message : "
|
|
493
|
+
if (!controller.signal.aborted && !handle.signal.aborted) error = cause instanceof Error ? cause.message : t("app.client.projectTasks.couldNotLoadTasks");
|
|
494
494
|
} finally {
|
|
495
495
|
if (listRequest === controller) {
|
|
496
496
|
loading = false;
|
|
@@ -526,10 +526,10 @@ function ProjectTasks(handle) {
|
|
|
526
526
|
}
|
|
527
527
|
let next = await requestTasks(routes.tasksApi.show.href({ id }), project.token, signal, (value) => parseWorkDetail(value, currentSchema()));
|
|
528
528
|
if (controller.signal.aborted || id !== selectedId) return;
|
|
529
|
-
if (next.item.id !== id) throw new Error("
|
|
529
|
+
if (next.item.id !== id) throw new Error(t("app.client.projectTasks.differentTaskRefresh"));
|
|
530
530
|
detail = next;
|
|
531
531
|
} catch (cause) {
|
|
532
|
-
if (!controller.signal.aborted && !handle.signal.aborted && id === selectedId) detailError = cause instanceof Error ? cause.message : "
|
|
532
|
+
if (!controller.signal.aborted && !handle.signal.aborted && id === selectedId) detailError = cause instanceof Error ? cause.message : t("app.client.projectTasks.couldNotLoadTask");
|
|
533
533
|
} finally {
|
|
534
534
|
if (detailRequest === controller) {
|
|
535
535
|
detailLoading = false;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { i as routes, sn as parseWorkItemRef, un as parseWorkQuery } from "./events-6z5v7Uca.js";
|
|
2
|
+
import { Tn as t } from "./comment-data-B0OLHBGp.js";
|
|
2
3
|
import { createMultiMatcher } from "remix/route-pattern/match";
|
|
3
4
|
//#region app/client/tasks-request.ts
|
|
4
5
|
var reads = createMultiMatcher();
|
|
@@ -38,7 +39,7 @@ function validEndpoint(url, write) {
|
|
|
38
39
|
* @returns A validated DTO; error responses never become an empty successful view.
|
|
39
40
|
*/
|
|
40
41
|
async function requestTasks(url, token, signal, parse, fetcher = fetch, write) {
|
|
41
|
-
if (!validEndpoint(url, Boolean(write))) throw new Error("
|
|
42
|
+
if (!validEndpoint(url, Boolean(write))) throw new Error(t("app.client.tasksRequest.invalidEndpoint"));
|
|
42
43
|
signal.throwIfAborted();
|
|
43
44
|
let response = await fetcher(url, {
|
|
44
45
|
method: write ? "POST" : "GET",
|
|
@@ -53,7 +54,7 @@ async function requestTasks(url, token, signal, parse, fetcher = fetch, write) {
|
|
|
53
54
|
signal
|
|
54
55
|
});
|
|
55
56
|
let reader = response.body?.getReader();
|
|
56
|
-
if (!reader) throw new Error("
|
|
57
|
+
if (!reader) throw new Error(t("app.client.tasksRequest.emptyResponse"));
|
|
57
58
|
let chunks = [];
|
|
58
59
|
let size = 0;
|
|
59
60
|
try {
|
|
@@ -62,7 +63,7 @@ async function requestTasks(url, token, signal, parse, fetcher = fetch, write) {
|
|
|
62
63
|
let part = await reader.read();
|
|
63
64
|
if (part.done) break;
|
|
64
65
|
size += part.value.byteLength;
|
|
65
|
-
if (size > 4194304) throw new Error("
|
|
66
|
+
if (size > 4194304) throw new Error(t("app.client.tasksRequest.responseTooLarge"));
|
|
66
67
|
chunks.push(part.value);
|
|
67
68
|
}
|
|
68
69
|
} catch (cause) {
|
|
@@ -81,15 +82,15 @@ async function requestTasks(url, token, signal, parse, fetcher = fetch, write) {
|
|
|
81
82
|
try {
|
|
82
83
|
value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
83
84
|
} catch {
|
|
84
|
-
throw new Error("
|
|
85
|
+
throw new Error(t("app.client.tasksRequest.invalidResponse"));
|
|
85
86
|
}
|
|
86
87
|
if (!response.ok) {
|
|
87
|
-
let error = value && typeof value === "object" && "error" in value && typeof value.error === "string" ? value.error.slice(0, 1e3) : "
|
|
88
|
+
let error = value && typeof value === "object" && "error" in value && typeof value.error === "string" ? value.error.slice(0, 1e3) : t("app.client.tasksRequest.loadFailed");
|
|
88
89
|
let code = value && typeof value === "object" && "code" in value && typeof value.code === "string" && /^[a-z][a-z-]{0,63}$/.test(value.code) ? value.code : "request";
|
|
89
90
|
let currentRevision;
|
|
90
91
|
if (value && typeof value === "object" && "currentRevision" in value) {
|
|
91
92
|
let revision = value.currentRevision;
|
|
92
|
-
if (revision !== null && (typeof revision !== "string" || !revision.trim() || revision.length > 256 || revision.includes("\0"))) throw new Error("
|
|
93
|
+
if (revision !== null && (typeof revision !== "string" || !revision.trim() || revision.length > 256 || revision.includes("\0"))) throw new Error(t("app.client.tasksRequest.invalidConflictResponse"));
|
|
93
94
|
currentRevision = revision;
|
|
94
95
|
}
|
|
95
96
|
throw new TaskRequestError(error, code, currentRevision);
|
package/dist/server/capture.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Qt as provide, Sn as sync, Ut as gen, Zt as promise, a as followCapture, b as nodeLayer, bt as addFinalizer, d as gitLayer, gn as scoped, i as projectFlows, l as PreviewSession, n as branchIndexName, o as startBranchBuild, p as createProjectContext, qn as provideMerge, sn as runPromise } from "./assets/branch-previews-
|
|
1
|
+
import { Qt as provide, Sn as sync, Ut as gen, Zt as promise, a as followCapture, b as nodeLayer, bt as addFinalizer, d as gitLayer, gn as scoped, i as projectFlows, l as PreviewSession, n as branchIndexName, o as startBranchBuild, p as createProjectContext, qn as provideMerge, sn as runPromise } from "./assets/branch-previews-ClkoJ0lM.js";
|
|
2
2
|
import { t as pickerPageScript } from "./assets/bridge-B_Blt55E.js";
|
|
3
3
|
//#region ../previews/src/server/storage.ts
|
|
4
4
|
/**
|
package/dist/server/migration.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Kt as mapError, Lt as flatMap, On as try_, Ut as gen, _ as resolveStorage, f as Project, p as createProjectContext, sn as runPromise, u as Git } from "./assets/branch-previews-
|
|
2
|
-
import { H as make, I as WorkError, O as AdapterRegistry } from "./assets/server-
|
|
1
|
+
import { Kt as mapError, Lt as flatMap, On as try_, Ut as gen, _ as resolveStorage, f as Project, p as createProjectContext, sn as runPromise, u as Git } from "./assets/branch-previews-ClkoJ0lM.js";
|
|
2
|
+
import { H as make, I as WorkError, O as AdapterRegistry } from "./assets/server-CYvuOSBA.js";
|
|
3
3
|
import { j as parseThreadSnapshot, w as parseThread } from "./assets/events-6z5v7Uca.js";
|
|
4
|
-
import { n as storageLayer, r as readGitThreadImports } from "./assets/services-
|
|
4
|
+
import { n as storageLayer, r as readGitThreadImports } from "./assets/services-DK4fqrlF.js";
|
|
5
5
|
//#region app/server/comment-migration.ts
|
|
6
6
|
function identity(metadata) {
|
|
7
7
|
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) return null;
|
package/dist/server/runtime.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { An as uninterruptible, Dn as tryPromise, Kt as mapError, Rn as effect, Ut as gen, Zt as promise, p as createProjectContext, qn as provideMerge, sn as runPromise, sr as Service, vt as acquireRelease, x as readText } from "./assets/branch-previews-
|
|
2
|
-
import { B as sharedModules, H as make } from "./assets/server-
|
|
3
|
-
import { n as listen, r as createApp, t as ServerError } from "./assets/listener-
|
|
4
|
-
import { t as applicationLayer } from "./assets/services-
|
|
1
|
+
import { An as uninterruptible, Dn as tryPromise, Kt as mapError, Rn as effect, Ut as gen, Zt as promise, p as createProjectContext, qn as provideMerge, sn as runPromise, sr as Service, vt as acquireRelease, x as readText } from "./assets/branch-previews-ClkoJ0lM.js";
|
|
2
|
+
import { B as sharedModules, H as make } from "./assets/server-CYvuOSBA.js";
|
|
3
|
+
import { n as listen, r as createApp, t as ServerError } from "./assets/listener-o1STuLju.js";
|
|
4
|
+
import { t as applicationLayer } from "./assets/services-DK4fqrlF.js";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
//#region app/server/runtime.ts
|
|
7
7
|
var BudListener = class extends Service()("bud/Listener") {};
|
package/dist/server/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Kn as provide, Rn as effect, Ut as gen, b as nodeLayer, sr as Service, x as readText } from "./assets/branch-previews-
|
|
2
|
-
import { H as make } from "./assets/server-
|
|
3
|
-
import { n as listen, r as createApp } from "./assets/listener-
|
|
1
|
+
import { Kn as provide, Rn as effect, Ut as gen, b as nodeLayer, sr as Service, x as readText } from "./assets/branch-previews-ClkoJ0lM.js";
|
|
2
|
+
import { H as make } from "./assets/server-CYvuOSBA.js";
|
|
3
|
+
import { n as listen, r as createApp } from "./assets/listener-o1STuLju.js";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
//#region server.ts
|
|
6
6
|
var Listener = class extends Service()("bud/StandaloneListener") {};
|
|
@@ -347,6 +347,8 @@ interface BudConfig {
|
|
|
347
347
|
* `{ light: { primary: '#f5b700' } }`. Anything left out keeps Bud's own.
|
|
348
348
|
*/
|
|
349
349
|
theme?: BudTheme;
|
|
350
|
+
/** The language of Bud's interface: `en` (the default) or `de`. */
|
|
351
|
+
locale?: "en" | "de";
|
|
350
352
|
/**
|
|
351
353
|
* What finds the element under a comment: `bud:dom` (the default), `bud:react-grab` for React
|
|
352
354
|
* projects with React Grab installed, or a ./ module in your project exporting a picker adapter.
|
|
@@ -407,6 +409,7 @@ interface ResolvedBudConfig {
|
|
|
407
409
|
files: ResolvedFiles;
|
|
408
410
|
logo: ResolvedLogo | null;
|
|
409
411
|
theme: ResolvedTheme;
|
|
412
|
+
locale: "en" | "de";
|
|
410
413
|
picker: ResolvedPicker;
|
|
411
414
|
branches: ResolvedBranches;
|
|
412
415
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ResolvedBudConfig } from "./config-
|
|
1
|
+
import { i as ResolvedBudConfig } from "./config-DIC2cf_S.js";
|
|
2
2
|
//#region app/server/hosted/contract.d.ts
|
|
3
3
|
/** How a hosted Bud's captures stand, as its host reports them. */
|
|
4
4
|
interface RemoteBranchState {
|
|
@@ -92,6 +92,8 @@ interface HostedRequestContext {
|
|
|
92
92
|
* browser never chooses one.
|
|
93
93
|
*/
|
|
94
94
|
author?: HostedAuthor;
|
|
95
|
+
/** The person's language for Bud's interface, `en` or `de`; the project's when absent. */
|
|
96
|
+
locale?: string;
|
|
95
97
|
}
|
|
96
98
|
/** A running hosted Bud. */
|
|
97
99
|
interface HostedApp {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ResolvedBudConfig } from "./assets/config-
|
|
1
|
+
import { i as ResolvedBudConfig } from "./assets/config-DIC2cf_S.js";
|
|
2
2
|
//#region src/companion.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* The contract between a host, such as `@bud.sh/app-vite-plugin` and its CLI, and the companion
|
package/dist/types/hosted.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { i as ResolvedBudConfig } from "./assets/config-
|
|
2
|
-
import { a as HostedAuthor, c as HostedStorage, i as HostedAppOptions, l as RemoteBranchState, n as CreateHostedApp, o as HostedDatabase, r as HostedApp, s as HostedRequestContext, t as BranchRemote, u as hostedScreenModules } from "./assets/contract-
|
|
1
|
+
import { i as ResolvedBudConfig } from "./assets/config-DIC2cf_S.js";
|
|
2
|
+
import { a as HostedAuthor, c as HostedStorage, i as HostedAppOptions, l as RemoteBranchState, n as CreateHostedApp, o as HostedDatabase, r as HostedApp, s as HostedRequestContext, t as BranchRemote, u as hostedScreenModules } from "./assets/contract-CAT-XFNq.js";
|
|
3
3
|
//#region src/hosted.server.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Creates a hosted Bud: Bud's own routes for the canvas and tasks on the host's stores.
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as ElementSource } from "./assets/canvas-anchor-CYU3qBPx.js";
|
|
2
|
-
import { a as defineConfig, c as files, l as pages, n as BudRoute, o as BudScreen, s as canvas, t as BudConfig, u as tasks } from "./assets/config-
|
|
2
|
+
import { a as defineConfig, c as files, l as pages, n as BudRoute, o as BudScreen, s as canvas, t as BudConfig, u as tasks } from "./assets/config-DIC2cf_S.js";
|
|
3
3
|
//#region ../picker/src/lib/types.d.ts
|
|
4
4
|
/** What a framework adds about an element, beyond what the page's DOM shows. */
|
|
5
5
|
interface PickerDescription {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as BudTheme } from "./assets/config-
|
|
2
|
-
import { a as HostedAuthor, s as HostedRequestContext } from "./assets/contract-
|
|
1
|
+
import { d as BudTheme } from "./assets/config-DIC2cf_S.js";
|
|
2
|
+
import { a as HostedAuthor, s as HostedRequestContext } from "./assets/contract-CAT-XFNq.js";
|
|
3
3
|
//#region src/node-host.server.d.ts
|
|
4
4
|
/** Where the project's Bud on Cloudflare is, and the secret its remote API takes. */
|
|
5
5
|
export interface NodeHostOptions {
|
package/dist/types/screen.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as ProjectInfo } from "./assets/config-
|
|
1
|
+
import { r as ProjectInfo } from "./assets/config-DIC2cf_S.js";
|
|
2
2
|
import { i as TaskDesign } from "./assets/task-design-xJOhRNWh.js";
|
|
3
3
|
import { RequestMethod, Route, RouteMap } from "remix/routes";
|
|
4
4
|
import { Handle, Props, RemixNode } from "remix/component";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./jsx-B4XNFIzB.js";import{t}from"./component-DWct-Tq6.js";import{n}from"./on-mixin-iWnqUzq5.js";import{n as r}from"./attrs-mixin-CmlG_FtV.js";import{c as i,l as a,t as o}from"./loader-Q6-HPKft.js";import{t as s}from"./screen-Dfvzj6n2.js";import{A as c,L as l,R as u,j as d,u as f,xt as p}from"./task-design-bktfn_Ok.js";import{At as m,G as h,H as g,U as _,jt as v,s as y,st as b}from"./project-threads-DezXiVK6.js";import{i as x,n as S,t as C}from"./project-comments-D897aU5O.js";import{i as w,n as T,t as E}from"./project-branches-DpxQx-T4.js";import{t as D}from"./project-thread-links-Bp_TseD0.js";var O=760,k=n(`pointerdown`,e=>e.stopPropagation());function A(e,t,n){let r=e.capture.width*t,i=e.capture.thumbnails.map(e=>e.width),a=e=>{let t=i.findIndex(t=>r<=t*e);return t<0?`slices`:t},o=e=>e===`slices`?i.length:e,s=a(1);return n===void 0||o(s)>=o(n)||o(a(.85))<o(n)?s:n}function j(e,t){return e?.get(t)??{visible:!0,top:0,bottom:1/0,density:1}}function M(e,t){let n=0;return e.capture.tiles.map((r,i)=>{let a={tile:r,index:i,top:n,src:e.srcs[i]};return n+=r.height,{...a,shownTo:Math.min(n,t)}})}function N(t){let{route:r,previews:s}=t.props,c=r.pageId??r.id,l=()=>w(t.props.theme,t.props.size),u=``,d,f,m=``;function h(e){return t.props.topOnly?e.capture.tiles[0]?.height??e.capture.height:e.capture.height}function g(){let{preview:e,images:n}=s.get(c),r=n[l()]??f,i=r?h(r):e?.captures[0]?.height??(e?.state===`failed`?O:0);if(!e||!i)return;let a=`${i}:${e.path}:${r?.capture.hash??``}`;u!==a&&(u=a,t.props.onLayout({height:i,path:e.path,pins:r?.capture.pins}))}function v(e){let n=j(t.props.viewport,r.id);if(!n.visible||d===void 0)return{thumbnail:void 0,slices:[]};if(d===`slices`&&e.srcs.length){let t=Math.min(n.bottom,h(e));return{thumbnail:e.thumbnails.at(-1),slices:M(e,t).filter(({src:e,top:t,shownTo:r})=>e&&t<r&&r>n.top)}}let i=d===`slices`?e.thumbnails.length-1:d;return{thumbnail:e.thumbnails[i]??e.thumbnails.at(-1),slices:[]}}function y(){let e=s.get(c).images[l()];if(!e||e===f)return;if(!f||f.capture.hash===e.capture.hash){f=e;return}if(d===`slices`&&!e.srcs.length){s.slices(c,t.props.theme,t.props.size);return}let n=`${e.capture.hash}:${d}`;if(m===n)return;m=n;let r=e,{thumbnail:i,slices:a}=v(r);Promise.all([i,...a.map(({src:e})=>e)].flatMap(e=>{if(!e)return[];let t=new Image;return t.src=e,[t.decode().catch(()=>{})]})).then(()=>{m!==n||t.signal.aborted||(m=``,f=s.get(c).images[l()]??r,g(),t.update())})}let b=s.watch(c,()=>{y(),g(),t.update()}),x=t.props.viewport?.watch(r.id,()=>void t.update());return t.signal.addEventListener(`abort`,()=>{b(),x?.()},{once:!0}),()=>{let{mode:l,origin:u,theme:m,viewport:b,size:x}=t.props,{preview:S,images:C,refreshing:T,error:E}=s.get(c);t.queueTask(()=>{s.show(c,m,x),g()});let D=C[w(m,x)]??C[w(m===`dark`?`light`:`dark`,x)];D&&(!f||f.capture.theme!==D.capture.theme)?f=D:y();let O=f,M=E||(S?.captures.length?null:S?.error),N=new URL(r.path,u).href;if(O){let i=j(b,r.id);if(d=A(O,i.density,d),i.visible&&d===`slices`&&!O.srcs.length){let{theme:e}=O.capture;t.queueTask(()=>s.slices(c,e,x))}let a=h(O),{width:o}=O.capture,{thumbnail:u,slices:f}=v(O);return e(`div`,{role:`img`,"aria-label":`${r.title} preview`,"data-detail":i.visible?f.length?`slices`:u?`thumbnail`:`pending`:`hidden`,class:`relative select-none overflow-hidden ${l===`comment`?`cursor-crosshair`:``}`,style:{height:a},mix:[n(`pointerdown`,e=>{l!==`pan`&&e.stopPropagation()}),n(`click`,e=>{if(l!==`comment`||S?.path!==r.path)return;e.stopPropagation();let n=e.currentTarget.getBoundingClientRect(),i={x:(e.clientX-n.left)*o/n.width,y:(e.clientY-n.top)*a/n.height};t.props.onPick({element:null,path:r.path,..._(i,o),found:s.describe(c,O.capture,i.x,i.y)})})],children:[u?e(`img`,{src:u,alt:``,decoding:`async`,draggable:!1,class:`absolute inset-x-0 top-0 block w-full max-w-none`,style:{height:O.capture.height}}):null,f.map(({tile:t,index:n,top:r,src:i})=>e(`img`,{src:i,alt:``,decoding:`async`,draggable:!1,class:`absolute inset-x-0 block w-full max-w-none`,style:{top:r,height:t.height+ +(n<O.capture.tiles.length-1)}},t.hash))]})}return S?.state===`failed`||M&&!T?e(`div`,{class:`absolute inset-0 flex flex-col items-center justify-center gap-3 p-12 text-center`,role:`status`,children:[e(p,{name:`circle-alert`,size:24,class:`text-muted`}),e(a,{variant:`title`,weight:`semibold`,class:`text-ink`,children:[r.title,` couldn't be captured`]}),M?e(a,{variant:`ui`,class:`max-w-md text-muted`,children:M}):null,e(`div`,{class:`mt-2 flex gap-2`,children:[e(i,{variant:`secondary`,disabled:T,mix:[k,n(`click`,()=>void s.refresh(c))],children:e(a,{variant:`ui`,children:`Try again`})}),e(`a`,{href:N,target:`_blank`,rel:`noreferrer`,class:`bud-interaction bud-control flex h-control items-center rounded-lg px-3 text-ink`,mix:k,children:e(a,{variant:`ui`,children:`Open page`})})]})]}):e(`div`,{class:`absolute inset-0 flex items-center justify-center`,children:e(o,{label:`Capturing ${r.title}…`})})}}function ee(r){let{route:i,previews:a}=r.props,o=i.pageId??i.id,s=a.watch(o,()=>void r.update());return r.signal.addEventListener(`abort`,s,{once:!0}),()=>{let{preview:r,refreshing:s}=a.get(o),c=s||!!r?.updating,d=r?.state===`ready`?r.error:null;return e(t,{children:[d?e(u,{label:d,children:e(`span`,{tabIndex:0,role:`img`,"aria-label":d,class:`pointer-events-auto ms-1 inline-flex text-amber-500`,mix:k,children:e(p,{name:`circle-alert`,size:13})})}):null,e(l,{icon:`sync`,label:`Refresh ${i.title}`,tooltip:!0,size:`small`,iconSize:13,disabled:s,"aria-busy":c?`true`:void 0,class:`pointer-events-auto ms-0.5 text-muted hover:text-ink ${c?`[&_svg]:animate-spin`:``}`,mix:[k,n(`click`,()=>void a.refresh(o))]})]})}}var P=new Map;function F(){return new Worker(new URL(`/assets/difference-worker-BpqPBs5g.js`,``+import.meta.url),{type:`module`})}function I(e){let{routes:t,before:n,after:r,theme:i,signal:a}=e,o=new Map,s={get:e=>o.get(e)??{state:`pending`,regions:[]},progress:{compared:0,total:t.length},done:t.length===0},c,l=0,u=new Map;function d(e){c??=F(),c.onmessage=e=>{u.get(e.data.id)?.(e.data),u.delete(e.data.id)};let t=l++;return new Promise(n=>{u.set(t,n),c.postMessage({...e,id:t})})}a.addEventListener(`abort`,()=>c?.terminate(),{once:!0});async function f(e,t){let[a,o]=await Promise.all([n.picture(e,i,t),r.picture(e,i,t)]);if(!a||!o)return{state:`missing`,regions:[],before:a?.capture,after:o?.capture};let s={before:a.capture,after:o.capture};if(a.capture.hash===o.capture.hash)return{state:`same`,regions:[],...s};let c=`${a.capture.hash}\0${o.capture.hash}`,l=P.get(c);if(!l){let e=e=>({images:e.images,heights:e.capture.tiles.map(e=>e.height),scale:e.capture.scale}),t=await d({width:a.capture.width,before:e(a),after:e(o)});if(`error`in t)return{state:`failed`,regions:[],error:t.error,...s};l=t.regions,P.set(c,l)}return{state:l.length?`different`:`same`,regions:l,...s}}return(async()=>{for(let n of t){if(a.aborted)return;let r=await f(n.page,n.size).catch(e=>({state:`failed`,regions:[],error:e instanceof Error?e.message:`The pictures could not be compared.`}));if(a.aborted)return;o.set(n.id,r),s.progress={compared:s.progress.compared+1,total:t.length},e.onChange(n.id)}s.done=!0,c?.terminate(),c=void 0,e.onChange(null)})(),s}var L=40,R=48;function z(e){let t=0;return{slots:e.map(e=>{let n={top:t,height:L+Math.max(e.before.height,e.after.height,1)};return t+=n.height+R,n}),height:Math.max(1,t-R)}}var B={changed:`Changed`,added:`Added`,removed:`Removed`};function V(e){let t=new Map;return e.addEventListener(`abort`,()=>{for(let e of t.values())URL.revokeObjectURL(e)},{once:!0}),e=>{let n=t.get(e);return n||t.set(e,n=URL.createObjectURL(e)),n}}function te(t){let n=V(t.signal),r=0;return()=>{let{route:i,side:o,label:s,regions:c,viewport:l}=t.props,{slots:u,height:d}=z(c);r!==d&&(r=d,t.queueTask(()=>t.props.onLayout({height:d,path:i.path})));let f=l?.get(i.id)?.visible??!0;return e(`div`,{role:`img`,"aria-label":`${i.title}, ${s}`,"data-difference":o,"data-changes":c.length,class:`relative select-none bg-[var(--bud-main)]`,style:{height:`${d}px`},children:c.map((t,r)=>{let i=t[o],c=t.crops[o],l=u[r];return e(`div`,{"data-kind":t.kind,"data-span":`${i.y} ${i.height}`,class:`absolute inset-x-0`,style:{top:`${l.top}px`,height:`${l.height}px`},children:[e(`div`,{class:`flex items-center gap-2 px-1`,style:{height:`${L}px`},children:[e(a,{variant:`ui`,weight:`medium`,children:`Change ${r+1}`}),e(a,{variant:`ui`,tone:`muted`,children:B[t.kind]})]}),c&&i.height>0?e(`div`,{class:`relative overflow-hidden`,style:{height:`${i.height}px`},children:[f?e(`img`,{alt:``,src:n(c),draggable:!1,class:`block h-full w-full`}):null,t.kind===`changed`?e(`div`,{"aria-hidden":`true`,class:`pointer-events-none absolute inset-y-0 rounded-sm outline-2 outline-red-500/70`,style:{left:`${t.x}px`,width:`${Math.max(2,t.width)}px`}}):null]}):e(`div`,{class:`grid h-24 place-items-center rounded-lg border border-dashed border-line`,children:e(a,{variant:`ui`,tone:`muted`,children:`Not in ${s}`})})]},r)})})}}function ne(t){let i=V(t.signal),o=e=>{let{slides:n,index:r}=t.props;n.length&&t.props.onIndex((r+e+n.length)%n.length)};return()=>{let{slides:s,index:c,beforeLabel:u,afterLabel:d}=t.props,f=s[Math.min(c,s.length-1)],p=(t,n)=>{let r=f?.region.crops[t];return e(`figure`,{class:`m-0 flex min-w-0 flex-col gap-2`,children:[e(`figcaption`,{children:e(a,{variant:`ui`,tone:`muted`,children:n})}),r&&f.region[t].height>0?e(`div`,{class:`relative`,children:[e(`img`,{alt:`${f.route.title}, ${n}`,src:i(r),class:`block w-full rounded-lg ring-1 ring-line`}),f.region.kind===`changed`?e(`div`,{"aria-hidden":`true`,class:`pointer-events-none absolute inset-y-0 rounded-sm outline-2 outline-red-500/70`,style:{left:`${f.region.x/f.width*100}%`,width:`max(2px, ${f.region.width/f.width*100}%)`}}):null]}):e(`div`,{class:`grid h-32 place-items-center rounded-lg border border-dashed border-line`,children:e(a,{variant:`ui`,tone:`muted`,children:`Not in ${n}`})})]})};return e(`section`,{role:`dialog`,"aria-label":`Differences slideshow`,class:`bud-surface absolute inset-0 z-40 flex flex-col bg-[var(--bud-main)]`,mix:r((e,n)=>{e.focus(),e.ownerDocument.addEventListener(`keydown`,e=>{if(e.key===`ArrowRight`)o(1);else if(e.key===`ArrowLeft`)o(-1);else if(e.key===`Escape`)t.props.onClose();else return;e.preventDefault()},{signal:n})}),tabindex:-1,children:[e(`header`,{class:`flex h-12 shrink-0 items-center gap-2 border-b border-line ps-4 pe-2`,children:[e(`div`,{class:`flex min-w-0 flex-1 items-baseline gap-2`,children:[e(a,{variant:`ui`,weight:`medium`,class:`truncate`,children:f?.route.title??`No differences`}),f?e(a,{variant:`ui`,tone:`muted`,class:`shrink-0 tabular-nums`,role:`status`,children:`${B[f.region.kind]} · change ${f.index+1} of ${f.count} · ${c+1} / ${s.length}`}):null]}),e(l,{tooltip:!0,icon:`chevron-left`,label:`Previous change`,disabled:s.length<2,mix:n(`click`,()=>o(-1))}),e(l,{tooltip:!0,icon:`chevron-right`,label:`Next change`,disabled:s.length<2,mix:n(`click`,()=>o(1))}),e(l,{tooltip:!0,icon:`close`,label:`Close slideshow`,shortcut:`escape`,mix:n(`click`,()=>t.props.onClose())})]}),e(`div`,{class:`min-h-0 flex-1 overflow-auto p-4`,children:f?e(`div`,{class:`grid gap-4 md:grid-cols-2`,children:[p(`before`,u),p(`after`,d)]}):null})]})}}function H(e){return!(!e.anchor||`type`in e.anchor)}function U(e,t){let{themes:n}=e.previews,r=m(t),i=document.documentElement.dataset.theme;return n.find(e=>e===r)??n.find(e=>e===i)??n[0]}function W(r){let i=r.props.project,a,s=C({store:y(i),token:i.token,signal:r.signal,initial:r.props.comments,onChange:()=>{r.update()}});r.props.comments.stored&&s.load();let u=i.workingTree?null:i.main??`main`,p=`bud:canvas-branch:${i.id}`,_=m(p),S=typeof _==`string`?_:u,w=!0,O=!1,k=E({project:i,signal:r.signal,onChange:()=>{S&&S!==u&&k.loaded&&!k.list.branches.some(e=>e.name===S&&e.active)?M(u):r.update()}}),A=new AbortController;r.signal.addEventListener(`abort`,()=>A.abort(),{once:!0});let j=T({project:i,signal:A.signal,branch:S});function M(e){if(O=!1,e===S)return void r.update();S=e,v(p,e),A.abort(),A=new AbortController,j=T({project:i,signal:A.signal,branch:e}),r.update()}let P=`bud:preview-theme:${i.id}`,F=U(i,P),L=`bud:preview-top-only:${i.id}`,R=m(L)===!0,z=i.previews.viewports,B=z.length>1,V=`bud:canvas-viewport:${i.id}`,W=m(V),G=B&&typeof W==`string`&&(W===`all`||z.some(e=>e.id===W))?W:B?`all`:z[0].id;function K(e){e!==G&&(G=e,v(V,e),r.update())}function q(){let e=G===`all`?z:z.filter(e=>e.id===G);return i.routes.flatMap(t=>e.map(e=>({route:t,size:e,artboard:B?{...t,id:`${t.id}@${e.id}`,pageId:t.id,width:e.width,caption:String(e.width)}:t})))}let J=`bud:canvas-compare:${i.id}`,Y=null,X,Z;function Q(){let e=i.workingTree?[{value:``,label:`Working tree`}]:[];for(let t of k.list.branches)t.active&&t.captured&&e.push({value:t.name,label:t.name});return e.filter(e=>e.value!==(S??``))}function $(e){return e||`Working tree`}function re(){let e=Q(),t=m(J);Y=e.find(e=>e.value===t)?.value??e.find(e=>e.value===(k.list.main??`main`))?.value??e[0]?.value??null,Z=void 0,r.update()}function ie(){Y=null,Z=void 0,X?.controller.abort(),X=void 0,r.update()}function ae(e){if(Y===null||(Q().some(e=>e.value===Y)||(Y=Q()[0]?.value??null),Y===null))return;let t=`${Y}\0${S??``}\0${F}\0${G}`;if(X?.key===t)return X.result;X?.controller.abort();let n=new AbortController;r.signal.addEventListener(`abort`,()=>n.abort(),{once:!0});let a=T({project:i,signal:n.signal,branch:Y||null}),o=I({routes:q().map(({route:e,size:t,artboard:n})=>({id:n.id,page:e.id,size:t})),before:a,after:e,theme:F,signal:n.signal,onChange:()=>{r.update()}});return X={key:t,controller:n,result:o},o}function oe(e){return!B||G===`all`||(z.find(t=>t.width===e.anchor.viewport)??z[0]).id===G}function se(e){return e.filter(H).filter(e=>(e.anchor.branch??u)===S).filter(oe)}return()=>{if(a!==r.props.threadId){a=r.props.threadId;let e=a;e&&r.queueTask(()=>{s.loadThread(e)})}if(!k.loaded&&!k.error)return e(o,{label:`Loading branches…`});let u=`${i.id}:${i.targetOrigin}:${i.routes.map(e=>e.path).join(`|`)}`,p={...s.snapshot,threads:se(s.snapshot.threads)},m=q(),_=new Map(m.map(({artboard:e,size:t})=>[e.id,t])),y=ae(j),C=$(Y),T=$(S),E=y?m.map(({artboard:e})=>e).filter(e=>y.get(e.id).state===`different`):[],A=new Map,I=E.flatMap(e=>[`before`,`after`].map(t=>{let n=`${e.id}#${t}`;return A.set(n,{route:e,side:t}),{id:n,path:e.path,title:e.title,width:e.width,caption:e.caption,compare:{groupId:e.id,groupTitle:e.title,versionLabel:t===`before`?C:T}}})),V=E.flatMap(e=>{let{regions:t,after:n}=y.get(e.id),r=n?.width??e.width??z[0].width;return t.map((n,i)=>({route:e,region:n,index:i,count:t.length,width:r}))}),H=``;if(y){let{compared:e,total:t}=y.progress,n=m.filter(({artboard:e})=>y.get(e.id).state===`missing`).length;H=y.done?E.length?`${E.length} of ${t} pages differ from ${C}`:`No differences from ${C}`:`Comparing with ${C}… ${e} of ${t} pages`,y.done&&n&&(H+=` · ${n} without pictures on both sides`)}let U=Q(),W=e=>e.mobile||e.width<600?`mobile`:e.width<1100?`tablet`:`desktop`,oe=e(t,{children:[B?e(t,{children:[z.map(t=>e(l,{tooltip:!0,icon:W(t),label:`Show ${t.name} (${t.width})`,active:G===t.id,mix:n(`click`,()=>K(t.id))})),e(l,{tooltip:!0,icon:`columns`,label:`Show every viewport side by side`,active:G===`all`,mix:n(`click`,()=>K(`all`))}),e(c,{})]}):null,e(l,{tooltip:!0,icon:`compare`,label:y?`Stop comparing`:`Show differences with another branch`,active:!!y,disabled:!y&&!U.length,mix:n(`click`,()=>y?ie():re())}),y?e(t,{children:[e(f,{label:`Compare with`,value:Y??``,options:U,class:`max-w-48`,onChange:e=>{Y=e,Z=void 0,v(J,e),r.update()}}),e(l,{tooltip:!0,icon:`play`,label:`Step through the differences`,disabled:!V.length,mix:n(`click`,()=>{Z=0,r.update()})})]}):null]});return e(d,{class:`h-full min-h-0`,sidebarLabel:`Branches`,mainLabel:`Canvas`,drawerOpen:O,onDrawerOpenChange:e=>{O=e,r.update()},onWideChange:e=>{w!==e&&(w=e,r.update())},sidebar:e(h,{working:k.list.working,workingTree:i.workingTree,branches:k.list.branches,selected:S,busy:k.busy||!k.loaded,loaded:k.loaded,error:k.error,mobile:!w,onSelect:M,onActivate:(e,t)=>{k.activate(e,t)},onCapture:e=>{k.capture(e)},onClose:()=>{O=!1,r.update()}}),children:e(g,{artboards:y?I:m.map(({artboard:e})=>e),width:z[0].width,storageKey:y?`bud:camera:${u}:differences:${G}`:`bud:camera:${u}:${B?G:z[0].width}`,tools:oe,overlay:y&&Z!==void 0?e(ne,{slides:V,index:Z,beforeLabel:C,afterLabel:T,onIndex:e=>{Z=e,r.update()},onClose:()=>{Z=void 0,r.update()}}):null,snapshot:p,capabilities:s.snapshot.capabilities,commentsUnavailable:y?H:(s.loaded?!s.ready:i.storage.threads?.state!==`ready`)?x:void 0,onLoadThread:s.loadThread,renderThreadLinks:t=>e(D,{part:`links`,project:i,thread:t,canLink:s.snapshot.capabilities.link,busy:s.busy,onChange:async()=>{await s.load(),await s.loadThread(t.id,!0)}}),renderThreadActions:t=>e(D,{part:`action`,project:i,thread:t,canLink:s.snapshot.capabilities.link,busy:s.busy,onChange:async()=>{await s.load(),await s.loadThread(t.id,!0)}}),initialThreadId:a,loaded:s.loaded,busy:s.busy,error:s.error,now:s.now,onWrite:async e=>{let t=await s.write(e);return{...t,threads:se(t.threads)}},onSync:()=>s.sync().catch(()=>{}),onReload:s.load,onCopyThreadLink:e=>navigator.clipboard.writeText(new URL(b(e.id),window.location.origin).href),interactive:!1,branch:S,theme:F,onThemeChange:i.previews.themes.length>1?e=>{F=e,v(P,e),r.update()}:void 0,topOnly:R,onTopOnlyChange:y?void 0:e=>{R=e,v(L,e),r.update()},onShowSidebar:w?void 0:()=>{O=!0,r.update()},sidebarLabel:`Branches`,renderArtboard:(t,n)=>{let r=A.get(t.id);return r?e(te,{route:t,side:r.side,label:r.side===`before`?C:T,regions:y.get(r.route.id).regions,...n},`${X?.key??``}\0${t.id}`):e(N,{route:t,origin:i.targetOrigin,theme:F,size:_.get(t.id)??z[0],topOnly:R,previews:j,...n},`${S??``}\0${t.id}`)},renderArtboardActions:t=>S||y?null:e(ee,{route:t,previews:j})},`${y?`${u}:differences`:u}:${G}`)})}}var G=s({load:({project:e,signal:t})=>S(e,t),render:(t,{project:n,conversation:r})=>e(W,{project:n,comments:t,threadId:r?.id})});export{G as default};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const e=/* @__PURE__ */ new WeakSet;function t(e){let t={"~standard":{version:1,vendor:`data-schema`,validate(r,i){return e(r,{path:[],options:i,mutablePath:n(t)})}},"~run"(t,n){return n.mutablePath?e(t,{path:[...n.path],options:n.options}):e(t,n)},pipe(...e){return e.length===0?t:i(t,function(n,r){let i=t[`~run`](n,r);if(i.issues)return i;for(let t of e)if(!t.check(i.value))return t.code?{issues:[d(r,{code:t.code,defaultMessage:t.message??`Check failed`,input:i.value,values:t.values})]}:{issues:[f(t.message??`Check failed`,[...r.path])]};return i})},refine(e,n){return i(t,function(r,i){let a=t[`~run`](r,i);return a.issues||e(a.value)?a:n===void 0?{issues:[d(i,{code:`refine.failed`,defaultMessage:`Refinement failed`,input:a.value})]}:{issues:[f(n,[...i.path])]}})},transform(e){return i(t,function(n,r){let i=t[`~run`](n,r);return i.issues?i:{value:e(i.value)}})}};return t}function n(t){return e.has(t)}function r(n){let r=t(n);return r[`~run`]=n,e.add(r),r}function i(e,i){return n(e)?r(i):t(i)}function a(e,t,n,r){if(n.mutablePath!==!0||!Array.isArray(n.path)){let i={path:s(n.path,r),options:n.options,mutablePath:!1};return e[`~run`](t,i)}n.path.push(r);try{return e[`~run`](t,n)}finally{n.path.pop()}}function o(e){let t=e?.libraryOptions?.abortEarly;return!!(e?.abortEarly??t)}function s(e,t){return e.length===0?[t]:[...e,t]}function c(e){let t=e?.libraryOptions?.errorMap;if(typeof e?.errorMap==`function`)return e.errorMap;if(typeof t==`function`)return t}function l(e){let t=e?.libraryOptions?.locale;if(typeof e?.locale==`string`)return e.locale;if(typeof t==`string`)return t}function u(e,t){let n=c(e);return n?n(t)??t.defaultMessage:t.defaultMessage}function d(e,t){let n=[...t.path??e.path];return f(u(e.options,{code:t.code,defaultMessage:t.defaultMessage,path:n,values:t.values,input:t.input,locale:l(e.options)}),n)}function f(e,t){return!t||t.length===0?{message:e}:{message:e,path:t}}function p(e,t,n){return n?.code?(t&&=[...t],{issues:[f(u(n.parseOptions,{code:n.code,defaultMessage:e,path:t,values:n.values,input:n.input,locale:l(n.parseOptions)}),t)]}):{issues:[f(e,t)]}}function m(e){return r(function(t,n){if(!Array.isArray(t))return p(`Expected array`,n.path,{code:`type.array`,input:t,parseOptions:n.options});let r=o(n.options),i=[],s=Array(t.length),c=0;for(let o of t){let t=a(e,o,n,c);if(t.issues){if(r)return t;i.push(...t.issues)}else s[c]=t.value;c+=1}return i.length>0?{issues:i}:(s.length=c,{value:s})})}function h(){return r(function(e,t){return typeof e==`boolean`?{value:e}:p(`Expected boolean`,t.path,{code:`type.boolean`,input:e,parseOptions:t.options})})}function g(e){return r(function(t,n){for(let n of e)if(t===n)return{value:t};return p(`Expected one of: `+e.map(String).join(`, `),n.path,{code:`enum.invalid_value`,input:t,values:{values:[...e]},parseOptions:n.options})})}function _(e){return r(function(t,n){return t===null?{value:null}:e[`~run`](t,n)})}function v(){return r(function(e,t){return typeof e!=`number`||!Number.isFinite(e)?p(`Expected number`,t.path,{code:`type.number`,input:e,parseOptions:t.options}):{value:e}})}function y(e,t){return r(function(n,r){if(typeof n!=`object`||!n||Array.isArray(n))return p(`Expected object`,r.path,{code:`type.object`,input:n,parseOptions:r.options});let i=o(r.options),c=[],l={},u=n,f=t?.unknownKeys??`strip`;for(let t of Object.keys(e)){let n=a(e[t],u[t],r,t);if(n.issues){if(i)return n;c.push(...n.issues)}else(Object.prototype.hasOwnProperty.call(u,t)||n.value!==void 0)&&(l[t]=n.value)}if(f===`passthrough`||f===`error`){for(let t in u)if(Object.prototype.hasOwnProperty.call(u,t)&&!Object.prototype.hasOwnProperty.call(e,t)){if(f===`passthrough`)l[t]=u[t];else{let e=d(r,{code:`object.unknown_key`,defaultMessage:`Unknown key`,input:u[t],path:s(r.path,t),values:{key:t}});if(i)return{issues:[e]};c.push(e)}}}return c.length>0?{issues:c}:{value:l}})}function b(e){return r(function(t,n){return t===void 0?{value:void 0}:e[`~run`](t,n)})}function x(){return r(function(e,t){return typeof e==`string`?{value:e}:p(`Expected string`,t.path,{code:`type.string`,input:e,parseOptions:t.options})})}function S(e){return{check(t){return t.length<=e},code:`string.max_length`,values:{max:e},message:`Expected at most `+String(e)+` characters`}}function C(e){return{check(t){return t>=e},code:`number.min`,values:{min:e},message:`Expected number greater than or equal to `+String(e)}}function w(e){return{check(t){return t<=e},code:`number.max`,values:{max:e},message:`Expected number less than or equal to `+String(e)}}const T=1e5,ee=[120,480],E=`Expected a bounded integer.`,D=`Expected bounded text.`,O={"type.object":`Expected an object.`,"object.unknown_key":`Unexpected field.`,"type.number":E,"number.min":E,"number.max":E,"type.string":D,"string.max_length":D},k={check:e=>!e.includes(`\0`),message:D},A={check:e=>Number.isSafeInteger(e),message:E};function j(e,n){return t((t,r)=>{let i=e[`~run`](t,r);return i.issues?p(n,r.path):i})}function M(e,n,r){let i=m(e);return t((e,t)=>!Array.isArray(e)||e.length>n?p(r,t.path):i[`~run`](e,t))}function N(e){return x().pipe(S(e),k)}function P(e=2**53-1,t=0){return v().pipe(A,C(t),w(e))}function F(e){let n=y(e);return t((t,r)=>{if(t&&typeof t==`object`&&!Array.isArray(t)){for(let n of Object.keys(t))if(!Object.hasOwn(e,n))return p(O[`object.unknown_key`],[...r.path,n])}let i=n[`~run`](t,r);if(!i.issues)for(let e of Object.keys(i.value))i.value[e]===void 0&&delete i.value[e];return i})}const te=N(512).refine(e=>e!==``,`Expected a preview identity.`),ne=j(g([`light`,`dark`]),`Unsupported preview theme.`),I=j(x().refine(e=>/^[a-f0-9]{64}$/.test(e)),`Expected a content hash.`),re=F({hash:I,height:P(4096,1)}),ie=F({hash:I,width:P(ee.at(-1),1)}),ae=`Expected slices that make up the capture.`,oe=e=>_(v().refine(t=>Number.isFinite(t)&&t>=0&&t<=e)),se=F({id:N(512).refine(e=>e.length>0),match:j(g([`element`,`block`,`missing`]),`Unsupported pin match.`),x:oe(1e4),y:oe(T)}),ce=F({theme:ne,viewport:b(j(x().refine(e=>/^[a-z0-9][a-z0-9-]{0,31}$/.test(e)),`Expected a viewport identity.`)),revision:P(2**53-1,1),hash:I,width:P(1e4,1),height:P(T,1),scale:P(3,1),tiles:M(re,25,ae),thumbnails:M(ie,ee.length,`Expected a capture's thumbnails.`),pins:b(M(se,1e3,`Expected pins.`)),map:b(I)}).refine(e=>e.tiles.length>0&&e.tiles.reduce((e,t)=>e+t.height,0)===e.height,ae),le=`Expected at most one capture per theme and viewport.`,ue=e=>`${e.theme}\0${e.viewport??e.width}`,de=j(N(255).refine(e=>/^[A-Za-z0-9._/-]+$/.test(e)&&!e.startsWith(`-`)&&!e.startsWith(`/`)&&!e.endsWith(`/`)&&!e.endsWith(`.lock`)&&!e.includes(`..`)&&!e.includes(`//`)),`Expected a branch name.`);F({id:te,path:N(4096),state:j(g([`pending`,`ready`,`failed`]),`Unsupported preview state.`),error:_(N(2048)),captures:M(ce,8,le).refine(e=>new Set(e.map(ue)).size===e.length,le),updating:h(),sequence:P(),branch:b(de)});var L=class{diff(e,t,n={}){let r;typeof n==`function`?(r=n,n={}):`callback`in n&&(r=n.callback);let i=this.castInput(e,n),a=this.castInput(t,n),o=this.removeEmpty(this.tokenize(i,n)),s=this.removeEmpty(this.tokenize(a,n));return this.diffWithOptionsObj(o,s,n,r)}diffWithOptionsObj(e,t,n,r){let i=e=>{if(e=this.postProcess(e,n),r)setTimeout(function(){r(e)},0);else return e},a=t.length,o=e.length,s=1,c=a+o;n.maxEditLength!=null&&(c=Math.min(c,n.maxEditLength));let l=n.timeout??1/0,u=Date.now()+l,d=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(d[0],t,e,0,n);if(d[0].oldPos+1>=o&&f+1>=a)return i(this.buildValues(d[0].lastComponent,t,e));let p=-1/0,m=1/0,h=()=>{for(let r=Math.max(p,-s);r<=Math.min(m,s);r+=2){let s,c=d[r-1],l=d[r+1];c&&(d[r-1]=void 0);let u=!1;if(l){let e=l.oldPos-r;u=l&&0<=e&&e<a}let h=c&&c.oldPos+1<o;if(!u&&!h)d[r]=void 0;else{if(s=!h||u&&c.oldPos<l.oldPos?this.addToPath(l,!0,!1,0,n):this.addToPath(c,!1,!0,1,n),f=this.extractCommon(s,t,e,r,n),s.oldPos+1>=o&&f+1>=a)return i(this.buildValues(s.lastComponent,t,e))||!0;d[r]=s,s.oldPos+1>=o&&(m=Math.min(m,r-1)),f+1>=a&&(p=Math.max(p,r+1))}}s++};if(r)(function e(){setTimeout(function(){if(s>c||Date.now()>u)return r(void 0);h()||e()},0)})();else for(;s<=c&&Date.now()<=u;){let e=h();if(e)return e}}addToPath(e,t,n,r,i){let a=e.lastComponent;return a&&!i.oneChangePerToken&&a.added===t&&a.removed===n?{oldPos:e.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:n,previousComponent:a.previousComponent}}:{oldPos:e.oldPos+r,lastComponent:{count:1,added:t,removed:n,previousComponent:a}}}extractCommon(e,t,n,r,i){let a=t.length,o=n.length,s=e.oldPos,c=s-r,l=0;for(;c+1<a&&s+1<o&&this.equals(n[s+1],t[c+1],i);)c++,s++,l++,i.oneChangePerToken&&(e.lastComponent={count:1,previousComponent:e.lastComponent,added:!1,removed:!1});return l&&!i.oneChangePerToken&&(e.lastComponent={count:l,previousComponent:e.lastComponent,added:!1,removed:!1}),e.oldPos=s,c}equals(e,t,n){return n.comparator?n.comparator(e,t):e===t||!!n.ignoreCase&&e.toLowerCase()===t.toLowerCase()}removeEmpty(e){let t=[];for(let n=0;n<e.length;n++)e[n]&&t.push(e[n]);return t}castInput(e,t){return e}tokenize(e,t){return Array.from(e)}join(e){return e.join(``)}postProcess(e,t){return e}get useLongestToken(){return!1}buildValues(e,t,n){let r=[],i;for(;e;)r.push(e),i=e.previousComponent,delete e.previousComponent,e=i;r.reverse();let a=r.length,o=0,s=0,c=0;for(;o<a;o++){let e=r[o];if(e.removed)e.value=this.join(n.slice(c,c+e.count)),c+=e.count;else{if(!e.added&&this.useLongestToken){let r=t.slice(s,s+e.count);r=r.map(function(e,t){let r=n[c+t];return r.length>e.length?r:e}),e.value=this.join(r)}else e.value=this.join(t.slice(s,s+e.count));s+=e.count,e.added||(c+=e.count)}}return r}};new class extends L{};function fe(e,t){let n=0;for(;n<e.length&&n<t.length;n++)if(e[n]!=t[n])return e.slice(0,n);return e.slice(0,n)}function pe(e,t){let n;if(!e||!t||e[e.length-1]!=t[t.length-1])return``;for(n=0;n<e.length&&n<t.length;n++)if(e[e.length-(n+1)]!=t[t.length-(n+1)])return e.slice(-n);return e.slice(-n)}function R(e,t,n){if(e.slice(0,t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't start with prefix ${JSON.stringify(t)}; this is a bug`);return n+e.slice(t.length)}function me(e,t,n){if(!t)return e+n;if(e.slice(-t.length)!=t)throw Error(`string ${JSON.stringify(e)} doesn't end with suffix ${JSON.stringify(t)}; this is a bug`);return e.slice(0,-t.length)+n}function z(e,t){return R(e,t,``)}function B(e,t){return me(e,t,``)}function he(e,t){return t.slice(0,ge(e,t))}function ge(e,t){let n=0;e.length>t.length&&(n=e.length-t.length);let r=t.length;e.length<t.length&&(r=e.length);let i=Array(r),a=0;i[0]=0;for(let e=1;e<r;e++){for(t[e]==t[a]?i[e]=i[a]:i[e]=a;a>0&&t[e]!=t[a];)a=i[a];t[e]==t[a]&&a++}a=0;for(let r=n;r<e.length;r++){for(;a>0&&e[r]!=t[a];)a=i[a];e[r]==t[a]&&a++}return a}function _e(e,t){let n=[];for(let r of Array.from(t.segment(e))){let e=r.segment;n.length&&/\s/.test(n[n.length-1])&&/\s/.test(e)?n[n.length-1]+=e:n.push(e)}return n}function ve(e,t){if(t)return H(e,t)[1];let n;for(n=e.length-1;n>=0&&e[n].match(/\s/);n--);return e.substring(n+1)}function V(e,t){if(t)return H(e,t)[0];let n=e.match(/^\s*/);return n?n[0]:``}function H(e,t){if(!t)return[V(e),ve(e)];if(t.resolvedOptions().granularity!=`word`)throw Error(`The segmenter passed must have a granularity of "word"`);let n=_e(e,t),r=n[0],i=n[n.length-1];return[/\s/.test(r)?r:``,/\s/.test(i)?i:``]}const U=`a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}`,ye=RegExp(`[${U}]+|\\s+|[^${U}]`,`ug`);new class extends L{equals(e,t,n){return n.ignoreCase&&(e=e.toLowerCase(),t=t.toLowerCase()),e.trim()===t.trim()}tokenize(e,t={}){let n;if(t.intlSegmenter){let r=t.intlSegmenter;if(r.resolvedOptions().granularity!=`word`)throw Error(`The segmenter passed must have a granularity of "word"`);n=_e(e,r)}else n=e.match(ye)||[];let r=[],i=null;return n.forEach(e=>{/\s/.test(e)?i==null?r.push(e):r.push(r.pop()+e):i!=null&&/\s/.test(i)?r[r.length-1]==i?r.push(r.pop()+e):r.push(i+e):r.push(e),i=e}),r}join(e){return e.map((e,t)=>t==0?e:e.replace(/^\s+/,``)).join(``)}postProcess(e,t){if(!e||t.oneChangePerToken)return e;let n=null,r=null,i=null;return e.forEach(e=>{e.added?r=e:e.removed?i=e:((r||i)&&be(n,i,r,e,t.intlSegmenter),n=e,r=null,i=null)}),(r||i)&&be(n,i,r,null,t.intlSegmenter),e}};function be(e,t,n,r,i){if(t&&n){let[a,o]=H(t.value,i),[s,c]=H(n.value,i);if(e){let r=fe(a,s);e.value=me(e.value,s,r),t.value=z(t.value,r),n.value=z(n.value,r)}if(r){let e=pe(o,c);r.value=R(r.value,c,e),t.value=B(t.value,e),n.value=B(n.value,e)}}else if(n){if(e){let e=V(n.value,i);n.value=n.value.substring(e.length)}if(r){let e=V(r.value,i);r.value=r.value.substring(e.length)}}else if(e&&r){let n=V(r.value,i),[a,o]=H(t.value,i),s=fe(n,a);t.value=z(t.value,s);let c=pe(z(n,s),o);t.value=B(t.value,c),r.value=R(r.value,n,c),e.value=me(e.value,n,n.slice(0,n.length-c.length))}else if(r){let e=V(r.value,i),n=he(ve(t.value,i),e);t.value=B(t.value,n)}else if(e){let n=he(ve(e.value,i),V(t.value,i));t.value=z(t.value,n)}}new class extends L{tokenize(e){let t=RegExp(`(\\r?\\n)|[${U}]+|[^\\S\\n\\r]+|[^${U}]`,`ug`);return e.match(t)||[]}},new class extends L{constructor(){super(...arguments),this.tokenize=xe}equals(e,t,n){return n.ignoreWhitespace?((!n.newlineIsToken||!e.includes(`
|
|
2
|
-
`))&&(e=e.trim()),(!n.newlineIsToken||!t.includes(`
|
|
3
|
-
`))&&(t=t.trim())):n.ignoreNewlineAtEof&&!n.newlineIsToken&&(e.endsWith(`
|
|
4
|
-
`)&&(e=e.slice(0,-1)),t.endsWith(`
|
|
5
|
-
`)&&(t=t.slice(0,-1))),super.equals(e,t,n)}};function xe(e,t){t.stripTrailingCr&&(e=e.replace(/\r\n/g,`
|
|
6
|
-
`));let n=[],r=e.split(/(\n|\r\n)/);r[r.length-1]||r.pop();for(let e=0;e<r.length;e++){let i=r[e];e%2&&!t.newlineIsToken?n[n.length-1]+=i:n.push(i)}return n}function Se(e){return e==`.`||e==`!`||e==`?`}new class extends L{tokenize(e){let t=[],n=0;for(let r=0;r<e.length;r++){if(r==e.length-1){t.push(e.slice(n));break}if(Se(e[r])&&e[r+1].match(/\s/)){for(t.push(e.slice(n,r+1)),r=n=r+1;e[r+1]?.match(/\s/);)r++;t.push(e.slice(n,r+1)),n=r+1}}return t}},new class extends L{tokenize(e){return e.split(/([{}:;,]|\s+)/)}},new class extends L{constructor(){super(...arguments),this.tokenize=xe}get useLongestToken(){return!0}castInput(e,t){let{undefinedReplacement:n,stringifyReplacer:r=(e,t)=>t===void 0?n:t}=t;return typeof e==`string`?e:JSON.stringify(Ce(e,null,null,r),null,` `)}equals(e,t,n){return super.equals(e.replace(/,([\r\n])/g,`$1`),t.replace(/,([\r\n])/g,`$1`),n)}};function Ce(e,t,n,r,i){t||=[],n||=[],r&&(e=r(i===void 0?``:i,e));let a=0;for(;a<t.length;a+=1)if(t[a]===e)return n[a];let o;if(Object.prototype.toString.call(e)===`[object Array]`){for(t.push(e),o=Array(e.length),n.push(o),a=0;a<e.length;a+=1)o[a]=Ce(e[a],t,n,r,String(a));return t.pop(),n.pop(),o}if(e&&e.toJSON&&(e=e.toJSON()),typeof e==`object`&&e){t.push(e),o={},n.push(o);let i=[],s;for(s in e)
|
|
7
|
-
/* istanbul ignore else */
|
|
8
|
-
Object.prototype.hasOwnProperty.call(e,s)&&i.push(s);for(i.sort(),a=0;a<i.length;a+=1)s=i[a],o[s]=Ce(e[s],t,n,r,s);t.pop(),n.pop()}else o=e;return o}const we=new class extends L{tokenize(e){return e.slice()}join(e){return e}removeEmpty(e){return e}};function Te(e,t,n){return we.diff(e,t,n)}function Ee(e,t,n,r,i,a={}){let{threshold:o=.1,alpha:s=.1,aaColor:c=[255,255,0],diffColor:l=[255,0,0],checkerboard:u=!0,windowSize:d=1/0,includeAA:f,diffColorAlt:p,diffMask:m,ignoreMask:h}=a;if(!W(e)||!W(t)||n&&!W(n)||h&&!W(h))throw Error(`Image data: Uint8Array, Uint8ClampedArray or Buffer expected.`);if(e.length!==t.length||n&&n.length!==e.length)throw Error(`Image sizes do not match. Image 1 size: ${e.length}, image 2 size: ${t.length}`);let g=r*i;if(e.length!==g*4)throw Error(`Image data size does not match width/height. Expecting ${g*4}. Got ${e.length}`);if(h&&h.length!==g)throw Error(`Ignore mask size does not match image width/height. Expecting ${g}. Got ${h.length}`);let _=new Uint32Array(e.buffer,e.byteOffset,g),v=new Uint32Array(t.buffer,t.byteOffset,g),y=!0;for(let e=0;e<g;e++)if(_[e]!==v[e]&&(!h||!h[e])){y=!1;break}if(y){if(n&&!m)for(let t=0,r=0;t<g;t++,r+=4)Ge(n,r,e,s);return 0}let[b,x,S]=c,[C,w,T]=l,[ee,E,D]=p||l,O=0,k=Number.isFinite(d)?new Uint8Array(g):null,A=-1,j=0;for(let a=0,c=0;a<g;a++,c+=4){let l=_[a]===v[a]||h&&h[a]?0:Be(e,t,c,u,o);if(l){let o=a%r,s=a/r|0;!f&&(De(e,o,s,r,i,_,v)||De(t,o,s,r,i,v,_))?(n&&!m&&$(n,c,b,x,S),k&&(k[a]=2)):(n&&(l<0?$(n,c,ee,E,D):$(n,c,C,w,T)),k&&(k[a]=1,A<0&&(A=s),j=s),O++)}else n&&!m&&Ge(n,c,e,s)}if(!k||!O)return O;let M=Math.min(Math.max(Math.floor(d),1),r,i),N=new Uint16Array(r),P=0,F=0,te=Math.min(i-1,j+M-1);for(let e=A;e<=te;e++){let t=e*r,n=e-M;if(n>=0){let e=n*r;for(let n=0;n<r;n++){let r=(k[t+n]&1)-(k[e+n]&1);N[n]+=r,F+=r}}else{for(let e=0;e<r;e++){let n=k[t+e]&1;N[e]+=n,F+=n}if(e<M-1)continue}if(F<=P)continue;let i=0;for(let e=0;e<M-1;e++)i+=N[e];for(let e=M-1;e<r;e++)i+=N[e],i>P&&(P=i),i-=N[e-M+1]}return P}function W(e){return ArrayBuffer.isView(e)&&e.BYTES_PER_ELEMENT===1}function De(e,t,n,r,i,a,o){let s=t>0?t-1:0,c=n>0?n-1:0,l=t<r-1?t+1:r-1,u=n<i-1?n+1:i-1,d=(n*r+t)*4,f=e[d],p=e[d+1],m=e[d+2],h=e[d+3],g=+(t===s||t===l||n===c||n===u),_=0,v=0,y=0,b=0,x=0,S=0,C=r*4;for(let i=s;i<=l;i++){let a=(c*r+i)*4;for(let r=c;r<=u;r++,a+=C){if(i===t&&r===n)continue;let o=We(e,a,f,p,m,h);if(o===0){if(g++,g>2)return!1}else o<_?(_=o,y=i,b=r):o>v&&(v=o,x=i,S=r)}}return _===0||v===0?!1:G(a,y,b,r,i)&&G(o,y,b,r,i)||G(a,x,S,r,i)&&G(o,x,S,r,i)}function G(e,t,n,r,i){let a=n*r+t,o=e[a];if(t>0&&t<r-1&&n>0&&n<i-1)return+(o===e[a-r-1])+ +(o===e[a-1])+ +(o===e[a+r-1])+ +(o===e[a-r])+ +(o===e[a+r])+ +(o===e[a-r+1])+ +(o===e[a+1])+ +(o===e[a+r+1])>2;let s=t>0?t-1:0,c=n>0?n-1:0,l=t<r-1?t+1:r-1,u=n<i-1?n+1:i-1,d=+(t===s||t===l||n===c||n===u);for(let i=s;i<=l;i++){let a=c*r+i;for(let s=c;s<=u;s++,a+=r)if((i!==t||s!==n)&&(d+=+(o===e[a]),d>2))return!0}return!1}const K=/* @__PURE__ */ new Float64Array(257);for(let e=0;e<256;e++){let t=e/255;K[e]=t<=.04045?t/12.92:((t+.055)/1.055)**2.4}K[256]=K[255];const Oe=/* @__PURE__ */ new Float64Array(256),ke=/* @__PURE__ */ new Float64Array(256),Ae=/* @__PURE__ */ new Float64Array(256),je=/* @__PURE__ */ new Float64Array(256),Me=/* @__PURE__ */ new Float64Array(256),Ne=/* @__PURE__ */ new Float64Array(256),Pe=/* @__PURE__ */ new Float64Array(256),Fe=/* @__PURE__ */ new Float64Array(256),Ie=/* @__PURE__ */ new Float64Array(256);for(let e=0;e<256;e++){let t=K[e];Oe[e]=.4122214708*t,je[e]=.2119034982*t,Pe[e]=.0883024619*t,ke[e]=.5363325363*t,Me[e]=.6806995451*t,Fe[e]=.2817188376*t,Ae[e]=.0514459929*t,Ne[e]=.1073969566*t,Ie[e]=.6299787005*t}function q(e){let t=e|0;return K[t]+(K[t+1]-K[t])*(e-t)}const Le=4096,J=/* @__PURE__ */ new Float64Array(4098);for(let e=0;e<=4097;e++)J[e]=Math.cbrt(e/Le);function Y(e){let t=e*Le,n=t|0;return n<8?Math.cbrt(e):J[n]+(J[n+1]-J[n])*(t-n)}const Re=4096,X=new Uint32Array(Re),Z=new Float64Array(Re*4),ze=1.206/1.03;function Be(e,t,n,r,i){let a=e[n],o=e[n+1],s=e[n+2],c=e[n+3],l=t[n],u=t[n+1],d=t[n+2],f=t[n+3];return c===255&&f===255?Ve(a,o,s,l,u,d,i):He(a,o,s,c,l,u,d,f,n,r,i)}function Ve(e,t,n,r,i,a,o){let s=e<<16|t<<8|n,c=Math.imul(s,2654435761)>>>20,l=s+1,u=c*4,d,f,p,m;X[c]===l?(d=Z[u],f=Z[u+1],p=Z[u+2],m=Z[u+3]):(d=Y(Oe[e]+ke[t]+Ae[n]),f=Y(je[e]+Me[t]+Ne[n]),p=Y(Pe[e]+Fe[t]+Ie[n]),m=Q(d,f,p),X[c]=l,Z[u]=d,Z[u+1]=f,Z[u+2]=p,Z[u+3]=m);let h=r<<16|i<<8|a,g=Math.imul(h,2654435761)>>>20,_=h+1,v=g*4,y,b,x,S;return X[g]===_?(y=Z[v],b=Z[v+1],x=Z[v+2],S=Z[v+3]):(y=Y(Oe[r]+ke[i]+Ae[a]),b=Y(je[r]+Me[i]+Ne[a]),x=Y(Pe[r]+Fe[i]+Ie[a]),S=Q(y,b,x),X[g]=_,Z[v]=y,Z[v+1]=b,Z[v+2]=x,Z[v+3]=S),Ue(m-S,d-y,f-b,p-x,o)}function He(e,t,n,r,i,a,o,s,c,l,u){let d=255,f=255,p=255;if(l){let e=Math.imul(c>>2,2654435761);d=48+159*(e>>>31),f=48+159*(e>>>30&1),p=48+159*(e>>>29&1)}e=(e*r+d*(255-r))/255,t=(t*r+f*(255-r))/255,n=(n*r+p*(255-r))/255,i=(i*s+d*(255-s))/255,a=(a*s+f*(255-s))/255,o=(o*s+p*(255-s))/255;let m=q(e),h=q(t),g=q(n),_=q(i),v=q(a),y=q(o),b=Y(.4122214708*m+.5363325363*h+.0514459929*g),x=Y(.2119034982*m+.6806995451*h+.1073969566*g),S=Y(.0883024619*m+.2817188376*h+.6299787005*g),C=Y(.4122214708*_+.5363325363*v+.0514459929*y),w=Y(.2119034982*_+.6806995451*v+.1073969566*y),T=Y(.0883024619*_+.2817188376*v+.6299787005*y);return Ue(Q(b,x,S)-Q(C,w,T),b-C,x-w,S-T,u)}function Ue(e,t,n,r,i){let a=i-Math.abs(e);if(a>=0){let e=1.9779984951*t-2.428592205*n+.4505937099*r,i=.0259040371*t+.7827717662*n-.808675766*r;if(e*e+i*i<=a*a)return 0}return e>0?-1:1}function Q(e,t,n){let r=.2104542553*e+.793617785*t-.0040720468*n,i=ze*r-.206;return .5*(i+Math.sqrt(i*i+.12*ze*r))}function We(e,t,n,r,i,a){let o=e[t],s=e[t+1],c=e[t+2],l=e[t+3],u=n-o,d=r-s,f=i-c,p=a-l;if(!u&&!d&&!f&&!p)return 0;if(a<255||l<255){u=(n*a-o*l-255*p)/255,d=(r*a-s*l-255*p)/255,f=(i*a-c*l-255*p)/255;let e=u*.29889531+d*.58662247+f*.11448223;return e===0&&p?p/2:e}return u*.29889531+d*.58662247+f*.11448223}function $(e,t,n,r,i){e[t]=n,e[t+1]=r,e[t+2]=i,e[t+3]=255}function Ge(e,t,n,r){let i=255+(n[t]*.29889531+n[t+1]*.58662247+n[t+2]*.11448223-255)*r*n[t+3]/255;$(e,t,i,i,i)}function Ke(e){let{width:t,height:n,data:r}=e,i=Math.min(48,t),a=[];for(let e=0;e<n;e++){let n=new Uint8Array(i);for(let a=0;a<i;a++){let o=Math.floor(a*t/i),s=Math.floor((a+1)*t/i),c=0;for(let n=o;n<s;n++){let i=(e*t+n)*4;c+=r[i]*.299+r[i+1]*.587+r[i+2]*.114}n[a]=Math.round(c/(s-o))}a.push(n)}return a}function qe(e,t,n,r){let i=Te(e,t,{comparator:(e,t)=>{for(let r=0;r<e.length;r++)if(Math.abs(e[r]-t[r])>n)return!1;return!0},maxEditLength:r});if(i)return i.map(e=>({added:e.added,removed:e.removed,count:e.count}));let a=Math.min(e.length,t.length);return[{added:!1,removed:!1,count:a},...e.length>a?[{added:!1,removed:!0,count:e.length-a}]:[],...t.length>a?[{added:!0,removed:!1,count:t.length-a}]:[]]}function Je(e,t,n,r,i,a,o){let{width:s}=e,c=new Uint8Array(s*Math.min(256,i)*4);for(let l=0;l<i;l+=256){let u=Math.min(256,i-l),d=s*u*4,f=e.data.subarray((n+l)*s*4,(n+l)*s*4+d),p=t.data.subarray((r+l)*s*4,(r+l)*s*4+d),m=c.subarray(0,d);if(m.fill(0),Ee(f,p,m,s,u,{threshold:a,diffMask:!0}))for(let e=0;e<u;e++){let t=0,i=s,a=0;for(let n=0;n<s;n++)m[(e*s+n)*4+3]===255&&(t++,i=Math.min(i,n),a=n+1);t&&o.push({b0:n+l+e,b1:n+l+e+1,a0:r+l+e,a1:r+l+e+1,x0:i,x1:a,changed:t,removed:0,added:0})}}}function Ye(e,t,n={}){let{threshold:r=.1,context:i=24,gap:a=32,minPixels:o=12,maxEdit:s=2e3,tolerance:c=2}=n;if(e.width!==t.width)return[{kind:`changed`,before:{y:0,height:e.height},after:{y:0,height:t.height},x:0,width:Math.max(e.width,t.width),pixels:e.width*e.height}];let{width:l}=e,u=[],d=0,f=0,p=qe(Ke(e),Ke(t),c,s),m=e=>{let t={changed:0,removed:e,added:0};u.push({b0:d,b1:d+e,a0:f,a1:f,x0:0,x1:l,...t}),d+=e},h=e=>{let t={changed:0,removed:0,added:e};u.push({b0:d,b1:d,a0:f,a1:f+e,x0:0,x1:l,...t}),f+=e};for(let n=0;n<p.length;n++){let i=p[n],a=p[n+1];if(i.removed&&a?.added||i.added&&a?.removed){let o=i.removed?i.count:a.count,s=i.added?i.count:a.count,c=Math.min(o,s);Je(e,t,d,f,c,r,u),d+=c,f+=c,o>c&&m(o-c),s>c&&h(s-c),n++}else i.removed?m(i.count):i.added?h(i.count):(Je(e,t,d,f,i.count,r,u),d+=i.count,f+=i.count)}let g=(e,t)=>{let n=[];for(let r of e){let e=n.at(-1);e&&r.a0-e.a1<=t&&r.b0-e.b1<=t?(e.b1=Math.max(e.b1,r.b1),e.a1=Math.max(e.a1,r.a1),e.x0=Math.min(e.x0,r.x0),e.x1=Math.max(e.x1,r.x1),e.changed+=r.changed,e.removed+=r.removed,e.added+=r.added):n.push({...r})}return n};return g(g(u,a).filter(e=>e.removed||e.added||e.changed>=o).map(n=>({...n,b0:Math.max(0,n.b0-i),b1:Math.min(e.height,n.b1+i),a0:Math.max(0,n.a0-i),a1:Math.min(t.height,n.a1+i)})),0).map(e=>({kind:e.removed&&!e.added&&!e.changed?`removed`:e.added&&!e.removed&&!e.changed?`added`:`changed`,before:{y:e.b0,height:e.b1-e.b0},after:{y:e.a0,height:e.a1-e.a0},x:e.x0,width:e.x1-e.x0,pixels:e.changed+(e.removed+e.added)*l}))}const Xe=16e6;async function Ze(e,t,n){let r=Math.max(1,Math.round(e.heights.reduce((e,t)=>e+t,0)*n)),i=new Uint8ClampedArray(t*r*4),a=0;for(let[o,s]of e.images.entries()){let c=Math.min(r-a,Math.round(e.heights[o]*n));if(c<=0)break;let l=await createImageBitmap(s,{resizeWidth:t,resizeHeight:c,resizeQuality:`medium`}),u=new OffscreenCanvas(t,c).getContext(`2d`,{willReadFrequently:!0});u.drawImage(l,0,0),l.close(),i.set(u.getImageData(0,0,t,c).data,a*t*4),a+=c}return{width:t,height:r,data:i}}async function Qe(e){let t=Math.max(...[e.before,e.after].map(e=>e.heights.reduce((e,t)=>e+t,0))),n=Math.max(180,Math.min(Math.round(e.width/2),Math.floor(Xe/t))),r=Math.min(1,Xe/(n*t)),[i,a]=await Promise.all([Ze(e.before,n,r),Ze(e.after,n,r)]),o=e.width/n,s=e=>({y:Math.round(e.y/r),height:Math.round(e.height/r)}),c=Ye(i,a).map(e=>({...e,before:s(e.before),after:s(e.after),x:e.x*o,width:e.width*o})),l=[];for(let t of c)l.push({...t,crops:{before:await $e(e.before,t.before,e.width),after:await $e(e.after,t.after,e.width)}});return l}async function $e(e,t,n){let{scale:r}=e;if(t.height<=0)return null;let i=Math.min(r,Math.max(.25,8192/t.height)),a=new OffscreenCanvas(Math.round(n*i),Math.round(t.height*i)),o=a.getContext(`2d`),s=0;for(let[c,l]of e.images.entries()){let u=e.heights[c],d=Math.max(t.y,s),f=Math.min(t.y+t.height,s+u);if(s+=u,f<=d)continue;let p=await createImageBitmap(l,0,Math.round((d-(s-u))*r),Math.round(n*r),Math.max(1,Math.round((f-d)*r)),{resizeWidth:a.width,resizeHeight:Math.max(1,Math.round((f-d)*i)),resizeQuality:`high`});o.drawImage(p,0,Math.round((d-t.y)*i)),p.close()}return a.convertToBlob({type:`image/jpeg`,quality:.88})}self.addEventListener(`message`,e=>{let t=e.data;Qe(t).then(e=>self.postMessage({id:t.id,regions:e}),e=>self.postMessage({id:t.id,error:e instanceof Error?e.message:`The pictures could not be compared.`}))});
|