gitifact 0.3.2 → 0.4.1
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/README.md +8 -1
- package/dist/browser/assets/BottomSheet-F2BUQwSi.js +1 -0
- package/dist/browser/assets/Card-C0juPkmX.js +1 -0
- package/dist/browser/assets/IconButton-CkA9oftf.js +1 -0
- package/dist/browser/assets/Markdown-D7VrGOLZ.js +68 -0
- package/dist/browser/assets/{MenuBottomSheet-BkRC4_VW.js → MenuBottomSheet-CQA7HL9k.js} +1 -1
- package/dist/browser/assets/MetadataListItem-DRZdPsPv.js +1 -0
- package/dist/browser/assets/Section-zmL2D3WL.js +1 -0
- package/dist/browser/assets/Table-DxOgh9uC.js +3 -0
- package/dist/browser/assets/TimestampHoverCard-DOWpOAzA.js +1 -0
- package/dist/browser/assets/about-K6mG2f8D.js +3 -0
- package/dist/browser/assets/changelog-7YrQ3ibl.js +2 -0
- package/dist/browser/assets/changelog-CxmMo2wk.css +1 -0
- package/dist/browser/assets/composeEventHandlers-CHIontwB.js +1 -0
- package/dist/browser/assets/container.stylex-oPimSCGl.js +1 -0
- package/dist/browser/assets/{contributors._email-bq12TRAr.js → contributors._email-PmuGt4HK.js} +1 -1
- package/dist/browser/assets/{contributors.index-eTu4P306.js → contributors.index-Du6gcymD.js} +1 -1
- package/dist/browser/assets/devWarning-BZMSgwyk.js +1 -0
- package/dist/browser/assets/document-B1QpmAOH.js +1 -0
- package/dist/browser/assets/document-D41OCO3e.css +1 -0
- package/dist/browser/assets/{features._featureId-CGRWLMyZ.js → features._featureId-DzAIhNyX.js} +1 -1
- package/dist/browser/assets/{requirements-DpTMK_Uu.js → features.index-D9wmqimq.js} +1 -1
- package/dist/browser/assets/git-cGldo_jC.js +1 -0
- package/dist/browser/assets/guides._documentId-BEv09vs4.js +1 -0
- package/dist/browser/assets/{guides.index-CFMN9ggJ.js → guides.index-tfySk9wY.js} +1 -1
- package/dist/browser/assets/index-B5Ql9tDp.js +56 -0
- package/dist/browser/assets/page-header-8LgEWnon.js +126 -0
- package/dist/browser/assets/product-BrvAWtBo.css +1 -0
- package/dist/browser/assets/product-Q9uoNMvu.js +8 -0
- package/dist/browser/assets/product.document-Bl25IX1S.js +1 -0
- package/dist/browser/assets/product.index-BwKqT4MY.js +1 -0
- package/dist/browser/assets/request-state-sfsdVRHj.js +1 -0
- package/dist/browser/assets/{features.index-_wXeEia1.js → requirements-B9rmmF27.js} +1 -1
- package/dist/browser/assets/{routes-jgWFqeRv.js → routes-COAEfNb7.js} +1 -1
- package/dist/browser/assets/settings-BvuMkHCB.css +1 -0
- package/dist/browser/assets/settings-Cv6WtTcC.js +1 -0
- package/dist/browser/assets/useDevWarning-Xg7kPMHJ.js +1 -0
- package/dist/browser/assets/useMediaQuery-DFlnKIlp.js +1 -0
- package/dist/browser/assets/useTranslator-DY2HN18N.js +4 -0
- package/dist/browser/index.html +19 -10
- package/dist/i18n/ko/block.md +2 -1
- package/dist/i18n/ko/changelog.md +25 -0
- package/dist/i18n/ko/docs/workflow.md +1 -1
- package/dist/main.js +289 -34
- package/package.json +1 -1
- package/dist/browser/assets/BottomSheet-CUR7U0gF.js +0 -1
- package/dist/browser/assets/IconButton-BqlnBu_N.js +0 -4
- package/dist/browser/assets/Markdown-C8BT0YZz.js +0 -68
- package/dist/browser/assets/Section-DQRr6JoK.js +0 -1
- package/dist/browser/assets/TimestampHoverCard-ClDQXGeS.js +0 -1
- package/dist/browser/assets/about-DMFBT-sA.js +0 -3
- package/dist/browser/assets/git-CTULSVR7.js +0 -1
- package/dist/browser/assets/guides._documentId-D3RCTjtd.js +0 -1
- package/dist/browser/assets/index-Cl1J8uRf.js +0 -56
- package/dist/browser/assets/page-header-CYf1yQV1.js +0 -127
- package/dist/browser/assets/product-BxZktNQM.js +0 -8
- package/dist/browser/assets/product-CV4EzacY.css +0 -1
- package/dist/browser/assets/product.index-AF24IXK3.js +0 -1
- package/dist/browser/assets/request-state-DzkYXwJR.js +0 -1
- package/dist/browser/assets/useDevWarning-CzR6rkf6.js +0 -1
- package/dist/browser/assets/useMediaQuery-C_nG4b-e.js +0 -1
package/dist/main.js
CHANGED
|
@@ -4030,6 +4030,70 @@ function comparePreviewBundles(before, after) {
|
|
|
4030
4030
|
return { specChanges: specs.specChanges, changes: [...specs.changes, ...compareDocumentSets(a.documents, b.documents)] };
|
|
4031
4031
|
}
|
|
4032
4032
|
|
|
4033
|
+
// ../../packages/core/dist/formats/changelog.js
|
|
4034
|
+
var changelogSections = ["added", "changed", "removed", "fixed"];
|
|
4035
|
+
var versionLine = /^## (\d+)\.(\d+)\.(\d+) - (\d{4})-(\d{2})-(\d{2})$/;
|
|
4036
|
+
var sectionLine = /^### (Added|Changed|Removed|Fixed)$/;
|
|
4037
|
+
var itemLine = /^- (\S.*)$/;
|
|
4038
|
+
var realDate = (year, month, day) => {
|
|
4039
|
+
const date5 = new Date(Date.UTC(year, month - 1, day));
|
|
4040
|
+
return date5.getUTCFullYear() === year && date5.getUTCMonth() === month - 1 && date5.getUTCDate() === day;
|
|
4041
|
+
};
|
|
4042
|
+
function parseChangelog(text2) {
|
|
4043
|
+
const entries = [];
|
|
4044
|
+
let previous;
|
|
4045
|
+
let entry2;
|
|
4046
|
+
let section;
|
|
4047
|
+
const fail8 = (line, key, values = {}) => new InitError("INVALID_CHANGELOG", t("changelog.atLine", { line, reason: t(key, values) }));
|
|
4048
|
+
const lines = text2.replace(/\r\n/g, "\n").split("\n");
|
|
4049
|
+
const close = (line) => {
|
|
4050
|
+
if (entry2 && changelogSections.every((name) => entry2[name].length === 0))
|
|
4051
|
+
throw fail8(line, "changelog.emptyVersion", { version: entry2.version });
|
|
4052
|
+
};
|
|
4053
|
+
lines.forEach((raw, index) => {
|
|
4054
|
+
const line = index + 1;
|
|
4055
|
+
if (raw.trim() === "")
|
|
4056
|
+
return;
|
|
4057
|
+
const version2 = versionLine.exec(raw);
|
|
4058
|
+
if (version2) {
|
|
4059
|
+
close(line);
|
|
4060
|
+
const core = [Number(version2[1]), Number(version2[2]), Number(version2[3])];
|
|
4061
|
+
if (!realDate(Number(version2[4]), Number(version2[5]), Number(version2[6])))
|
|
4062
|
+
throw fail8(line, "changelog.invalidDate", { text: raw });
|
|
4063
|
+
if (previous && !(core[0] < previous[0] || core[0] === previous[0] && (core[1] < previous[1] || core[1] === previous[1] && core[2] < previous[2]))) {
|
|
4064
|
+
throw fail8(line, "changelog.order", { version: core.join(".") });
|
|
4065
|
+
}
|
|
4066
|
+
previous = core;
|
|
4067
|
+
section = void 0;
|
|
4068
|
+
entry2 = { version: core.join("."), date: version2[4] + "-" + version2[5] + "-" + version2[6], added: [], changed: [], removed: [], fixed: [] };
|
|
4069
|
+
entries.push(entry2);
|
|
4070
|
+
return;
|
|
4071
|
+
}
|
|
4072
|
+
const heading = sectionLine.exec(raw);
|
|
4073
|
+
if (heading) {
|
|
4074
|
+
if (!entry2)
|
|
4075
|
+
throw fail8(line, "changelog.sectionBeforeVersion");
|
|
4076
|
+
const name = heading[1].toLowerCase();
|
|
4077
|
+
if (entry2[name].length > 0)
|
|
4078
|
+
throw fail8(line, "changelog.duplicateSection", { section: heading[1] });
|
|
4079
|
+
section = name;
|
|
4080
|
+
return;
|
|
4081
|
+
}
|
|
4082
|
+
const item = itemLine.exec(raw);
|
|
4083
|
+
if (item) {
|
|
4084
|
+
if (!entry2 || !section)
|
|
4085
|
+
throw fail8(line, "changelog.itemOutsideSection");
|
|
4086
|
+
entry2[section].push(item[1].trimEnd());
|
|
4087
|
+
return;
|
|
4088
|
+
}
|
|
4089
|
+
throw fail8(line, "changelog.unknownLine", { text: raw });
|
|
4090
|
+
});
|
|
4091
|
+
close(lines.length);
|
|
4092
|
+
if (entries.length === 0)
|
|
4093
|
+
throw fail8(1, "changelog.noVersions");
|
|
4094
|
+
return entries;
|
|
4095
|
+
}
|
|
4096
|
+
|
|
4033
4097
|
// ../../packages/core/dist/use-cases/edit-spec-preview.js
|
|
4034
4098
|
var fail2 = (message) => {
|
|
4035
4099
|
throw new SpecPreviewError(message);
|
|
@@ -24380,16 +24444,7 @@ var repositoryStatusFailureV1 = external_exports.strictObject({
|
|
|
24380
24444
|
});
|
|
24381
24445
|
var repositoryStatusV1 = external_exports.union([repositoryStatusSuccessV1, repositoryStatusFailureV1]);
|
|
24382
24446
|
|
|
24383
|
-
// ../../packages/contracts/dist/versions/browser-
|
|
24384
|
-
var browserSessionV1 = external_exports.strictObject({
|
|
24385
|
-
contract: external_exports.literal("browser-session"),
|
|
24386
|
-
version: external_exports.literal(1),
|
|
24387
|
-
sessionId: external_exports.uuid(),
|
|
24388
|
-
repository: external_exports.strictObject({
|
|
24389
|
-
key: external_exports.string().regex(/^repo:[0-9a-f]{64}$/),
|
|
24390
|
-
worktreeKey: external_exports.string().regex(/^worktree:[0-9a-f]{64}$/)
|
|
24391
|
-
})
|
|
24392
|
-
});
|
|
24447
|
+
// ../../packages/contracts/dist/versions/browser-http-error-v1.js
|
|
24393
24448
|
var browserHttpErrorV1 = external_exports.strictObject({
|
|
24394
24449
|
contract: external_exports.literal("browser-http-error"),
|
|
24395
24450
|
version: external_exports.literal(1),
|
|
@@ -24489,6 +24544,42 @@ var changelogV1 = external_exports.strictObject({
|
|
|
24489
24544
|
}
|
|
24490
24545
|
});
|
|
24491
24546
|
|
|
24547
|
+
// ../../packages/contracts/dist/versions/browser-session-v2.js
|
|
24548
|
+
var release = external_exports.string().regex(/^\d+\.\d+\.\d+$/);
|
|
24549
|
+
var updateStateV1 = external_exports.strictObject({
|
|
24550
|
+
status: external_exports.enum(["checking", "available", "up-to-date", "unavailable", "disabled"]),
|
|
24551
|
+
latestVersion: release.nullable()
|
|
24552
|
+
}).refine((value) => (value.status === "available" || value.status === "up-to-date") === (value.latestVersion !== null), "latestVersion is set exactly when the check produced a result.");
|
|
24553
|
+
var browserSessionV2 = external_exports.strictObject({
|
|
24554
|
+
contract: external_exports.literal("browser-session"),
|
|
24555
|
+
version: external_exports.literal(2),
|
|
24556
|
+
sessionId: external_exports.uuid(),
|
|
24557
|
+
repository: external_exports.strictObject({
|
|
24558
|
+
key: external_exports.string().regex(/^repo:[0-9a-f]{64}$/),
|
|
24559
|
+
worktreeKey: external_exports.string().regex(/^worktree:[0-9a-f]{64}$/)
|
|
24560
|
+
}),
|
|
24561
|
+
// The running CLI, the same value as `gitifact --version`. A development build may carry a pre-release suffix.
|
|
24562
|
+
cliVersion: external_exports.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/),
|
|
24563
|
+
update: updateStateV1
|
|
24564
|
+
});
|
|
24565
|
+
|
|
24566
|
+
// ../../packages/contracts/dist/versions/update-v1.js
|
|
24567
|
+
var updateV1 = external_exports.discriminatedUnion("ok", [
|
|
24568
|
+
external_exports.strictObject({
|
|
24569
|
+
contract: external_exports.literal("update"),
|
|
24570
|
+
version: external_exports.literal(1),
|
|
24571
|
+
ok: external_exports.literal(true),
|
|
24572
|
+
cliVersion: external_exports.string().min(1),
|
|
24573
|
+
update: updateStateV1,
|
|
24574
|
+
// Present only when a newer release exists. The command is for npm global installs; other installs differ.
|
|
24575
|
+
install: external_exports.strictObject({ npmGlobal: external_exports.string().min(1) }).nullable(),
|
|
24576
|
+
// refreshed: blocks whose version line differed were rewritten. current: every block already matched.
|
|
24577
|
+
// not-initialized: no .gitifact config here, so only the version check ran. no-block: no file carries a block.
|
|
24578
|
+
agentDocs: external_exports.strictObject({ state: external_exports.enum(["refreshed", "current", "not-initialized", "no-block"]), paths: external_exports.array(external_exports.string()) })
|
|
24579
|
+
}),
|
|
24580
|
+
external_exports.strictObject({ contract: external_exports.literal("update"), version: external_exports.literal(1), ok: external_exports.literal(false), error: external_exports.strictObject({ code: external_exports.string(), message: external_exports.string() }) })
|
|
24581
|
+
]);
|
|
24582
|
+
|
|
24492
24583
|
// src/shared/i18n/ko/messages.json
|
|
24493
24584
|
var messages_default2 = {
|
|
24494
24585
|
"help.program": "\uD504\uB85C\uC81D\uD2B8\uC758 \uC694\uAD6C\uC0AC\uD56D\uACFC \uACB0\uC815 \uC774\uB825\uC744 Git\uC5D0 \uB0A8\uAE30\uB294 \uB3C4\uAD6C",
|
|
@@ -24717,7 +24808,24 @@ var messages_default2 = {
|
|
|
24717
24808
|
"docs.summary.spec": "\uC0AC\uC6A9\uC790 \uC2A4\uD1A0\uB9AC\xB7\uC218\uC6A9 \uC870\uAC74 \uD615\uC2DD, ID \uADDC\uCE59, spec save \uC785\uB825",
|
|
24718
24809
|
"docs.summary.design": "design.md \uBAA9\uCC28, \uCC38\uC870 \uC8FC\uC11D, \uAC1C\uC815 \uBC29\uC2DD",
|
|
24719
24810
|
"docs.summary.product": "PRODUCT.md\uC640 guides \uBB38\uC11C\uC758 \uC5ED\uD560\uACFC \uC800\uC7A5 \uBA85\uB839",
|
|
24720
|
-
"docs.summary.commit": "spec commit \uC785\uB825, \uC774\uC720 \uAE30\uB85D, \uC2E4\uD328 \uD6C4 \uBCF5\uAD6C"
|
|
24811
|
+
"docs.summary.commit": "spec commit \uC785\uB825, \uC774\uC720 \uAE30\uB85D, \uC2E4\uD328 \uD6C4 \uBCF5\uAD6C",
|
|
24812
|
+
"help.browserNoUpdateCheck": "\uC0C8 \uBC84\uC804 \uD655\uC778\uC744 \uC704\uD55C npm \uB808\uC9C0\uC2A4\uD2B8\uB9AC \uC870\uD68C\uB97C \uB054 (GITIFACT_NO_UPDATE_CHECK\uC640 \uAC19\uC74C)",
|
|
24813
|
+
"help.update": "\uC0C8 \uBC84\uC804 \uD655\uC778\uACFC \uC124\uCE58 \uBC29\uBC95 \uC548\uB0B4, \uD504\uB85C\uC81D\uD2B8 \uC9C0\uCE68 \uD30C\uC77C\uC758 GITIFACT \uBE14\uB85D\uC744 \uD604\uC7AC \uBC84\uC804\uC73C\uB85C \uAC31\uC2E0",
|
|
24814
|
+
"server.badLanguage": "\uC5B8\uC5B4 \uCF54\uB4DC\uB97C \uD655\uC778\uD558\uC138\uC694.",
|
|
24815
|
+
"server.changelogNotFound": "\uD328\uCE58\uB178\uD2B8\uB97C \uCC3E\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",
|
|
24816
|
+
"server.changelogUnreadable": "\uD328\uCE58\uB178\uD2B8\uB97C \uC77D\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",
|
|
24817
|
+
"update.text.current": "\uD604\uC7AC \uBC84\uC804: {version}",
|
|
24818
|
+
"update.text.available": "\uC0C8 \uBC84\uC804: {version}",
|
|
24819
|
+
"update.text.upToDate": "\uCD5C\uC2E0 \uBC84\uC804\uC744 \uC0AC\uC6A9 \uC911\uC785\uB2C8\uB2E4.",
|
|
24820
|
+
"update.text.disabled": "\uC0C8 \uBC84\uC804 \uD655\uC778\uC774 \uAEBC\uC838 \uC788\uC2B5\uB2C8\uB2E4.",
|
|
24821
|
+
"update.text.unavailable": "\uC0C8 \uBC84\uC804\uC744 \uD655\uC778\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uB124\uD2B8\uC6CC\uD06C \uC5F0\uACB0\uC744 \uD655\uC778\uD558\uC138\uC694.",
|
|
24822
|
+
"update.text.install": "npm \uC804\uC5ED \uC124\uCE58\uC6A9: {command}",
|
|
24823
|
+
"update.text.afterInstall": "\uC124\uCE58\uD55C \uB4A4 gitifact update\uB97C \uB2E4\uC2DC \uC2E4\uD589\uD558\uBA74 \uC9C0\uCE68 \uBE14\uB85D\uC774 \uC0C8 \uBC84\uC804\uC73C\uB85C \uAC31\uC2E0\uB429\uB2C8\uB2E4.",
|
|
24824
|
+
"update.text.blockRefreshed": "\uC9C0\uCE68 \uBE14\uB85D \uAC31\uC2E0: {paths}",
|
|
24825
|
+
"update.text.blockCurrent": "\uC9C0\uCE68 \uBE14\uB85D\uC740 \uC774\uBBF8 \uD604\uC7AC \uBC84\uC804\uC785\uB2C8\uB2E4: {paths}",
|
|
24826
|
+
"update.text.noBlock": "GITIFACT \uBE14\uB85D\uC774 \uC788\uB294 \uC9C0\uCE68 \uD30C\uC77C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. gitifact init\uC73C\uB85C \uC124\uCE58\uD558\uC138\uC694.",
|
|
24827
|
+
"update.text.notInitialized": "\uCD08\uAE30\uD654\uB41C \uD504\uB85C\uC81D\uD2B8\uAC00 \uC544\uB2C8\uC5B4\uC11C \uBC84\uC804\uB9CC \uD655\uC778\uD588\uC2B5\uB2C8\uB2E4.",
|
|
24828
|
+
"update.failed": "\uC5C5\uB370\uC774\uD2B8 \uD655\uC778\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."
|
|
24721
24829
|
};
|
|
24722
24830
|
|
|
24723
24831
|
// src/shared/i18n/index.ts
|
|
@@ -24832,17 +24940,63 @@ function contentType(path3) {
|
|
|
24832
24940
|
|
|
24833
24941
|
// src/server/status-session.ts
|
|
24834
24942
|
import { randomUUID as randomUUID2 } from "node:crypto";
|
|
24835
|
-
|
|
24836
|
-
|
|
24837
|
-
|
|
24838
|
-
|
|
24839
|
-
|
|
24840
|
-
|
|
24841
|
-
|
|
24943
|
+
|
|
24944
|
+
// src/shared/update-check.ts
|
|
24945
|
+
var updateCheckTimeoutMs = 3e3;
|
|
24946
|
+
var release2 = /^(\d+)\.(\d+)\.(\d+)$/;
|
|
24947
|
+
var running = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z.-]+)?$/;
|
|
24948
|
+
function isNewerRelease(latest, current) {
|
|
24949
|
+
const next = release2.exec(latest);
|
|
24950
|
+
const now = running.exec(current);
|
|
24951
|
+
if (!next || !now) return false;
|
|
24952
|
+
for (let index = 1; index <= 3; index++) {
|
|
24953
|
+
const difference = Number(next[index]) - Number(now[index]);
|
|
24954
|
+
if (difference !== 0) return difference > 0;
|
|
24955
|
+
}
|
|
24956
|
+
return now[4] !== void 0;
|
|
24957
|
+
}
|
|
24958
|
+
var updateCheckDisabled = (env, flagged = false) => flagged || env.GITIFACT_NO_UPDATE_CHECK !== void 0 && env.GITIFACT_NO_UPDATE_CHECK !== "" && env.GITIFACT_NO_UPDATE_CHECK !== "0";
|
|
24959
|
+
var checkingUpdate = { status: "checking", latestVersion: null };
|
|
24960
|
+
var disabledUpdate = { status: "disabled", latestVersion: null };
|
|
24961
|
+
async function resolveUpdate(current, fetchLatest, signal, timeoutMs = updateCheckTimeoutMs) {
|
|
24962
|
+
const controller = new AbortController();
|
|
24963
|
+
const abort = () => controller.abort();
|
|
24964
|
+
const timer = setTimeout(abort, timeoutMs);
|
|
24965
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
24966
|
+
if (signal?.aborted) controller.abort();
|
|
24967
|
+
try {
|
|
24968
|
+
const latest = await Promise.race([
|
|
24969
|
+
fetchLatest(controller.signal),
|
|
24970
|
+
new Promise((_resolve, reject) => {
|
|
24971
|
+
if (controller.signal.aborted) reject(new Error("aborted"));
|
|
24972
|
+
else controller.signal.addEventListener("abort", () => reject(new Error("aborted")), { once: true });
|
|
24973
|
+
})
|
|
24974
|
+
]);
|
|
24975
|
+
if (typeof latest !== "string" || !release2.test(latest)) return { status: "unavailable", latestVersion: null };
|
|
24976
|
+
return { status: isNewerRelease(latest, current) ? "available" : "up-to-date", latestVersion: latest };
|
|
24977
|
+
} catch {
|
|
24978
|
+
return { status: "unavailable", latestVersion: null };
|
|
24979
|
+
} finally {
|
|
24980
|
+
clearTimeout(timer);
|
|
24981
|
+
signal?.removeEventListener("abort", abort);
|
|
24982
|
+
}
|
|
24983
|
+
}
|
|
24984
|
+
var npmGlobalInstall = (version2) => "npm install -g gitifact@" + version2;
|
|
24985
|
+
|
|
24986
|
+
// src/server/status-session.ts
|
|
24987
|
+
function createStatusSession(initial, read, cliVersion = "0.0.0") {
|
|
24988
|
+
const identity2 = { sessionId: randomUUID2(), repository: { key: initial.repository.key, worktreeKey: initial.repository.worktreeKey } };
|
|
24989
|
+
let update = disabledUpdate;
|
|
24842
24990
|
let latest = initial;
|
|
24843
24991
|
let pending;
|
|
24844
24992
|
return {
|
|
24845
|
-
session
|
|
24993
|
+
// The identity never changes; only the update state moves (checking → a final state), so the session is built per read.
|
|
24994
|
+
get session() {
|
|
24995
|
+
return browserSessionV2.parse({ contract: "browser-session", version: 2, ...identity2, cliVersion, update });
|
|
24996
|
+
},
|
|
24997
|
+
setUpdate(next) {
|
|
24998
|
+
update = next;
|
|
24999
|
+
},
|
|
24846
25000
|
get latest() {
|
|
24847
25001
|
return latest;
|
|
24848
25002
|
},
|
|
@@ -24854,7 +25008,7 @@ function createStatusSession(initial, read) {
|
|
|
24854
25008
|
pending = (async () => {
|
|
24855
25009
|
try {
|
|
24856
25010
|
const next = await read();
|
|
24857
|
-
if (next.repository.key !==
|
|
25011
|
+
if (next.repository.key !== identity2.repository.key || next.repository.worktreeKey !== identity2.repository.worktreeKey) {
|
|
24858
25012
|
throw new RepositoryReadError("REPOSITORY_CHANGED");
|
|
24859
25013
|
}
|
|
24860
25014
|
latest = next;
|
|
@@ -25432,6 +25586,10 @@ function createSpecBrowserReader(root, sessionId, inherited = process.env) {
|
|
|
25432
25586
|
}
|
|
25433
25587
|
|
|
25434
25588
|
// src/server/browser-server.ts
|
|
25589
|
+
var readBundledChangelog = (language) => readFile4(new URL("./i18n/" + language + "/changelog.md", import.meta.url), "utf8").catch((error62) => {
|
|
25590
|
+
if (error62.code === "ENOENT") return null;
|
|
25591
|
+
throw error62;
|
|
25592
|
+
});
|
|
25435
25593
|
async function startBrowserServer(options) {
|
|
25436
25594
|
const controller = new AbortController();
|
|
25437
25595
|
const onAbort = () => controller.abort();
|
|
@@ -25451,11 +25609,13 @@ async function startBrowserServer(options) {
|
|
|
25451
25609
|
options.signal?.removeEventListener("abort", onAbort);
|
|
25452
25610
|
throw error62;
|
|
25453
25611
|
}
|
|
25454
|
-
const store = createStatusSession(initial, () => read(controller.signal));
|
|
25455
|
-
const
|
|
25612
|
+
const store = createStatusSession(initial, () => read(controller.signal), options.cliVersion);
|
|
25613
|
+
const sessionId = store.session.sessionId;
|
|
25614
|
+
const readChangelog = options.readChangelog ?? readBundledChangelog;
|
|
25615
|
+
let updatePending;
|
|
25456
25616
|
let closing = false;
|
|
25457
25617
|
let origin = "";
|
|
25458
|
-
const readSpecs = createSpecBrowserReader(initial.repository.rootPath,
|
|
25618
|
+
const readSpecs = createSpecBrowserReader(initial.repository.rootPath, sessionId, options.env);
|
|
25459
25619
|
function json2(response, status, value) {
|
|
25460
25620
|
response.writeHead(status, { "Content-Type": "application/json; charset=utf-8", "Cache-Control": "no-store" });
|
|
25461
25621
|
response.end(JSON.stringify(value) + "\n");
|
|
@@ -25493,7 +25653,7 @@ async function startBrowserServer(options) {
|
|
|
25493
25653
|
const api = path3 === "/api" || path3.startsWith("/api/");
|
|
25494
25654
|
if (api) {
|
|
25495
25655
|
if (request.headers["sec-fetch-site"] === "cross-site" && !allowedOrigin) return fail8(response, 403, "FORBIDDEN", t2("server.crossSite"));
|
|
25496
|
-
if (url2.search && path3 !== "/api/v1/specs") return fail8(response, 400, "BAD_REQUEST", t2("server.noQuery"));
|
|
25656
|
+
if (url2.search && path3 !== "/api/v1/specs" && path3 !== "/api/v1/changelog") return fail8(response, 400, "BAD_REQUEST", t2("server.noQuery"));
|
|
25497
25657
|
if (path3.startsWith("/api/v1/product/assets/")) {
|
|
25498
25658
|
const name = path3.slice("/api/v1/product/assets/".length);
|
|
25499
25659
|
if (request.method !== "GET") {
|
|
@@ -25510,13 +25670,13 @@ async function startBrowserServer(options) {
|
|
|
25510
25670
|
return;
|
|
25511
25671
|
}
|
|
25512
25672
|
const method = path3 === "/api/v1/status/refresh" ? "POST" : "GET";
|
|
25513
|
-
if (!["/api/v1/session", "/api/v1/status", "/api/v1/status/refresh", "/api/v1/specs"].includes(path3)) return fail8(response, 404, "NOT_FOUND", t2("server.apiNotFound"));
|
|
25673
|
+
if (!["/api/v1/session", "/api/v1/status", "/api/v1/status/refresh", "/api/v1/specs", "/api/v1/changelog"].includes(path3)) return fail8(response, 404, "NOT_FOUND", t2("server.apiNotFound"));
|
|
25514
25674
|
if (request.method !== method) {
|
|
25515
25675
|
response.setHeader("Allow", method);
|
|
25516
25676
|
return fail8(response, 405, "METHOD_NOT_ALLOWED", t2("server.methodNotAllowed"));
|
|
25517
25677
|
}
|
|
25518
|
-
if (path3 === "/api/v1/session") return json2(response, 200, session);
|
|
25519
|
-
if (request.headers["x-gitifact-session"] !==
|
|
25678
|
+
if (path3 === "/api/v1/session") return json2(response, 200, store.session);
|
|
25679
|
+
if (request.headers["x-gitifact-session"] !== sessionId) return fail8(response, 409, "SESSION_CHANGED", t2("server.sessionChanged"));
|
|
25520
25680
|
if (path3 === "/api/v1/specs") {
|
|
25521
25681
|
const cursor = url2.searchParams.get("cursor") ?? "0";
|
|
25522
25682
|
const head = url2.searchParams.get("head");
|
|
@@ -25528,6 +25688,19 @@ async function startBrowserServer(options) {
|
|
|
25528
25688
|
}
|
|
25529
25689
|
return;
|
|
25530
25690
|
}
|
|
25691
|
+
if (path3 === "/api/v1/changelog") {
|
|
25692
|
+
const language = url2.searchParams.get("lang") ?? defaultLanguage2;
|
|
25693
|
+
if ([...url2.searchParams.keys()].some((key) => key !== "lang") || url2.searchParams.getAll("lang").length > 1 || !/^[a-z]{2}(?:-[A-Z]{2})?$/.test(language)) return fail8(response, 400, "BAD_REQUEST", t2("server.badLanguage"));
|
|
25694
|
+
try {
|
|
25695
|
+
const own2 = await readChangelog(language);
|
|
25696
|
+
const text2 = own2 ?? (language === defaultLanguage2 ? null : await readChangelog(defaultLanguage2));
|
|
25697
|
+
if (text2 === null) return fail8(response, 404, "NOT_FOUND", t2("server.changelogNotFound"));
|
|
25698
|
+
json2(response, 200, changelogV1.parse({ contract: "changelog", version: 1, language: own2 === null ? defaultLanguage2 : language, fallback: own2 === null, entries: parseChangelog(text2) }));
|
|
25699
|
+
} catch (error62) {
|
|
25700
|
+
fail8(response, 503, "INTERNAL_ERROR", error62 instanceof Error ? error62.message : t2("server.changelogUnreadable"));
|
|
25701
|
+
}
|
|
25702
|
+
return;
|
|
25703
|
+
}
|
|
25531
25704
|
if (method === "POST" && !allowedOrigin) return fail8(response, 403, "FORBIDDEN", t2("server.refreshOrigin"));
|
|
25532
25705
|
const value = method === "POST" ? await store.refresh() : store.latest;
|
|
25533
25706
|
if (!response.destroyed) json2(response, value.ok ? 200 : 503, value);
|
|
@@ -25573,6 +25746,12 @@ async function startBrowserServer(options) {
|
|
|
25573
25746
|
const address = server.address();
|
|
25574
25747
|
if (!address || typeof address === "string") throw new Error(t2("server.addressUnknown"));
|
|
25575
25748
|
origin = "http://127.0.0.1:" + address.port;
|
|
25749
|
+
if (options.fetchLatest) {
|
|
25750
|
+
store.setUpdate(checkingUpdate);
|
|
25751
|
+
updatePending = resolveUpdate(store.session.cliVersion, options.fetchLatest, controller.signal, options.updateCheckTimeoutMs).then((state) => {
|
|
25752
|
+
store.setUpdate(state);
|
|
25753
|
+
});
|
|
25754
|
+
}
|
|
25576
25755
|
let resolveClosed;
|
|
25577
25756
|
const closed = new Promise((resolve) => {
|
|
25578
25757
|
resolveClosed = resolve;
|
|
@@ -25588,6 +25767,7 @@ async function startBrowserServer(options) {
|
|
|
25588
25767
|
server.closeAllConnections();
|
|
25589
25768
|
});
|
|
25590
25769
|
await store.pending;
|
|
25770
|
+
await updatePending;
|
|
25591
25771
|
options.signal?.removeEventListener("abort", onAbort);
|
|
25592
25772
|
options.signal?.removeEventListener("abort", closeOnAbort);
|
|
25593
25773
|
resolveClosed();
|
|
@@ -25599,15 +25779,28 @@ async function startBrowserServer(options) {
|
|
|
25599
25779
|
};
|
|
25600
25780
|
options.signal?.addEventListener("abort", closeOnAbort, { once: true });
|
|
25601
25781
|
if (options.signal?.aborted) void close();
|
|
25602
|
-
return { url: origin, session
|
|
25782
|
+
return { url: origin, get session() {
|
|
25783
|
+
return store.session;
|
|
25784
|
+
}, close, closed };
|
|
25603
25785
|
}
|
|
25604
25786
|
|
|
25787
|
+
// src/adapters/registry/latest-version.ts
|
|
25788
|
+
var manifestUrl = "https://registry.npmjs.org/gitifact";
|
|
25789
|
+
var fetchLatestVersion = async (signal) => {
|
|
25790
|
+
const response = await fetch(manifestUrl, { signal, redirect: "error", headers: { Accept: "application/vnd.npm.install-v1+json" } });
|
|
25791
|
+
if (!response.ok) throw new Error("registry status " + response.status);
|
|
25792
|
+
const manifest = await response.json();
|
|
25793
|
+
const latest = manifest["dist-tags"]?.latest;
|
|
25794
|
+
if (typeof latest !== "string") throw new Error("registry answer has no latest tag");
|
|
25795
|
+
return latest;
|
|
25796
|
+
};
|
|
25797
|
+
|
|
25605
25798
|
// src/commands/browser.ts
|
|
25606
25799
|
function parsePort(value) {
|
|
25607
25800
|
if (!/^\d+$/.test(value) || Number(value) > 65535) throw new InvalidArgumentError(t2("browser.invalidPort"));
|
|
25608
25801
|
return Number(value);
|
|
25609
25802
|
}
|
|
25610
|
-
async function runBrowser(options) {
|
|
25803
|
+
async function runBrowser(options, version2) {
|
|
25611
25804
|
const controller = new AbortController();
|
|
25612
25805
|
const stop = () => controller.abort();
|
|
25613
25806
|
process.once("SIGINT", stop);
|
|
@@ -25617,7 +25810,10 @@ async function runBrowser(options) {
|
|
|
25617
25810
|
cwd: process.cwd(),
|
|
25618
25811
|
port: options.port,
|
|
25619
25812
|
dev: options.dev ?? false,
|
|
25620
|
-
signal: controller.signal
|
|
25813
|
+
signal: controller.signal,
|
|
25814
|
+
cliVersion: version2,
|
|
25815
|
+
// --no-update-check or GITIFACT_NO_UPDATE_CHECK keeps the server from contacting the npm registry.
|
|
25816
|
+
...updateCheckDisabled(process.env, options.updateCheck === false) ? {} : { fetchLatest: fetchLatestVersion }
|
|
25621
25817
|
});
|
|
25622
25818
|
if (!controller.signal.aborted) process.stdout.write(server.url + "/\n");
|
|
25623
25819
|
await server.closed;
|
|
@@ -25892,7 +26088,7 @@ async function planAgentDocs(root, options) {
|
|
|
25892
26088
|
return { mode: "remove", paths: paths2, writes };
|
|
25893
26089
|
}
|
|
25894
26090
|
const block = await renderAgentBlock(options.version, options);
|
|
25895
|
-
const { inject, create } = resolveAgentPaths(options.agent, existing);
|
|
26091
|
+
const { inject, create } = options.onlyExisting ? { inject: candidatePaths.filter((path3) => existing.has(path3) && findBlock(existing.get(path3)) && !isWrapperFile(existing.get(path3))), create: null } : resolveAgentPaths(options.agent, existing);
|
|
25896
26092
|
for (const path3 of inject) {
|
|
25897
26093
|
const previous = existing.get(path3);
|
|
25898
26094
|
const next = injectBlock(previous, block, boilerplateFor(path3));
|
|
@@ -26004,6 +26200,64 @@ ${t2("init.text.agentDocs")}: ${docs}
|
|
|
26004
26200
|
}
|
|
26005
26201
|
}
|
|
26006
26202
|
|
|
26203
|
+
// src/commands/update.ts
|
|
26204
|
+
async function refreshBlocks(cwd, version2, env, controls) {
|
|
26205
|
+
const repo = initRepository(cwd, env);
|
|
26206
|
+
let first;
|
|
26207
|
+
let config2;
|
|
26208
|
+
try {
|
|
26209
|
+
first = await repo.inspect();
|
|
26210
|
+
config2 = await readConfigFile(first.state.repository.rootPath);
|
|
26211
|
+
} catch (error62) {
|
|
26212
|
+
if (error62 instanceof RepositoryReadError && error62.code === "NOT_A_REPOSITORY" || error62 instanceof InitError && error62.code === "MIGRATION_REQUIRED") return { state: "not-initialized", paths: [] };
|
|
26213
|
+
throw error62;
|
|
26214
|
+
}
|
|
26215
|
+
if (config2 === void 0) return { state: "not-initialized", paths: [] };
|
|
26216
|
+
const root = first.state.repository.rootPath;
|
|
26217
|
+
const plan = await planAgentDocs(root, { version: version2, onlyExisting: true, ...controls });
|
|
26218
|
+
if (plan.paths.length === 0) return { state: "no-block", paths: [] };
|
|
26219
|
+
if (plan.writes.length === 0) return { state: "current", paths: plan.paths };
|
|
26220
|
+
const unchanged = async () => {
|
|
26221
|
+
if ((await repo.inspect()).stamp !== first.stamp || await readConfigFile(root) !== config2) throw new InitError("INPUT_CHANGED", t2("init.inputChanged"));
|
|
26222
|
+
};
|
|
26223
|
+
return { state: "refreshed", paths: await applyAgentDocs(root, plan, unchanged) };
|
|
26224
|
+
}
|
|
26225
|
+
async function updateCommand(cwd, version2, env = process.env, controls = {}) {
|
|
26226
|
+
const [update, agentDocs] = await Promise.all([
|
|
26227
|
+
updateCheckDisabled(env) ? disabledUpdate : resolveUpdate(version2, controls.fetchLatest ?? fetchLatestVersion, void 0, controls.timeoutMs),
|
|
26228
|
+
refreshBlocks(cwd, version2, env, controls)
|
|
26229
|
+
]);
|
|
26230
|
+
return updateV1.parse({
|
|
26231
|
+
contract: "update",
|
|
26232
|
+
version: 1,
|
|
26233
|
+
ok: true,
|
|
26234
|
+
cliVersion: version2,
|
|
26235
|
+
update,
|
|
26236
|
+
install: update.status === "available" ? { npmGlobal: npmGlobalInstall(update.latestVersion) } : null,
|
|
26237
|
+
agentDocs
|
|
26238
|
+
});
|
|
26239
|
+
}
|
|
26240
|
+
async function runUpdate(options, version2) {
|
|
26241
|
+
try {
|
|
26242
|
+
const dto = await updateCommand(process.cwd(), version2);
|
|
26243
|
+
if (!dto.ok) throw new Error("unreachable");
|
|
26244
|
+
if (options.format !== "text") {
|
|
26245
|
+
process.stdout.write(JSON.stringify(dto) + "\n");
|
|
26246
|
+
return;
|
|
26247
|
+
}
|
|
26248
|
+
const lines = [t2("update.text.current", { version: dto.cliVersion })];
|
|
26249
|
+
lines.push(dto.update.status === "available" ? t2("update.text.available", { version: dto.update.latestVersion }) : dto.update.status === "up-to-date" ? t2("update.text.upToDate") : dto.update.status === "disabled" ? t2("update.text.disabled") : t2("update.text.unavailable"));
|
|
26250
|
+
if (dto.install) lines.push(t2("update.text.install", { command: dto.install.npmGlobal }), t2("update.text.afterInstall"));
|
|
26251
|
+
lines.push(dto.agentDocs.state === "refreshed" ? t2("update.text.blockRefreshed", { paths: dto.agentDocs.paths.join(", ") }) : dto.agentDocs.state === "current" ? t2("update.text.blockCurrent", { paths: dto.agentDocs.paths.join(", ") }) : dto.agentDocs.state === "no-block" ? t2("update.text.noBlock") : t2("update.text.notInitialized"));
|
|
26252
|
+
process.stdout.write(lines.join("\n") + "\n");
|
|
26253
|
+
} catch (error62) {
|
|
26254
|
+
const known = error62 instanceof InitError || error62 instanceof RepositoryReadError;
|
|
26255
|
+
const failure2 = { code: known ? error62.code : "UPDATE_FAILED", message: known ? error62.message : t2("update.failed") };
|
|
26256
|
+
process.stderr.write(options.format === "text" ? failure2.code + ": " + failure2.message + "\n" : JSON.stringify(updateV1.parse({ contract: "update", version: 1, ok: false, error: failure2 })) + "\n");
|
|
26257
|
+
process.exitCode = 1;
|
|
26258
|
+
}
|
|
26259
|
+
}
|
|
26260
|
+
|
|
26007
26261
|
// src/commands/spec-preview.ts
|
|
26008
26262
|
import { join as join12 } from "node:path";
|
|
26009
26263
|
import { readFile as readFile12, stat as stat2 } from "node:fs/promises";
|
|
@@ -26682,15 +26936,16 @@ async function runMigrate(options) {
|
|
|
26682
26936
|
}
|
|
26683
26937
|
|
|
26684
26938
|
// src/main.ts
|
|
26685
|
-
var program2 = new Command().name("gitifact").description(t2("help.program")).version("0.
|
|
26939
|
+
var program2 = new Command().name("gitifact").description(t2("help.program")).version("0.4.1").allowExcessArguments(false).addHelpText("after", "\n" + t2("help.notYet")).action(() => program2.outputHelp());
|
|
26686
26940
|
program2.command("status").description(t2("help.status")).allowExcessArguments(false).addOption(new Option("--format <format>", t2("help.format")).choices(["json", "text"]).default("json")).action(async (options) => {
|
|
26687
26941
|
await runStatus(options.format);
|
|
26688
26942
|
});
|
|
26689
|
-
program2.command("browser").description(t2("help.browser")).allowExcessArguments(false).option("--port <port>", t2("help.browserPort"), parsePort, 0).option("--dev", t2("help.browserDev")).action(runBrowser);
|
|
26690
|
-
program2.command("init").description(t2("help.init")).allowExcessArguments(false).option("--dry-run", t2("help.initDryRun")).addOption(new Option("--agent <agent>", t2("help.initAgent")).choices([...agentPresetNames])).addOption(new Option("--remove-agents", t2("help.initRemoveAgents")).conflicts("skipAgents")).option("--skip-agents", t2("help.initSkipAgents")).addOption(new Option("--format <format>", t2("help.format")).choices(["json", "text"]).default("json")).action((options) => runInit(options, "0.
|
|
26943
|
+
program2.command("browser").description(t2("help.browser")).allowExcessArguments(false).option("--port <port>", t2("help.browserPort"), parsePort, 0).option("--dev", t2("help.browserDev")).option("--no-update-check", t2("help.browserNoUpdateCheck")).action((options) => runBrowser(options, "0.4.1"));
|
|
26944
|
+
program2.command("init").description(t2("help.init")).allowExcessArguments(false).option("--dry-run", t2("help.initDryRun")).addOption(new Option("--agent <agent>", t2("help.initAgent")).choices([...agentPresetNames])).addOption(new Option("--remove-agents", t2("help.initRemoveAgents")).conflicts("skipAgents")).option("--skip-agents", t2("help.initSkipAgents")).addOption(new Option("--format <format>", t2("help.format")).choices(["json", "text"]).default("json")).action((options) => runInit(options, "0.4.1"));
|
|
26691
26945
|
program2.command("docs").description(t2("help.docs")).argument("[topic]", t2("help.docsTopic")).allowExcessArguments(false).action(async (topic) => {
|
|
26692
26946
|
await runDocs(topic);
|
|
26693
26947
|
});
|
|
26948
|
+
program2.command("update").description(t2("help.update")).allowExcessArguments(false).addOption(new Option("--format <format>", t2("help.format")).choices(["json", "text"]).default("json")).action((options) => runUpdate(options, "0.4.1"));
|
|
26694
26949
|
program2.command("migrate").description(t2("help.migrate")).allowExcessArguments(false).option("--dry-run", t2("help.migrateDryRun")).action(runMigrate);
|
|
26695
26950
|
var spec = program2.command("spec").description(t2("help.spec"));
|
|
26696
26951
|
var replaced = t2("help.deprecated");
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{K as e,V as t,X as n,_ as r,c as i,l as a,n as o,q as s}from"./themeProps-MQSlTycI.js";import{a as c,t as l}from"./useMediaQuery-C_nG4b-e.js";import{t as u}from"./useDevWarning-CzR6rkf6.js";import{t as d}from"./useScrollLock-CrQ0xkil.js";var f=n(s(),1),p=/^(\d+(?:\.\d+)?|\.\d+)(px|%)$/i;function m(e,t){if(typeof e==`number`)return Number.isFinite(e)&&e>0&&e<=1?e*t:null;let n=p.exec(e.trim());if(n===null)return null;let r=Number.parseFloat(n[1]);return r>0?n[2].toLowerCase()===`%`?r/100*t:r:null}function h(e){return m(e,1)!==null}function g(e,t){let n=[];for(let r of e){let e=m(r,t);e!==null&&n.push(e)}return n}function _(e,t,n=48){let r=[0,...t.filter(t=>t>0&&t<e).map(t=>e-t)].sort((e,t)=>e-t),i=[];for(let e of r){let t=i[i.length-1];(t===void 0||e-t>=n)&&i.push(e)}return i}function v(e,t){return t.reduce((t,n)=>Math.abs(n-e)<Math.abs(t-e)?n:t,t[0])}var y=.3;function ee(e,t){if(e.length<2||t<=0)return null;let n=e[e.length-1];return t-n<=.25*t?n:null}function b(e,t,n,r){let i=r!==null,a=i?t[t.length-2]:t[t.length-1],o=i?r:n,s=i?y:0;return e<=a?1:e>=o?s:1-(1-s)*((e-a)/(o-a))}function x(e,t,n,r){let i=t;if(n>0){let e=t.filter(e=>e>=r);e.length>0&&(i=e)}else if(n<0){let e=t.filter(e=>e<=r);e.length>0&&(i=e)}return v(e,i)}var S=`--_sheet-keyboard-inset`,C=new Set([`button`,`checkbox`,`color`,`file`,`hidden`,`image`,`radio`,`range`,`reset`,`submit`]);function w(){return window.visualViewport?.height??window.innerHeight}function T(){return w()>=window.innerHeight-.5}function te(){let e=window.navigator.userAgent;return/iPad|iPhone|iPod/.test(e)||e.includes(`Macintosh`)&&window.navigator.maxTouchPoints>1}function E(e){return e instanceof HTMLTextAreaElement?!e.disabled&&!e.readOnly:e instanceof HTMLInputElement?!e.disabled&&!e.readOnly&&!C.has((e.getAttribute(`type`)??`text`).toLowerCase()):e instanceof HTMLElement&&e.matches(`[contenteditable]:not([contenteditable="false"])`)}function D(e,t){if(!(e instanceof Element))return null;let n=e.closest(`input, textarea, [contenteditable]:not([contenteditable="false"])`);if(t.contains(n)&&E(n))return n;let r=e.closest(`label`),i=r instanceof HTMLLabelElement?r.control:null;return t.contains(i)&&E(i)?i:null}function O({bodyRef:e,bottomClearance:t,isEnabled:n,isFullyExpanded:r,isPageScrollLocked:i,isSheetTraveling:a,isOpen:o,isPresented:s,sheetRef:c}){let l=(0,f.useRef)(!1),u=(0,f.useRef)(!1),d=(0,f.useRef)(r),p=(0,f.useRef)(o);d.current=r,p.current=o,(0,f.useEffect)(()=>{if(!n||!a)return;let e=c.current,t=document.activeElement;e&&t instanceof HTMLElement&&t!==e&&e.contains(t)&&(u.current=l.current,e.focus({preventScroll:!0}))},[n,a,c]),(0,f.useEffect)(()=>{if(!n||!s||o)return;let e=c.current,t=document.activeElement;e&&t instanceof HTMLElement&&t!==e&&e.contains(t)&&(u.current=l.current,t.blur())},[n,o,s,c]),(0,f.useEffect)(()=>{let r=e.current,a=c.current;if(!n||!s||!r)return;let o=null,f=null,m=te(),h=()=>{r.style.setProperty(S,`0px`),o=null,f=null,l.current=!1,u.current=!1},g=(e,t)=>{if(typeof r.scrollBy!=`function`){r.scrollTop+=e;return}let n=typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches;r.scrollBy({top:e,behavior:t&&!n?`smooth`:`instant`})},_=(e,n)=>{let i=r.getBoundingClientRect(),a=e.getBoundingClientRect(),o=w(),s=Math.max(0,i.bottom-o)>0?t:0,c=i.top,l=Math.min(i.bottom,o-s);l<=c||(a.bottom>l?g(a.bottom-l,n):a.top<c&&g(a.top-c,n))},v=e=>{let n=w();if(T()){h();return}if(Math.max(0,e.bodyBottom-n)===0){h();return}let i=Math.max(0,e.bodyBottom-(n-t));r.style.setProperty(S,`${i}px`)},y=e=>{if(!d.current)return;let t=D(e.relatedTarget,r);if(t){t!==document.activeElement&&t.focus({preventScroll:!0});return}let n=D(e.target,r);p.current&&n&&!e.relatedTarget&&a?.focus({preventScroll:!0})},ee=()=>{let e=document.activeElement;if(!d.current||!(e instanceof HTMLElement)||!r.contains(e)||!E(e)){if(u.current&&o){v(o);return}h();return}u.current=!1;let n=r.getBoundingClientRect(),a=w(),s=Math.max(0,n.bottom-a),c=s>0?t:0;o=s>0?{bodyBottom:n.bottom}:null,i&&s>0&&!l.current&&(f={x:window.scrollX,y:window.scrollY}),l.current=s>0;let p=s>0?Math.max(0,n.bottom-(a-c)):0;r.style.setProperty(S,`${p}px`),_(e,s>0)},b=0,x=()=>{cancelAnimationFrame(b),b=requestAnimationFrame(ee)},C=()=>{let e=f;if(e==null||window.scrollX===e.x&&window.scrollY===e.y)return;window.scrollTo(e.x,e.y);let t=document.activeElement;t instanceof HTMLElement&&r.contains(t)&&E(t)&&_(t,!1)},O=typeof ResizeObserver>`u`?null:new ResizeObserver(x),k=()=>{if(!O)return;O.disconnect();let e=new Set([r]);a&&e.add(a);for(let t of r.children)e.add(t);let t=document.activeElement;if(t instanceof HTMLElement&&r.contains(t))for(let n=t;n&&n!==r;n=n.parentElement)e.add(n);for(let t of e)O.observe(t)},A=typeof MutationObserver>`u`?null:new MutationObserver(e=>{e.every(e=>e.type===`attributes`&&e.target===r)||(k(),x())}),j=()=>{k(),x()},M=()=>{u.current=l.current,x()},ne=e=>{e.target===a&&e.propertyName===`transform`&&x()},N=window.visualViewport;return m&&document.addEventListener(`blur`,y,!0),r.addEventListener(`focusin`,j),r.addEventListener(`focusout`,M),a?.addEventListener(`transitionend`,ne),N?.addEventListener(`resize`,x),N?.addEventListener(`scroll`,x),window.addEventListener(`scroll`,C),window.addEventListener(`resize`,x),A?.observe(r,{attributes:!0,characterData:!0,childList:!0,subtree:!0}),k(),x(),()=>{cancelAnimationFrame(b),m&&document.removeEventListener(`blur`,y,!0),r.removeEventListener(`focusin`,j),r.removeEventListener(`focusout`,M),a?.removeEventListener(`transitionend`,ne),N?.removeEventListener(`resize`,x),N?.removeEventListener(`scroll`,x),window.removeEventListener(`scroll`,C),window.removeEventListener(`resize`,x),O?.disconnect(),A?.disconnect(),r.style.removeProperty(S),l.current=!1,u.current=!1}},[e,t,n,i,s,c])}var k=1.2,A=48,j=.4,M=40;function ne(e){return e.syntheticTouch===!0}var N=.35,re=4,ie=8;function ae(){typeof navigator>`u`||typeof navigator.vibrate!=`function`||ue()||navigator.vibrate(8)}function oe(e,t){let n=t[0],r=Math.abs(e-n);for(let i of t){let t=Math.abs(e-i);t<r&&(r=t,n=i)}if(r>=M)return e;let i=r/M,a=1-i*i;return e+(n-e)*a}function se(e,t,n){return Math.max(0,e-t-n)}function ce(e){let t=Number.parseFloat(getComputedStyle(e).paddingBlockEnd);return Number.isFinite(t)?t:0}function le(e){if(!e)return 0;let t=ce(e);return Math.max(0,e.scrollHeight-e.clientHeight-t)-e.scrollTop}function P(e,t,n){return Math.max(0,e-n-t)}function ue(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function de({isOpen:e,canDismiss:t=!0,offscreenBlockEndInset:n=0,onDismiss:r,snapHeights:i,onSnap:a,onScrimOpacity:o}){let[s,c]=(0,f.useState)(0),[u,d]=(0,f.useState)(0),[p,m]=(0,f.useState)(!1),[h,g]=(0,f.useState)(0),[v,y]=(0,f.useState)(0),[S,C]=(0,f.useState)(0),w=(0,f.useRef)(0),T=(0,f.useRef)(0),[te,E]=(0,f.useState)(null),[D,O]=(0,f.useState)(!1),M=(0,f.useRef)(0),de=(0,f.useRef)(null),F=(0,f.useRef)(null),I=(0,f.useRef)(n);I.current=Math.max(0,n);let L=(0,f.useCallback)(e=>{let t=Math.max(0,e);w.current=t,C(t)},[]),R=(0,f.useCallback)(e=>{let t=Math.max(0,e);Math.abs(t-M.current)>.5&&(M.current=t,y(t))},[]),fe=(0,f.useCallback)(()=>{O(!0),de.current=null,E(null);let e=F.current;F.current=null,e!=null&&R(e)},[R]),z=(0,f.useCallback)((e,t,n,r,i,a,o)=>{let s=se(e,n,a);if(o&&Math.abs(r-t)>.5&&!ue()){F.current=s,de.current=i,E(i);return}F.current=null,de.current=null,E(null),O(Math.abs(i-n)>.5),R(s)},[R]),pe=(0,f.useRef)(0);pe.current=p?s:u;let B=(0,f.useRef)(e);B.current=e;let me=(0,f.useRef)(i);me.current=i;let he=(0,f.useRef)(r),ge=(0,f.useRef)(t),V=(0,f.useRef)(a),H=(0,f.useRef)(o);(0,f.useEffect)(()=>{he.current=r,ge.current=t,V.current=a,H.current=o});let U=(0,f.useRef)(null),W=(0,f.useRef)(0),G=(0,f.useRef)(null),K=(0,f.useRef)(null),q=(0,f.useRef)(null);(0,f.useLayoutEffect)(()=>{if(!D)return;G.current?.offsetHeight;let e=requestAnimationFrame(()=>{O(!1)});return()=>cancelAnimationFrame(e)},[D]);let J=(0,f.useCallback)(e=>{e<=0||!B.current||pe.current>0||(W.current=e,g(t=>t===e?t:e))},[]),_e=(0,f.useCallback)(e=>{if(q.current?.disconnect(),q.current=null,G.current=e,!e||typeof ResizeObserver>`u`){e&&J(e.getBoundingClientRect().height);return}J(e.getBoundingClientRect().height);let t=new ResizeObserver(e=>{let t=e[0];if(t){let e=t.borderBoxSize?.[0]?.blockSize;J(e??t.target.getBoundingClientRect().height)}});t.observe(e),q.current=t},[J]);(0,f.useEffect)(()=>()=>q.current?.disconnect(),[]),(0,f.useEffect)(()=>{e&&(c(0),d(0),m(!1),O(!1),L(0),T.current=0,M.current=0,de.current=null,F.current=null,y(0),E(null))},[e,L]);let Y=(0,f.useCallback)(()=>W.current>0?W.current:G.current?.getBoundingClientRect().height??0,[]),X=(0,f.useCallback)(e=>{let t=P(e,0,I.current),n=_(t,me.current?.()??[]);return{offsets:n,peekOffset:ee(n,t)}},[]),ve=(0,f.useCallback)(()=>{let e=G.current;if(!e)return W.current;let t=e.style.height;if(t===``)return e.getBoundingClientRect().height;e.style.height=``;let n=e.getBoundingClientRect().height;return e.style.height=t,n},[]),ye=(0,f.useCallback)(()=>{if(!B.current||U.current!=null||de.current!=null)return;let e=ve();if(e<=0)return;let{offsets:t,peekOffset:n}=X(e),r=Math.min(T.current,t.length-1),i=t[r],a=i===n?0:i,o=w.current;if(e===W.current&&Math.abs(i-pe.current)<=.5&&Math.abs(a-o)<=.5)return;W.current=e,g(e),T.current=r,z(o,i,a,i,o,le(K.current),!1),L(a),d(i),V.current?.(P(e,i,I.current));let s=t[t.length-1],c=P(e,s,I.current);H.current?.(b(i,t,s+c*j,n))},[ve,z,L,X]);(0,f.useEffect)(()=>{if(!(!e||typeof window>`u`))return window.addEventListener(`resize`,ye),window.addEventListener(`orientationchange`,ye),()=>{window.removeEventListener(`resize`,ye),window.removeEventListener(`orientationchange`,ye)}},[e,ye]);let Z=(0,f.useRef)(!1);(0,f.useLayoutEffect)(()=>{if(!Z.current){Z.current=!0;return}ye()},[ye,i]);let Q=(0,f.useCallback)(e=>{let t=U.current;if(t==null)return;U.current=null,e?.hasPointerCapture?.(t.pointerId)&&e.releasePointerCapture(t.pointerId),c(t.baseOffset),m(!1),z(t.baseLayoutOffset,t.baseOffset,t.baseLayoutOffset,t.renderedOffset,t.layoutOffset,t.naturalEndGap,!0);let{offsets:n,peekOffset:r}=X(t.height),i=n[n.length-1],a=i+P(t.height,i,I.current)*j;H.current?.(b(t.baseOffset,n,a,r))},[z,X]);(0,f.useEffect)(()=>{let e=()=>Q(),t=()=>{document.visibilityState===`hidden`&&Q()};return window.addEventListener(`blur`,e),document.addEventListener(`visibilitychange`,t),()=>{window.removeEventListener(`blur`,e),document.removeEventListener(`visibilitychange`,t)}},[Q]);let be=(0,f.useCallback)((e,t,n,r,i,a,o,s,l,u)=>{let{offsets:f,peekOffset:p}=X(n),m=f[f.length-1],h=P(n,m,I.current),g=Math.abs(t)>k&&i>A,_=e=>{let t=e===p?0:e;z(o,e,t,s,l,u,!0),L(t),T.current=Math.max(0,f.indexOf(e)),d(e),V.current?.(P(n,e,I.current));let r=m+h*j;H.current?.(b(e,f,r,p)),e!==a&&ae()};if(r>0&&g){ge.current?(z(o,a,o,o,o,u,!1),he.current()):_(m);return}if(r<0&&g){z(o,0,0,s,l,u,!0),L(0),T.current=0,c(0),d(0),V.current?.(P(n,0,I.current)),H.current?.(1),ae();return}if(e>m+h*j){ge.current?(z(o,a,o,o,o,u,!1),he.current()):_(m);return}_(x(e,f,r,a))},[z,L,X]),$=(0,f.useCallback)((e,t,n)=>{let r=e.currentTarget,i=ne(e);i||r.setPointerCapture?.(e.pointerId);let a=n??e.clientY,o=le(K.current),s=w.current;U.current={syntheticTouch:i,pointerId:e.pointerId,startCoord:a,lastCoord:e.clientY,lastTime:e.timeStamp,velocity:0,height:t,baseOffset:u,baseLayoutOffset:s,renderedOffset:u,layoutOffset:s,naturalEndGap:o},R(se(s,s,o)),c(u),m(!0)},[u,R]),xe=(0,f.useCallback)(e=>{e.button===0&&e.isPrimary&&(e.preventDefault(),$(e,Y()))},[$,Y]),Se=(0,f.useCallback)(e=>{U.current!=null&&(e.preventDefault(),Q(e.currentTarget))},[Q]),Ce=(0,f.useCallback)(e=>{U.current?.syntheticTouch||U.current?.pointerId===e.pointerId&&Q()},[Q]),we=(0,f.useCallback)(e=>{let t=U.current;if(!t||t.pointerId!==e.pointerId||t.syntheticTouch&&!ne(e))return;let n=e.clientY-t.startCoord,r=e.timeStamp-t.lastTime;r>0&&(t.velocity=(e.clientY-t.lastCoord)/r,t.lastCoord=e.clientY,t.lastTime=e.timeStamp);let{offsets:i,peekOffset:a}=X(t.height),o=t.baseOffset+n,s=i[i.length-1],l;l=o<0?Math.max(-48,o*N):o>s?o:oe(o,i);let u=l<t.baseOffset?0:t.baseLayoutOffset;t.renderedOffset=l,t.layoutOffset=u,c(l),R(se(t.baseLayoutOffset,u,t.naturalEndGap));let d=i[i.length-1],f=d+P(t.height,d,I.current)*j;H.current?.(b(l,i,f,a))},[X,R]),Te=(0,f.useCallback)(e=>{let t=U.current;if(!t||t.pointerId!==e.pointerId||t.syntheticTouch&&!ne(e))return;let n=e.currentTarget,r=e.clientY-t.startCoord,i=Math.max(0,t.baseOffset+r),a=r===0?0:r>0?1:-1;U.current=null,t.syntheticTouch||n.releasePointerCapture?.(e.pointerId),m(!1),be(i,t.velocity,t.height||1,a,Math.abs(r),t.baseOffset,t.baseLayoutOffset,t.renderedOffset,t.layoutOffset,t.naturalEndGap)},[be]),Ee=(0,f.useRef)(null),De=(0,f.useCallback)(e=>{if(e.button!==0||!e.isPrimary)return;let t=e.currentTarget;if(t.scrollTop>0){Ee.current=null;return}Ee.current={pointerId:e.pointerId,startCoord:e.clientY,scroller:t}},[]),Oe=(0,f.useCallback)(e=>{if(U.current){we(e);return}let t=Ee.current;if(!t||t.pointerId!==e.pointerId)return;let n=e.clientY-t.startCoord;n>ie&&t.scroller.scrollTop<=0?(Ee.current=null,$(e,Y(),t.startCoord),we(e)):n<0&&(Ee.current=null)},[$,we,Y]),ke=(0,f.useCallback)(e=>{Ee.current=null,!U.current?.syntheticTouch&&U.current&&Te(e)},[Te]),Ae=(0,f.useRef)(null),je=(0,f.useRef)(null),Me=(0,f.useRef)($),Ne=(0,f.useRef)(Q),Pe=(0,f.useRef)(we),Fe=(0,f.useRef)(Te),Ie=(0,f.useRef)(Y);(0,f.useEffect)(()=>{Me.current=$,Ne.current=Q,Pe.current=we,Fe.current=Te,Ie.current=Y});let Le=(0,f.useCallback)(e=>{let t=(e,t)=>({syntheticTouch:!0,pointerId:e.identifier,clientY:e.clientY,timeStamp:Date.now(),currentTarget:t,setPointerCapture:()=>{},releasePointerCapture:()=>{}}),n=e=>e.scrollTop<=0,r=e=>e.scrollTop+e.clientHeight>=e.scrollHeight-1,i=e=>{let t=e.currentTarget,i=e.changedTouches[0];if(!i){Ae.current=null;return}let a=n(t),o=r(t)&&pe.current>0;Ae.current={id:i.identifier,startY:i.clientY,top:a,bottom:o,contentEndY:null,promotedAtContentEnd:!1}},a=e=>{let i=e.currentTarget,a=Ae.current;if(U.current){let n=[...e.changedTouches].find(e=>e.identifier===U.current?.pointerId);if(!n)return;if(a?.promotedAtContentEnd&&a.contentEndY!=null){if(n.clientY>=a.contentEndY){a.contentEndY=null,a.promotedAtContentEnd=!1,Ne.current(i);return}Pe.current(t(n,i));return}e.preventDefault(),Pe.current(t(n,i));return}if(!a)return;let o=[...e.changedTouches].find(e=>e.identifier===a.id);if(!o)return;let s=o.clientY-a.startY,c=a.top&&s>ie&&n(i),l=a.bottom&&s<-8&&r(i);if(c||l){e.preventDefault(),Ae.current=null,Me.current(t(o,i),Ie.current(),a.startY),Pe.current(t(o,i));return}(a.top&&s<0||a.bottom&&s>0)&&(a.top=!1,a.bottom=!1),pe.current>0&&r(i)?a.contentEndY==null?a.contentEndY=o.clientY:a.contentEndY-o.clientY>=re&&(a.promotedAtContentEnd=!0,Me.current(t(o,i),Ie.current(),a.contentEndY),Pe.current(t(o,i))):a.contentEndY=null},o=e=>{Ae.current=null;let n=U.current?.pointerId;if(n==null)return;let r=[...e.changedTouches].find(e=>e.identifier===n),i=e.currentTarget;r?Fe.current(t(r,i)):e.touches.length===0&&Ne.current(i)},s=K.current;if(s&&je.current){let e=je.current;s.removeEventListener(`touchstart`,e.start),s.removeEventListener(`touchmove`,e.move),s.removeEventListener(`touchend`,e.end),s.removeEventListener(`touchcancel`,e.end)}K.current=e,e?(e.addEventListener(`touchstart`,i,{passive:!0}),e.addEventListener(`touchmove`,a,{passive:!1}),e.addEventListener(`touchend`,o,{passive:!0}),e.addEventListener(`touchcancel`,o,{passive:!0}),je.current={start:i,move:a,end:o}):je.current=null},[]),Re=l(`(prefers-reduced-motion: reduce)`),ze=(0,f.useCallback)(e=>{if(M.current<=0)return;let t=ce(e),n=Math.max(0,e.scrollHeight-e.clientHeight-t),r=Math.max(0,e.scrollTop-n);r<M.current-.5&&R(r)},[R]),Be=(0,f.useCallback)(e=>{U.current==null&&de.current==null&&ze(e.currentTarget)},[ze]),Ve=p?s:u;return{sheetRef:_e,contentProps:(0,f.useMemo)(()=>({style:{transform:Ve===0?void 0:`translateY(${Ve}px)`,transition:e&&(p||D||Re)?`none`:void 0,touchAction:`none`,overscrollBehavior:`contain`}}),[Ve,p,e,D,Re]),handleProps:(0,f.useMemo)(()=>({style:{touchAction:`none`,cursor:`grab`},onContextMenu:Se,onLostPointerCapture:Ce,onPointerDown:xe,onPointerMove:we,onPointerUp:Te,onPointerCancel:Te}),[Te,Se,Ce,xe,we]),bodyProps:(0,f.useMemo)(()=>({ref:Le,onContextMenu:Se,onLostPointerCapture:Ce,onPointerDown:De,onPointerMove:Oe,onPointerUp:ke,onPointerCancel:ke,onScroll:Be}),[Le,ke,De,Oe,Be,Se,Ce]),bodyElementRef:K,dragOffset:s,settledOffset:u,isDragging:p,sheetHeight:h,scrollPreservationInset:v,settlingLayoutOffset:te,settledLayoutOffset:S,completeScrollAreaSettle:fe}}var F=a(),I={hug:`92dvh`,capped:`62dvh`,tall:`92dvh`},L=48,R=48,fe=50;t[`--spacing-6`];function z(){return typeof window>`u`?0:window.innerHeight}function pe(e){let t=``;for(let n of e??[])t+=`${typeof n}:${n}|`;return t}var B={sheet:{kfzvcC:`x67bb7w`,kB7OPa:`x9f619`,kVAEAm:`x1n2onr6`,k1xSpc:`x78zum5`,kXwgrk:`xdt5ytf`,kAzted:`x2lwn1j`,kzqmXN:`xh8yej3`,ks0D6T:`x11gisft`,kWkggS:`x10xzikg`,kEafiO:`x11xkdxz`,kPef9Z:`x13fuv20`,kLZC3w:`x1pc3f07`,k2ei4v:`xgbv0en`,kVhnKS:`x1t7ytsu`,kGJrpR:`x1j92z86`,ke9TFa:`xw8tdv1`,k8ry5P:`x18b5jzi`,kBCPoo:`x1gejf6u`,krdFHd:`x81l70g`,kfmiAY:`x7hs6f1`,kGVxlE:`x1kcpxr7`,kI3sdo:`x1a2a7pz`,kVQacm:`xb3r6kr`,kGO01o:`x1wkw6tp`,k1K539:`x1if0o47`,k3aq6I:`xnn1q72 xhbqy3z`,kSiTet:`x1hc1fzr`,k1ekBW:`xwcsmn1`,kIyJzY:`x80gvsz`,kAMwcw:`xlr8y92`,k6sLGO:`x1q1rmc8`,k6CgDc:`xzg1mie`,$$css:!0},sheetClosing:{k3aq6I:`x1weeur4`,kAMwcw:`xv2sgk5`,$$css:!0},sheetFading:{kSiTet:`xg01cxk`,$$css:!0},sheetInactive:{kfzvcC:`x47corl`,$$css:!0},budget:{kZKoxP:`x1tpcejd`,$$css:!0},hugHeight:{kZKoxP:`xg7h5cd`,kskxy:`x14bu9tk`,$$css:!0}};function me(e){return e.kind===`open`?e.entering?`entering`:null:e.kind===`retained`?e.motion===`covered`?null:e.motion:e.kind===`exiting`?`exiting`:null}function he(e,t,n){if(e==null)return n(),()=>{};let r=!1,i=null,a=()=>{r||(r=!0,i!=null&&clearTimeout(i),e.removeEventListener(`transitionend`,o),e.removeEventListener(`transitioncancel`,o),n())},o=n=>{n.target===e&&n.propertyName===t&&a()};e.addEventListener(`transitionend`,o),e.addEventListener(`transitioncancel`,o);let s=getComputedStyle(e);if(e.style.transition.trim()===`none`||s.transition.trim()===`none`)return a(),()=>{};let c=s.transitionProperty.split(`,`).map(e=>e.trim()),l=s.transitionDuration.split(`,`).map(ge),u=s.transitionDelay.split(`,`).map(ge),d=!1,f=c.reduce((e,n,r)=>{if(n!==t&&n!==`all`)return e;let i=l[r%l.length],a=u[r%u.length];return i==null||a==null?(d=!0,e):Math.max(e,i+a)},0);return d?()=>{e.removeEventListener(`transitionend`,o),e.removeEventListener(`transitioncancel`,o)}:f<=0?(a(),()=>{}):(i=setTimeout(a,f+fe),()=>{i!=null&&clearTimeout(i),e.removeEventListener(`transitionend`,o),e.removeEventListener(`transitioncancel`,o)})}function ge(e){let t=e.trim();if(!/^-?(?:\d+|\d*\.\d+)(?:ms|s)$/.test(t))return null;let n=Number.parseFloat(e);return t.endsWith(`ms`)?n:n*1e3}function V({ref:t,state:n,height:i,children:a,snapPoints:s,className:l,style:d,tabIndex:p,xstyle:m,isSwipeDismissAllowed:_=!0,isPageScrollLocked:v=!1,onDismiss:y,onScrimOpacity:ee,onElementChange:b,onMotionStart:x,onMotionComplete:S,...C}){let w=(0,f.useRef)(null),T=(0,f.useRef)(n),te=(0,f.useRef)(!1),E=(0,f.useRef)(x),D=(0,f.useRef)(S),k=(0,f.useRef)(null),A=(0,f.useRef)(null),j=n.kind===`open`&&n.entering,M=T.current,ne=M.kind===`open`&&M.entering;j&&!ne?te.current=M.kind===`retained`:j||(te.current=!1),(0,f.useLayoutEffect)(()=>{T.current=n,E.current=x,D.current=S},[S,x,n]);let N=n.kind===`open`,re=n.kind!==`hidden`,ie=n.kind===`retained`,ae=ie||n.kind===`exiting`,oe=n.kind===`exiting`,se=ie&&n.motion===`fading`,ce=ie?n.alignmentOffset:0,le=pe(s),P=(0,f.useRef)(s);P.current=s;let{snapHeights:ue,ignoredSnapPointsMessage:fe}=(0,f.useMemo)(()=>{if(le===``)return{snapHeights:void 0,ignoredSnapPointsMessage:``};let e=(P.current??[]).filter(e=>!h(e));return{snapHeights:()=>g(P.current??[],z()),ignoredSnapPointsMessage:e.length===0?``:`snapPoints ignored ${JSON.stringify(e)}. A snap point is a viewport fraction above 0 and up to 1 (0.5 is half the screen), a px length ('320px'), or a percentage ('50%').`}},[le]);u(`BottomSheet`,fe,fe!==``);let{contentProps:ge,handleProps:V,bodyProps:H,bodyElementRef:U,sheetRef:W,dragOffset:G,settledOffset:K,isDragging:q,sheetHeight:J,scrollPreservationInset:_e,settlingLayoutOffset:Y,settledLayoutOffset:X,completeScrollAreaSettle:ve}=de({isOpen:N,canDismiss:_,offscreenBlockEndInset:L,onDismiss:y,snapHeights:ue,onScrimOpacity:ee}),ye=(0,f.useCallback)(e=>{W(e),w.current=e,b?.(e)},[b,W]);O({bodyRef:U,bottomClearance:R,isEnabled:i===`tall`,isFullyExpanded:K===0,isPageScrollLocked:v,isSheetTraveling:q&&G!==K,isOpen:N,isPresented:re,sheetRef:w}),(0,f.useImperativeHandle)(t,()=>w.current,[]);let Z=me(n);(0,f.useLayoutEffect)(()=>{if(Z!=null){if(k.current=null,A.current=null,Z===`entering`&&te.current){A.current=Z;return}return he(w.current,Z===`fading`?`opacity`:`transform`,()=>{k.current===Z?D.current?.(Z):A.current=Z})}},[Z]),(0,f.useLayoutEffect)(()=>{if(Y!=null)return he(w.current,`transform`,ve)},[ve,Y]),(0,f.useEffect)(()=>{if(Z!=null)return E.current?.(Z),k.current=Z,A.current===Z&&(A.current=null,D.current?.(Z)),()=>{k.current===Z&&(k.current=null),A.current===Z&&(A.current=null)}},[Z]);let Q=typeof i==`string`&&i in I?I[i]:typeof i==`number`?`${i}px`:i,be=J>0,$=ge.style.transform,xe;if(be){let e=q?G<K?0:X:Y??X,t=(q?G:K)-e;xe=e>0||q||Y!=null?`${Math.max(0,J-Math.max(0,e))}px`:void 0,$=t===0?void 0:`translateY(${t}px)`}let Se=ce>0?[$,`translateY(${ce}px)`].filter(Boolean).join(` `):$,Ce={...ge.style,transform:$,height:xe};return(0,F.jsxs)(`div`,{...C,ref:ye,tabIndex:p??-1,...c(o(`bottom-sheet`),e(B.sheet,r.reset,i===`hug`?B.hugHeight:B.budget,oe&&B.sheetClosing,se&&B.sheetFading,ae&&B.sheetInactive,m),l,{"--_sheet-budget":Q,...N?Ce:ie?{transform:Se,height:xe}:oe?{height:xe}:{},...d}),children:[(0,F.jsx)(`div`,{className:`x10l6tqk x13vifvy x1o0tod xtijo5x x1vjfegm x78zum5 x6s0dn4 xl56j7k xvpftlf xafqdz2 x5ve5x3 x1jm3nie x16khyan`,...V,"aria-hidden":`true`,children:(0,F.jsx)(`div`,{className:`x1m747yf x11c6zpc xjspbzw x1m4xfpy`})}),(0,F.jsx)(`div`,{...c({0:{className:`x1iyjqo2 x2lwn1j x9f619 x1odjw0f x8du1vd xx69xxh x10xzikg x18d9i69`},1:{className:`x1iyjqo2 x2lwn1j x9f619 x1odjw0f x8du1vd xx69xxh x10xzikg x18d9i69 xrw9175 x1s928wv xhkezso xu6fald x2q1x1w`}}[(i===`tall`)<<0],_e>0?{style:{paddingBlockEnd:`${_e}px`}}:{}),...H,children:a})]})}V.displayName=`BottomSheetPanel`;function H(){return(0,F.jsx)(`div`,{className:`xixxii4 x17y0mx6 x1ey2m1c x1kpxq89 x10xzikg xhtitgo x47corl x1cb67k9 xt2iwb0`,"data-sheet-edge-tint":``,"aria-hidden":`true`})}var U=(0,f.createContext)(null);U.displayName=`BottomSheetSwitcherContext`;function W(e,t){switch(e){case`active`:return{kind:`open`,entering:!1};case`entering`:return{kind:`open`,entering:!0};case`covered`:case`aligning`:case`fading`:return{kind:`retained`,motion:e,alignmentOffset:t};case`exiting`:return{kind:`exiting`};case`hidden`:return{kind:`hidden`}}}function G(e,t){let n=document.activeElement;if(n!=null&&e?.contains(n))return;let r=e?.querySelector(`[data-autofocus]`);r==null?t&&e?.focus({preventScroll:!0}):r.focus({preventScroll:!0})}function K({ref:e,isOpen:t,onOpenChange:n,label:r,children:a,height:o=`capped`,snapPoints:s,hasScrim:c=!0,finalFocusRef:l,purpose:p=`info`,xstyle:m,...h}){let g=(0,f.useRef)(null),_=(0,f.useRef)(null),v=(0,f.useRef)(null),[y,ee]=(0,f.useState)(t),b=t||y,x=t?{kind:`open`,entering:!1}:y?{kind:`exiting`}:{kind:`hidden`},S=(0,f.useCallback)(()=>{p!==`required`&&n(!1)},[n,p]),C=(0,f.useCallback)(()=>{p===`info`&&n(!1)},[n,p]),w=(0,f.useCallback)(e=>{_.current=e},[]),T=(0,f.useCallback)(e=>{g.current?.style.setProperty(`--_sheet-scrim-opacity`,String(e))},[]);(0,f.useEffect)(()=>{let e=g.current;e!=null&&t&&(ee(!0),e.style.setProperty(`--_sheet-scrim-opacity`,`1`),e.open||(c?(v.current=document.activeElement,e.showModal()):e.show(),G(_.current,c)))},[c,t]),(0,f.useEffect)(()=>{!t&&y&&c&&T(0)},[T,c,t,y]);let te=(0,f.useCallback)(e=>{if(e!==`exiting`||t)return;let n=g.current;n?.open&&n.close(),ee(!1),(l?.current??v.current)?.focus(),v.current=null},[l,t]);d(b&&c),u(`BottomSheet`,"requires a non-empty `label` for an accessible name; the open sheet has no built-in heading to derive one from.",t&&!r);let E=(0,f.useCallback)(e=>{e.preventDefault(),S()},[S]),D=(0,f.useCallback)(e=>{e.key===`Escape`&&(e.preventDefault(),!i(e.nativeEvent)&&S())},[S]),O=(0,f.useCallback)(e=>{c&&e.target===e.currentTarget&&C()},[C,c]);return(0,F.jsxs)(`dialog`,{...{0:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz`},8:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq`},4:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x15h3t91 x142juwg x1viac0w`},12:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x15h3t91 x142juwg x1viac0w`},2:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz x1cz9k3x`},10:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq x1cz9k3x`},6:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x142juwg x1viac0w x1cz9k3x`},14:{className:`xixxii4 x10a8y8t x1o6l61p xtdtrs8 x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x142juwg x1viac0w x1cz9k3x`},1:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz x47corl xfo81ep xh8yej3 x5yr21d`},9:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq x47corl xfo81ep xh8yej3 x5yr21d`},5:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x15h3t91 x142juwg x1viac0w x47corl xfo81ep xh8yej3 x5yr21d`},13:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x15h3t91 x142juwg x1viac0w x47corl xfo81ep xh8yej3 x5yr21d`},3:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz x1cz9k3x x47corl xfo81ep xh8yej3 x5yr21d`},11:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq x1cz9k3x x47corl xfo81ep xh8yej3 x5yr21d`},7:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1s85apg x1a2a7pz xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x142juwg x1viac0w x1cz9k3x x47corl xfo81ep xh8yej3 x5yr21d`},15:{className:`xixxii4 x10a8y8t x1x1rfll x7ab17h x1ghz6dp x1717udv xjbqb8w x1rea2x4 x1a2a7pz x1lliihq xnixb3f xni466t xxiuuzi xc0dz0a xft5bk6 x142juwg x1viac0w x1cz9k3x x47corl xfo81ep xh8yej3 x5yr21d`}}[!!b<<3|!!c<<2|!!(c&&!t&&y)<<1|!c<<0],ref:g,"aria-label":r,"aria-hidden":!t&&y?`true`:void 0,"aria-modal":c&&t?`true`:void 0,role:p===`required`?`alertdialog`:void 0,inert:!t&&y?!0:void 0,onCancel:E,onClick:O,onKeyDown:D,children:[(0,F.jsx)(`div`,{className:`x10l6tqk x17y0mx6 x1ey2m1c x78zum5 xl56j7k x47corl`,children:(0,F.jsx)(V,{...h,ref:e,state:x,height:o,snapPoints:s,isSwipeDismissAllowed:p===`info`,isPageScrollLocked:b&&c,xstyle:m,onDismiss:C,onScrimOpacity:T,onElementChange:w,onMotionComplete:te,children:a})}),(0,F.jsx)(H,{})]})}function q({switcher:e,ref:t,sheetId:n,label:r,children:i,height:a=`capped`,snapPoints:o,purpose:s=`info`,xstyle:c,...l}){let{activeSheet:d,hasScrim:p,onActiveSheetChange:m,getSheetPhase:h,getSheetAlignmentOffset:g,registerSheetElement:_,registerSheetLabel:v,registerSheetPurpose:y,onSheetEnterStart:ee,onSheetTransitionComplete:b,onSheetScrimOpacityChange:x}=e,S=typeof n==`string`&&n.length>0,C=S?h(n):`hidden`,w=W(C,S?g(n):0),T=C===`active`||C===`entering`,te=C===`covered`||C===`aligning`||C===`fading`||C===`exiting`,E=C!==`hidden`,D=C===`active`||C===`entering`,O=(0,f.useRef)(null),k=(0,f.useRef)(C),A=k.current,j=(0,f.useRef)(!1);(0,f.useLayoutEffect)(()=>{k.current=C},[C]);let M=(0,f.useCallback)(()=>{s===`info`&&S&&d===n&&m(null)},[d,S,m,s,n]),ne=(0,f.useCallback)(e=>{O.current=e,S&&_(n,e)},[S,_,n]),N=(0,f.useCallback)(e=>{e===`entering`&&S&&ee(n)},[S,ee,n]),re=(0,f.useCallback)(e=>{S&&b({sheetId:n,phase:e})},[S,b,n]),ie=(0,f.useCallback)(e=>{S&&x(n,e)},[S,x,n]);return(0,f.useLayoutEffect)(()=>{if(S)return v(n,r),()=>v(n,null)},[S,r,v,n]),(0,f.useLayoutEffect)(()=>{if(S)return y(n,s),()=>y(n,null)},[S,s,y,n]),(0,f.useEffect)(()=>{if(T){let e=A===`active`||A===`entering`;(!j.current||!e)&&G(O.current,p),j.current=!0}else C===`hidden`&&(j.current=!1)},[p,T,C,A]),u(`BottomSheet`,"requires a non-empty `label` for an accessible name; the open sheet has no built-in heading to derive one from.",T&&!r),(0,F.jsx)(`div`,{...{0:{className:`x10l6tqk x17y0mx6 x1ey2m1c x78zum5 xl56j7k x47corl`},2:{className:`x10l6tqk x17y0mx6 x1ey2m1c xl56j7k x47corl x1s85apg`},1:{className:`x10l6tqk x17y0mx6 x1ey2m1c x78zum5 xl56j7k x47corl x1vjfegm`},3:{className:`x10l6tqk x17y0mx6 x1ey2m1c xl56j7k x47corl x1s85apg x1vjfegm`}}[!E<<1|!!D<<0],hidden:!E,"aria-hidden":te?`true`:void 0,inert:te?!0:void 0,children:(0,F.jsx)(V,{...l,ref:t,state:w,height:a,snapPoints:o,isSwipeDismissAllowed:s===`info`,isPageScrollLocked:p,xstyle:c,onDismiss:M,onScrimOpacity:ie,onElementChange:ne,onMotionStart:N,onMotionComplete:re,children:(0,F.jsx)(U,{value:null,children:i})})})}function J(e){let t=(0,f.use)(U),n=e.sheetId,r=typeof n==`string`&&n.length>0;return u(`BottomSheet`,"requires a non-empty `sheetId` when nested in BottomSheetSwitcher; standalone `isOpen` / `onOpenChange` props are ignored there.",t!=null&&!r),u(`BottomSheet`,"`sheetId` only works inside BottomSheetSwitcher. Use `isOpen` and `onOpenChange` for a standalone sheet.",t==null&&n!=null),t==null?(0,F.jsx)(K,{...e}):(0,F.jsx)(q,{...e,switcher:t})}J.displayName=`BottomSheet`;export{J as BottomSheet};
|