@maudecode/kanvil 0.4.1 → 0.4.3
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/apps/server/.env.example +2 -0
- package/apps/server/dist/{auth-DAqfvUJm.mjs → auth-CnAQzKyq.mjs} +48 -17
- package/apps/server/dist/client.mjs +1 -1
- package/apps/server/dist/{config-BFzcAs8u.mjs → config-DOT1SDQO.mjs} +2 -1
- package/apps/server/dist/index.mjs +6 -6
- package/apps/server/dist/migrate.mjs +1 -1
- package/apps/server/dist/recover.mjs +3 -3
- package/apps/server/dist/{src-tQ82UI8k.mjs → src-VxR5jZiK.mjs} +145 -8
- package/apps/web/dist/assets/{CompositeItem-DgnfVvrF.js → CompositeItem-B5Qlh5m0.js} +1 -1
- package/apps/web/dist/assets/{Trans-f2VYVS9z.js → Trans-DxqBaUXP.js} +1 -1
- package/apps/web/dist/assets/{admin-settings-DBZL4siY.js → admin-settings-Bp7V2t1V.js} +1 -1
- package/apps/web/dist/assets/{archive-restore-CGuLxoHC.js → archive-restore-wsAzhqi-.js} +1 -1
- package/apps/web/dist/assets/az-AZ-DlsPlUZi.js +1 -0
- package/apps/web/dist/assets/{az-BE5iqNIE.js → az-C4KDjOOw.js} +1 -1
- package/apps/web/dist/assets/{corner-left-up-BCro--Gl.js → corner-left-up-arA2ipmM.js} +1 -1
- package/apps/web/dist/assets/de-DE-DLCaqUUe.js +1 -0
- package/apps/web/dist/assets/{de-DLGjUGf_.js → de-Z599ZW7b.js} +1 -1
- package/apps/web/dist/assets/default-6QIAyMq2.js +56 -0
- package/apps/web/dist/assets/{delivery-settings-CZOtb4X8.js → delivery-settings-D5NKPlhN.js} +1 -1
- package/apps/web/dist/assets/el-GR-P2XcwrSU.js +1 -0
- package/apps/web/dist/assets/{el-CG6Xy42v.js → el-xsvq992p.js} +1 -1
- package/apps/web/dist/assets/{ellipsis-ZJM26JNS.js → ellipsis-UOkL14vq.js} +1 -1
- package/apps/web/dist/assets/{es-Bbj5WuMM.js → es-D3e9L5_i.js} +1 -1
- package/apps/web/dist/assets/es-ES-CJoX8f3w.js +1 -0
- package/apps/web/dist/assets/{forms-C3pNy-qY.js → forms-BbWAl0BZ.js} +1 -1
- package/apps/web/dist/assets/{fr-CjuIKc1o.js → fr-CY35Bcpp.js} +1 -1
- package/apps/web/dist/assets/fr-FR-yLkQdy6a.js +1 -0
- package/apps/web/dist/assets/{hi-BVVrZ-zZ.js → hi-Cqfv-E5P.js} +1 -1
- package/apps/web/dist/assets/hi-IN-y8dqej7z.js +1 -0
- package/apps/web/dist/assets/{highlight-CKyEM4jx.js → highlight-Ds7xUUQv.js} +1 -1
- package/apps/web/dist/assets/{id-BhNWOQnp.js → id-CFBOVDUC.js} +1 -1
- package/apps/web/dist/assets/id-ID-DSvh8mGH.js +1 -0
- package/apps/web/dist/assets/{index-BIuqxnJn.js → index-2V6MWx63.js} +5 -5
- package/apps/web/dist/assets/{invitations-D5unaga2.js → invitations-BPk5fwwU.js} +1 -1
- package/apps/web/dist/assets/{it-Cav3_-xd.js → it-DNLponcC.js} +1 -1
- package/apps/web/dist/assets/it-IT-BUcfUqNo.js +1 -0
- package/apps/web/dist/assets/{item-Cj8xpMLk.js → item-DED0Ikqi.js} +1 -1
- package/apps/web/dist/assets/ja-JP-C-jLP_Ay.js +1 -0
- package/apps/web/dist/assets/{ja-DTmZE0Qe.js → ja-ZXGlS4WA.js} +1 -1
- package/apps/web/dist/assets/{ko-BuYCMOUj.js → ko-CSoj1hQM.js} +1 -1
- package/apps/web/dist/assets/ko-KR-C5Ozdm2E.js +1 -0
- package/apps/web/dist/assets/{label-settings-B89Ehf78.js → label-settings-D12QOkDs.js} +1 -1
- package/apps/web/dist/assets/{markdown-blocks-DSEA68s5.js → markdown-blocks-DbsqN1T2.js} +1 -1
- package/apps/web/dist/assets/{member-directory-48yD01yN.js → member-directory-BRhEIYZ6.js} +1 -1
- package/apps/web/dist/assets/{mk-BZ2Rg2sU.js → mk-D77vceoz.js} +1 -1
- package/apps/web/dist/assets/mk-MK-BdM_SsE8.js +1 -0
- package/apps/web/dist/assets/{nl-BtnPzRih.js → nl-Bew8-xmX.js} +1 -1
- package/apps/web/dist/assets/nl-NL-CwjB5sva.js +1 -0
- package/apps/web/dist/assets/{pl-Beg8hEdK.js → pl-CEBl_oa9.js} +1 -1
- package/apps/web/dist/assets/pl-PL-6-PMhTBd.js +1 -0
- package/apps/web/dist/assets/{project-lifecycle-CIAMJ-SX.js → project-lifecycle-DGHAmEB2.js} +1 -1
- package/apps/web/dist/assets/{project-settings-C7lolDSl.js → project-settings-DY8Ossd-.js} +1 -1
- package/apps/web/dist/assets/{pt-BR-B4VZ35N_.js → pt-BR-BDTQeKcp.js} +1 -1
- package/apps/web/dist/assets/pt-BR-TD_wt6Hr.js +1 -0
- package/apps/web/dist/assets/{public-project-DvvfaUd2.js → public-project-BeXla8TL.js} +1 -1
- package/apps/web/dist/assets/{rotate-ccw-GjVJPDML.js → rotate-ccw-DGM890Fc.js} +1 -1
- package/apps/web/dist/assets/{ru-DjVJVHzv.js → ru-BeH0eXQq.js} +1 -1
- package/apps/web/dist/assets/ru-RU-Bk1a6Oln.js +1 -0
- package/apps/web/dist/assets/{search-ZaQmVnj1.js → search-B3-w3oCd.js} +3 -3
- package/apps/web/dist/assets/{send-Dr9bXHhf.js → send-B9baaCnt.js} +1 -1
- package/apps/web/dist/assets/{settings-DXvrVvyS.js → settings-BKZfEkVk.js} +1 -1
- package/apps/web/dist/assets/{sliders-horizontal-C1t_zA7D.js → sliders-horizontal-yKgghk8h.js} +1 -1
- package/apps/web/dist/assets/{switch-D-WTDajm.js → switch-ByOrazEW.js} +1 -1
- package/apps/web/dist/assets/{table-BaRMFP84.js → table-Cm6NQXfq.js} +1 -1
- package/apps/web/dist/assets/{ticket-detail-CFJI4qoK.js → ticket-detail-Cd3_e2jz.js} +2 -2
- package/apps/web/dist/assets/{ticket-editor-DL3nHG_q.js → ticket-editor-CLDBUk0n.js} +2 -2
- package/apps/web/dist/assets/{ticket-list-CDkweYGS.js → ticket-list-BC9acNl4.js} +1 -1
- package/apps/web/dist/assets/{ticket-list-controls-CmTgFQQ-.js → ticket-list-controls-CRQk5ghe.js} +1 -1
- package/apps/web/dist/assets/{tr-Ckc4TA71.js → tr-BNApk6Hc.js} +1 -1
- package/apps/web/dist/assets/tr-TR-CUfBb7K9.js +1 -0
- package/apps/web/dist/assets/{uk-B4ZvJ8xG.js → uk-CjShsgpN.js} +1 -1
- package/apps/web/dist/assets/uk-UA-BDaXBsDP.js +1 -0
- package/apps/web/dist/assets/{upload-BwGa8shS.js → upload-BzLq4CMS.js} +1 -1
- package/apps/web/dist/assets/{useQueries-sQEHjB0a.js → useQueries-D64vLhM6.js} +1 -1
- package/apps/web/dist/assets/vi-VN-Bgb-L6mE.js +1 -0
- package/apps/web/dist/assets/{vi-Dq2krfY8.js → vi-s5Hfv1Y-.js} +1 -1
- package/apps/web/dist/assets/{visual-editor-CBhwqTDu.js → visual-editor-KE96mwCg.js} +1 -1
- package/apps/web/dist/assets/{workspace-settings-DgLyieJN.js → workspace-settings-C-Phmi9i.js} +1 -1
- package/apps/web/dist/assets/{zh-CN-B7Rxc3Mp.js → zh-CN-BBnpHJ9R.js} +1 -1
- package/apps/web/dist/assets/zh-CN-BypkvBe6.js +1 -0
- package/apps/web/dist/assets/zh-TW-CgMsT_XS.js +1 -0
- package/apps/web/dist/assets/{zh-TW-awiwHjeM.js → zh-TW-sSWkqSLN.js} +1 -1
- package/apps/web/dist/index.html +7 -7
- package/compose.yml +1 -0
- package/docs/api.md +4 -4
- package/docs/self-hosting.md +2 -0
- package/package.json +1 -1
- package/apps/server/dist/instance-CCeXRJ6m.mjs +0 -133
- package/apps/web/dist/assets/az-AZ-DesqXNg5.js +0 -1
- package/apps/web/dist/assets/de-DE-BIGY9SNm.js +0 -1
- package/apps/web/dist/assets/default-BgvtI7HK.js +0 -56
- package/apps/web/dist/assets/el-GR-D2TjImt0.js +0 -1
- package/apps/web/dist/assets/es-ES-C_fRqLGU.js +0 -1
- package/apps/web/dist/assets/fr-FR-_tnQsn4j.js +0 -1
- package/apps/web/dist/assets/hi-IN-CcmFsZYy.js +0 -1
- package/apps/web/dist/assets/id-ID-C59tC61D.js +0 -1
- package/apps/web/dist/assets/it-IT-BAP5O3gK.js +0 -1
- package/apps/web/dist/assets/ja-JP-vQa7mEdh.js +0 -1
- package/apps/web/dist/assets/ko-KR-CXlpmX0-.js +0 -1
- package/apps/web/dist/assets/mk-MK-BU5BLpXM.js +0 -1
- package/apps/web/dist/assets/nl-NL-2aSpdZkg.js +0 -1
- package/apps/web/dist/assets/pl-PL-C5Wvnv7f.js +0 -1
- package/apps/web/dist/assets/pt-BR-CVvI-ZB7.js +0 -1
- package/apps/web/dist/assets/ru-RU-C7UUdGIh.js +0 -1
- package/apps/web/dist/assets/tr-TR-VVsL3uMp.js +0 -1
- package/apps/web/dist/assets/uk-UA-DRpCbOps.js +0 -1
- package/apps/web/dist/assets/vi-VN-C0YFqq9j.js +0 -1
- package/apps/web/dist/assets/zh-CN-pcgTdR8c.js +0 -1
- package/apps/web/dist/assets/zh-TW-DymSXkFg.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={common:{status:{backlog:`Tồn đọng`,todo:`Cần làm`,in_progress:`Đang làm`,in_review:`Đang duyệt`,done:`Hoàn thành`,cancelled:`Đã hủy`},priority:{urgent:`Khẩn cấp`,high:`Cao`,medium:`Trung bình`,low:`Thấp`,none:`Không có mức ưu tiên`},kind:{feature:`Tính năng`,bug:`Lỗi`,chore:`Bảo trì`,research:`Nghiên cứu`,documentation:`Tài liệu`},difficulty:{low:`Thấp`,med:`Trung bình`,high:`Cao`,none:`Không có độ khó`},role:{reader:`Chỉ đọc`,writer:`Có thể sửa`,admin:`Quản trị viên`},permission:{ticket:{write:{label:`Sửa phiếu`,description:`Tạo, sửa, di chuyển, nhận và bình luận phiếu; tạo dự án`},delete:{label:`Xóa phiếu`,description:`Xóa vĩnh viễn phiếu`}},project:{manage:{label:`Quản lý dự án`,description:`Thông tin dự án, quy trình, nhãn, trường, tích hợp và vòng đời`}},member:{manage:{label:`Quản lý thành viên`,description:`Thêm, thay đổi và xóa thành viên`}},invitation:{manage:{label:`Quản lý lời mời`,description:`Mời người khác qua email`}},sharing:{manage:{label:`Quản lý chia sẻ`,description:`Liên kết công khai chỉ đọc và nguồn lịch`}},workspace:{manage:{label:`Quản lý không gian làm việc`,description:`Thông tin không gian làm việc, nhãn dùng chung và vai trò`}}},customFieldType:{text:`Văn bản`,number:`Số`,date:`Ngày`,checkbox:`Hộp kiểm`,select:`Chọn một`,multiselect:`Chọn nhiều`},customField:{removedOption:`Tùy chọn đã xóa`,checked:`Có`},filterField:{status:`Trạng thái`,priority:`Mức ưu tiên`,kind:`Loại`,difficulty:`Độ khó`,label:`Nhãn`,assigneeId:`Người được giao`,customField:`Trường`},sort:{priority:`Mức ưu tiên`,updated:`Cập nhật gần đây`,created:`Tạo gần đây`,title:`Tiêu đề`,labels:`Nhãn`,due:`Hạn chót`,start:`Ngày bắt đầu`,number:`Số phiếu`,status:`Trạng thái`,difficulty:`Độ khó`,kind:`Loại`,assignee:`Người được giao`,manual:`Thủ công`},due:{overdue:`Quá hạn`,today:`Đến hạn hôm nay`,week:`Đến hạn tuần này`,scheduled:`Có hạn chót`,none:`Không có hạn chót`},relation:{blocks:{outgoing:`Chặn`,incoming:`Bị chặn bởi`},related:{outgoing:`Liên quan đến`,incoming:`Liên quan đến`},duplicate:{outgoing:`Trùng với`,incoming:`Bị trùng bởi`},causes:{outgoing:`Gây ra`,incoming:`Bị gây ra bởi`},clones:{outgoing:`Sao chép`,incoming:`Được sao chép bởi`},implements:{outgoing:`Triển khai`,incoming:`Được triển khai bởi`},reviews:{outgoing:`Duyệt`,incoming:`Được duyệt bởi`}},remoteKind:{branch:`Nhánh`,pull_request:`Pull request`,issue:`Issue`},notificationCategory:{assignment:`Giao việc`,status:`Thay đổi trạng thái`,comment:`Bình luận`,mention:`Lượt nhắc`,update:`Cập nhật khác`,due_soon:`Sắp đến hạn`,overdue:`Quá hạn`},destinationEvent:{created:`Phiếu mới`},deliveryKind:{email:`Email`,webhook:`Webhook`},change:{pull_request:{name:`Pull request`,opened:`Đã mở pull request`,draft:`Pull request nháp`,merged:`Đã hợp nhất pull request`,closed:`Đã đóng pull request chưa hợp nhất`},merge_request:{name:`Merge request`,opened:`Đã mở merge request`,draft:`Merge request nháp`,merged:`Đã hợp nhất merge request`,closed:`Đã đóng merge request chưa hợp nhất`},branchCreated:`Đã tạo nhánh`},issueLinkState:{active:`Đang đồng bộ`,paused:`Tạm dừng`,review:`Cần xem xét`,creating:`Đang tạo issue`,unknown:`Chưa xác nhận việc tạo`},importStatus:{previewed:`Sẵn sàng nhập`,running:`Đang nhập`,completed:`Đã nhập`,failed:`Thất bại`,cancelled:`Đã hủy`},importProvider:{linear:{project:`Nhóm`,setup:`Tạo khóa API cá nhân trong Settings › Security & access của Linear; quyền đọc là đủ.`},jira:{project:`Dự án`,setup:`Jira Cloud đăng nhập bằng email tài khoản và token API từ id.atlassian.com; Data Center và Server dùng token truy cập cá nhân. Quyền duyệt dự án là đủ.`},trello:{project:`Bảng`,setup:`Dùng khóa API của một Power-Up bạn quản trị tại trello.com/power-ups/admin và token được tạo cho nó; quyền đọc là đủ.`},plane:{project:`Dự án`,setup:`Tạo token truy cập cá nhân trong Profile settings › Personal access tokens của Plane. Địa chỉ API của Plane Cloud là https://api.plane.so; mã URL không gian làm việc là phần đầu tiên trong địa chỉ web của nó.`},planka:{project:`Bảng`,setup:`Đăng nhập bằng tài khoản PLANKA có thể mở bảng; phiên do Kanvil mở sẽ kết thúc khi đọc xong. Quản trị viên PLANKA 2 có thể cấp khóa API thay thế.`},kaneo:{project:`Dự án`,setup:`Tạo khóa API trong Settings › Account › Developer của Kaneo.`}},plankaSignIn:{password:`Tên người dùng và mật khẩu`,api_key:`Khóa API`},jiraEdition:{cloud:`Cloud`,data_center:`Data Center hoặc Server`},event:{time_entry:{created:`Đã tạo bản ghi thời gian`,updated:`Đã cập nhật bản ghi thời gian`,deleted:`Đã xóa bản ghi thời gian`},label:{created:`Đã tạo nhãn`,updated:`Đã cập nhật nhãn`,deleted:`Đã xóa nhãn`},workflow:{created:`Đã thêm trạng thái quy trình`,updated:`Đã thay đổi trạng thái quy trình`,deleted:`Đã xóa trạng thái quy trình`},custom_field:{created:`Đã tạo trường`,updated:`Đã cập nhật trường`,deleted:`Đã xóa trường`},ticket:{created:`Đã tạo phiếu`,updated:`Đã cập nhật phiếu`,deleted:`Đã xóa phiếu`,moved:`Đã chuyển từ dự án khác`,moved_away:`Đã chuyển sang dự án khác`,due_soon:`Sắp đến hạn`,overdue:`Quá hạn`,claimed:`Đã nhận việc`},claim:{renewed:`Đã gia hạn nhận việc`,released:`Đã trả việc`,recovered:`Đã thu hồi việc đã nhận`},comment:{created:`Đã thêm bình luận`,updated:`Đã sửa bình luận`,deleted:`Đã xóa bình luận`},relation:{added:`Đã thêm quan hệ`,removed:`Đã xóa quan hệ`},attachment:{created:`Đã đính kèm tệp`,deleted:`Đã xóa tệp`},evidence:{added:`Đã đính kèm bằng chứng`},resource:{added:`Đã thêm liên kết`,updated:`Đã sửa liên kết`,removed:`Đã xóa liên kết`},calendar_feed:{created:`Đã tạo nguồn lịch`,revoked:`Đã thu hồi nguồn lịch`},project:{created:`Đã tạo dự án`,updated:`Đã cập nhật dự án`,archived:`Đã lưu trữ dự án`,restored:`Đã khôi phục dự án`,transferred:`Đã chuyển dự án sang không gian làm việc khác`,deleted:`Đã xóa dự án`},membership:{updated:`Đã thay đổi quyền truy cập dự án`},workspace:{owner_changed:`Đã đổi chủ sở hữu không gian làm việc`},role:{created:`Đã tạo vai trò`,updated:`Đã thay đổi vai trò`,deleted:`Đã xóa vai trò`},invitation:{updated:`Đã thay đổi lời mời`},destination:{created:`Đã thêm đích đến`,updated:`Đã thay đổi đích đến`,deleted:`Đã xóa đích đến`},repository:{connected:`Đã kết nối kho mã`,updated:`Đã thay đổi kết nối kho mã`,disconnected:`Đã ngắt kết nối kho mã`,received:`Đã nhận webhook của kho mã`},issue_link:{updated:`Đã thay đổi đồng bộ issue`}},error:{network:`Không thể kết nối tới Kanvil. Kiểm tra kết nối và thử lại.`,fallback:`Không thể hoàn tất yêu cầu`,input:`Dữ liệu nhập`,code:{unauthorized:`Đăng nhập để tiếp tục.`,session_required:`Dùng tài khoản đã đăng nhập cho thao tác này.`,account_disabled:`Tài khoản này đã bị vô hiệu hóa.`,forbidden:`Bạn không có quyền thực hiện thao tác này.`,insufficient_scope:`Thông tin xác thực này không cho phép thao tác này.`,workspace_scope_required:`Dùng tài khoản có quyền truy cập không gian làm việc cho thao tác này.`,invalid_origin:`Nguồn gốc này không được phép.`,not_found:`Không tìm thấy mục này hoặc bạn không có quyền xem.`,version_conflict:`Mục này đã thay đổi kể từ khi tải. Tải lại và thử lại.`,time_entry_conflict:`Người dùng này đã có một bản ghi thời gian đang chạy trên phiếu.`,claim_conflict:`Một tiến trình khác đang giữ phiếu này.`,idempotency_conflict:`Yêu cầu này đã được dùng cho một thay đổi khác.`,project_archived:`Khôi phục dự án đã lưu trữ trước khi thay đổi.`,rate_limited:`Quá nhiều thay đổi trong thời gian ngắn. Hãy chờ rồi thử lại.`,snapshot_required:`Luồng trực tiếp bị chậm. Tải lại để tiếp tục.`,request_failed:`Không thể hoàn tất yêu cầu`}},action:{add:`Thêm`,apply:`Áp dụng`,back:`Quay lại`,cancel:`Hủy`,clear:`Xóa`,close:`Đóng`,confirm:`Xác nhận`,continue:`Tiếp tục`,copy:`Sao chép`,create:`Tạo`,delete:`Xóa`,done:`Xong`,edit:`Sửa`,open:`Mở`,remove:`Gỡ bỏ`,rename:`Đổi tên`,reset:`Đặt lại`,retry:`Thử lại`,save:`Lưu`,search:`Tìm kiếm`},state:{copied:`Đã sao chép`,loading:`Đang tải…`,saved:`Đã lưu`,saving:`Đang lưu…`,none:`Không có`,unassigned:`Chưa giao`},evidenceKind:{pull_request:`Pull request`,test:`Kiểm thử`,review:`Duyệt`,deployment:`Triển khai`,device:`Thiết bị`,other:`Khác`},evidenceOutcome:{reported:`Đã báo cáo`,pending:`Đang chờ`,passed:`Đạt`,failed:`Không đạt`},readinessReason:{project_archived:`Dự án đã được lưu trữ`,not_open:`Phiếu phải ở trạng thái Cần làm và chưa lưu trữ`,not_enabled:`Chưa bật làm việc cho tác tử`,missing_description:`Thêm mô tả`,missing_acceptance_criteria:`Thêm tiêu chí chấp nhận`,missing_difficulty:`Chọn độ khó`,duplicate:`Phiếu này được đánh dấu là trùng lặp`,claim_recovery_required:`Xác nhận tiến trình trước đã dừng rồi mới thu hồi quyền sở hữu`,claimed:`Đã được {{worker}} nhận`,dependency:`{{key}} chưa hoàn thành`},person:{deleted:`Tài khoản đã xóa`,former:`Cựu thành viên`},signIn:{codeTitle:`Đăng nhập bằng mã`,resetTitle:`Đặt lại mật khẩu`,codeSent:`Nếu {{email}} có tài khoản, mã đang được gửi đến. Mã hết hạn sau 10 phút.`,code:`Mã`,newPassword:`Mật khẩu mới`,sendCode:`Gửi mã qua email`,back:`Quay lại đăng nhập`,resend:`Gửi lại mã`,resent:`Đã gửi lại mã`,emailCode:`Gửi mã đăng nhập qua email`,forgot:`Quên mật khẩu?`,resetDone:`Đã đặt lại mật khẩu. Đăng nhập bằng mật khẩu mới.`,resetDoneTitle:`Đã đặt lại mật khẩu`,resetDoneBody:`Đăng nhập bằng mật khẩu mới.`,invalidCode:`Mã sai, đã được dùng hoặc đã hết hạn. Gửi lại để nhận mã hợp lệ.`,localPassword:`Mật khẩu cục bộ`},language:{label:`Ngôn ngữ`,system:`Mặc định hệ thống`}},shell:{ui:{showValue:`Hiện {{label, lowercase}}`,hideValue:`Ẩn {{label, lowercase}}`,previousPage:`Trang {{noun}} trước`,nextPage:`Trang {{noun}} tiếp theo`,pageRange:`{{from}}–{{to}} trên {{total}}`,priority:`Ưu tiên {{label, lowercase}}`,working:`Đang xử lý…`,searchPlaceholder:`Tìm kiếm…`,clearValue:`Xóa {{label, lowercase}}`,copyValue:`Sao chép {{label, lowercase}}`,copied:`Đã sao chép {{value}}`},documentTitle:`{{name}} · Kanvil`,openKanvil:`Mở Kanvil`,page:{home:`Trang chủ`,myWork:`Việc của tôi`,inbox:`Hộp thư đến`,search:`Tìm kiếm`,settings:`Cài đặt`,planning:`Kế hoạch`,ticket:`Phiếu`,tickets:`Phiếu`,projects:`Dự án`},connection:{restored:`Đã khôi phục kết nối`,lost:`Mất kết nối`,reconnecting:`Đang kết nối lại…`,reload:`Tải lại`,signIn:`Đăng nhập để kết nối lại`},app:{skipToContent:`Chuyển đến nội dung`,assigned:`Được giao cho bạn`,openCount_other:`{{count, number}} đang mở`,noAssigned:`Không có phiếu đang mở nào được giao cho bạn`,allInMyWork_other:`Tất cả {{count, number}} trong Việc của tôi`,openMyWork:`Mở Việc của tôi`,recentActivity:`Hoạt động gần đây`,noActivity:`Chưa có hoạt động`,searchProjects:`Tìm dự án`,projectCount_other:`{{count, number}} dự án`,noMatchingProjects:`Không có dự án phù hợp`,clearSearch:`Xóa tìm kiếm`,noWorkspaces:`Chưa có không gian làm việc`,noActiveProjects:`Không có dự án đang hoạt động`,noProjects:`Chưa có dự án`,archivedProjects:`Dự án đã lưu trữ`,archived:`Đã lưu trữ`,noOpenTickets:`Không có phiếu đang mở`,overdueCount_other:`{{count, number}} quá hạn`,percentDone:`Hoàn thành {{percent}}`,nextDue:`hạn tiếp theo <time/>`,projectSettingsFor:`Cài đặt dự án {{name}}`,pageNotFound:`Không tìm thấy trang`,openHome:`Mở trang chủ`,tryAgain:`Thử lại`,adminRequired:`Cần quyền quản trị viên hệ thống`,projectNotFound:`Không tìm thấy dự án`,noWorkspaceSelected:`Chưa chọn không gian làm việc`},auth:{signIn:`Đăng nhập`,createOwner:`Tạo tài khoản chủ sở hữu`,ownerHint:`Tài khoản đầu tiên quản trị hệ thống này.`,invitedHint:`Đăng nhập bằng địa chỉ email được mời để chấp nhận lời mời.`,signInWith:`Đăng nhập bằng {{provider}}`,useEmail:`Dùng email và mật khẩu`,or:`hoặc`,name:`Tên`,setupToken:`Token thiết lập`,setupTokenHint:`Dùng KANVIL_SETUP_TOKEN trong cấu hình hệ thống của bạn.`,email:`Email`,password:`Mật khẩu`,signingIn:`Đang đăng nhập…`,createAccount:`Tạo tài khoản`,consent:{expired:`Yêu cầu ủy quyền đã hết hạn. Hãy kết nối lại ứng dụng khách.`,title:`Ủy quyền cho {{client}}`,titleUnnamed:`Ủy quyền ứng dụng khách`,subtitle:`Ứng dụng khách này yêu cầu truy cập dưới danh nghĩa tài khoản của bạn. Quyền của dự án vẫn được áp dụng.`,deny:`Từ chối`,allow:`Cho phép truy cập`},invitation:{unavailable:`Lời mời không khả dụng`,join:`Tham gia {{workspace}}`,invited:`Được mời`,from:`Từ`,access:`Quyền truy cập`,removedProjects:`Dự án bị loại trừ`,wholeWorkspace:`Toàn bộ không gian làm việc`,expires:`Hết hạn`,expired:`Lời mời này đã hết hạn. Hãy đề nghị quản trị viên không gian làm việc gửi lời mời mới.`,revoked:`Lời mời này đã bị thu hồi. Hãy đề nghị quản trị viên không gian làm việc gửi lời mời mới.`,accepted:`Lời mời này đã được chấp nhận. Hãy đề nghị quản trị viên không gian làm việc gửi lời mời mới.`,wrongAccount:`Bạn đang đăng nhập với <account>{{current}}</account>. Đăng nhập với {{invited}} để chấp nhận.`,signOut:`Đăng xuất`,joined:`Đã tham gia {{workspace}}`,accept:`Chấp nhận lời mời`},callback:{cancelled:`Đăng nhập đã bị hủy. Hãy thử lại khi bạn sẵn sàng.`,linkedElsewhere:`Danh tính này đã được liên kết với một tài khoản Kanvil khác. Dùng danh tính khác hoặc liên hệ quản trị viên.`,notLinked:`Danh tính này chưa được liên kết với tài khoản Kanvil nào. Đăng nhập bằng tài khoản cục bộ và liên kết trong Cài đặt.`,expired:`Yêu cầu đăng nhập đã hết hạn hoặc không thể xác minh. Hãy thử lại từ màn hình này.`,emailMismatch:`Không thể liên kết email của nhà cung cấp danh tính. Hãy liên hệ quản trị viên.`,failed:`Không thể hoàn tất đăng nhập. Hãy thử lại hoặc liên hệ quản trị viên.`}},you:`Bạn`,inbox:{markAllRead:`Đánh dấu tất cả đã đọc`,clearRead:`Xóa thông báo đã đọc`,cleared_other:`Đã xóa {{count, number}} thông báo đã đọc`,unread:`Chưa đọc`,mentions:`Lượt nhắc`,all:`Tất cả thông báo`,noUnread:`Không có thông báo chưa đọc`,noMentions:`Không có lượt nhắc`,noNotifications:`Không có thông báo`,markUnread:`Đánh dấu chưa đọc`,markRead:`Đánh dấu đã đọc`,dismiss:`Bỏ qua`},search:{field:`Tìm trong không gian làm việc`,placeholder:`Tìm phiếu, dự án, bình luận, hoạt động…`,tab:{all:`Tất cả`,project:`Dự án`,ticket:`Phiếu`,comment:`Bình luận`,activity:`Hoạt động`},indexing:`Tìm kiếm ngoài đang cập nhật, nên kết quả phiếu được lấy từ PostgreSQL.`,empty:`Tìm phiếu, dự án, bình luận và hoạt động`,noResults:`Không có kết quả cho “{{query}}”`,results:`Kết quả tìm kiếm`,pages:`Trang kết quả tìm kiếm`,previous:`Trước`,next:`Tiếp`,type:{project:`Dự án`,ticket:`Phiếu`,comment:`Bình luận`,activity:`Hoạt động`}},column:{key:`Phiếu`,labels:`Nhãn`,scopes:`Phạm vi`,status:`Trạng thái`,priority:`Mức ưu tiên`,difficulty:`Độ khó`,kind:`Loại`,assigneeId:`Người được giao`,startAt:`Bắt đầu`,dueAt:`Hạn chót`,createdAt:`Ngày tạo`,updatedAt:`Cập nhật`},public:{notShared:`Dự án này không được chia sẻ`,notSharedHint:`Liên kết đã bị tắt hoặc chưa từng tồn tại. Thành viên có thể đăng nhập để xem.`,noTickets:`Không có phiếu`,ticketUnavailable:`Phiếu không khả dụng`,backToTickets:`Quay lại danh sách phiếu`,description:`Mô tả`,noDescription:`_Không có mô tả_`,acceptanceCriteria:`Tiêu chí chấp nhận`,noAcceptanceCriteria:`_Không có tiêu chí chấp nhận_`,ticketProperties:`Thuộc tính phiếu`,properties:`Thuộc tính`,status:`Trạng thái`,priority:`Mức ưu tiên`,kind:`Loại`,difficulty:`Độ khó`,startDate:`Ngày bắt đầu`,dueDate:`Hạn chót`,labels:`Nhãn`,scopes:`Phạm vi`,created:`Ngày tạo`,updated:`Cập nhật`,relationships:`Quan hệ`,parent:`Phiếu cha`,child:`Phiếu con`},sidebar:{workspace:`Không gian làm việc`,unread_other:`{{count, number}} chưa đọc`,userSettings:`Cài đặt người dùng`,administration:`Quản trị`,signOut:`Đăng xuất`,projectSettings:`Cài đặt dự án`},workspace:{new:`Không gian làm việc mới`,name:`Tên không gian làm việc`,key:`Mã không gian làm việc`,create:`Tạo không gian làm việc`,workspaces:`Không gian làm việc`,switch:`Chuyển không gian làm việc`,settings:`Cài đặt không gian làm việc`},palette:{open:`Đi đến…`,title:`Đi đến`,description:`Tìm dự án, phiếu, trang hoặc thao tác`,placeholder:`Tìm phiếu, dự án, trang, thao tác…`,searching:`Đang tìm…`,noResults:`Không có kết quả`,jumpTo:`Chuyển đến`,openKey:`Mở {{key}} trong {{project}}`,resultsIn:`Kết quả trong {{workspace}}`,results:`Kết quả`,seeAll_other:`Xem tất cả {{count, number}} kết quả`,actions:`Thao tác`,pages:`Trang`,newTicketIn:`Phiếu mới trong {{project}}`,myTicketsIn:`Phiếu của tôi trong {{project}}`,lightMode:`Chuyển sang chế độ sáng`,darkMode:`Chuyển sang chế độ tối`,keywords:{jump:`{{query}} chuyển đến mở`,allResults:`tất cả kết quả {{query}}`,newTicket:`phiếu mới tạo`,myTickets:`phiếu của tôi được giao cho tôi`,lightMode:`chuyển chế độ sáng giao diện chủ đề`,darkMode:`chuyển chế độ tối giao diện chủ đề`,help:`phím tắt bàn phím trợ giúp`,home:`trang chủ tổng quan tất cả dự án`,myWork:`việc của tôi phiếu được giao`,search:`tìm kiếm bình luận hoạt động dự án phiếu`,inbox:`hộp thư đến thông báo`,settings:`cài đặt {{scope}} {{label}}`}},actionCategory:{general:`Chung`,ticketList:`Danh sách phiếu`,inbox:`Hộp thư đến`,ticket:`Phiếu`,search:`Tìm kiếm`,markdown:`Markdown`},action:{palette:`Đi đến bất kỳ đâu`,help:`Phím tắt`,sidebar:`Bật/tắt thanh bên`,newTicket:`Phiếu mới`,search:`Tìm phiếu`,highlight:`Tô sáng phiếu tiếp theo hoặc trước đó`,open:`Mở phiếu đang tô sáng`,preview:`Xem trước phiếu đang tô sáng bên cạnh danh sách`,select:`Chọn phiếu đang tô sáng`,properties:`Đặt trạng thái, mức ưu tiên hoặc người được giao cho phiếu đang tô sáng`,inboxHighlight:`Tô sáng thông báo tiếp theo hoặc trước đó`,inboxOpen:`Đọc phiếu của thông báo đang tô sáng bên cạnh Hộp thư đến`,inboxRead:`Đánh dấu thông báo đang tô sáng là đã đọc hoặc chưa đọc`,inboxDismiss:`Bỏ qua thông báo đang tô sáng`,step:`Mở phiếu tiếp theo hoặc trước đó`,edit:`Sửa phiếu`,save:`Lưu phiếu hoặc bình luận`,results:`Di chuyển giữa các kết quả tìm kiếm`,insertBlock:`Chèn bảng, sơ đồ, tệp hoặc khối khác trong trình soạn thảo Trực quan`},move:{top:{label:`Chuyển phiếu đang tô sáng lên đầu`,menu:`Chuyển lên đầu`},up:{label:`Chuyển phiếu đang tô sáng lên`,menu:`Chuyển lên`},down:{label:`Chuyển phiếu đang tô sáng xuống`,menu:`Chuyển xuống`},bottom:{label:`Chuyển phiếu đang tô sáng xuống cuối`,menu:`Chuyển xuống cuối`},previous:{label:`Chuyển phiếu đang tô sáng sang trạng thái trước`,menu:`Chuyển sang trạng thái trước`},next:{label:`Chuyển phiếu đang tô sáng sang trạng thái tiếp theo`,menu:`Chuyển sang trạng thái tiếp theo`}},copy:{link:{label:`Sao chép liên kết`,copied:`Liên kết phiếu`},keyAndTitle:{label:`Sao chép mã và tiêu đề`,copied:`Phiếu`},title:{label:`Sao chép tiêu đề`,copied:`Tiêu đề`},markdown:{label:`Sao chép dạng Markdown`,copied:`Markdown`},branch:{label:`Sao chép tên nhánh`,copied:`Tên nhánh`}},settingsNav:{account:`Tài khoản`,settings:`Cài đặt`,workspace:`Không gian làm việc`,workspaceSettings:`Cài đặt không gian làm việc`,projects:`Dự án`,projectSettings:`Cài đặt dự án`,administration:`Quản trị`,section:{profile:`Hồ sơ và bảo mật`,appearance:`Giao diện`,preferences:`Tùy chọn`,credentials:`Khóa API`,notifications:`Thông báo`,general:`Chung`,members:`Thành viên`,roles:`Vai trò`,labels:`Nhãn`,workflow:`Quy trình`,fields:`Trường`,integrations:`Tích hợp`,calendar:`Nguồn lịch`,storage:`Lưu trữ tệp`,search:`Tìm kiếm`,events:`Phân phối sự kiện`,users:`Người dùng`,workspaces:`Không gian làm việc`,authentication:`Xác thực`}},browser:{copyFailed:`Sao chép thất bại. Hãy chọn văn bản và sao chép thủ công.`,readFailed:`Không thể đọc tệp`,encodeFailed:`Không thể mã hóa tệp`,imageTooBig:`Chọn ảnh nhỏ hơn 10 MB.`,cannotResize:`Trình duyệt này không thể thay đổi kích thước ảnh.`,prepareFailed:`Không thể chuẩn bị ảnh.`,stillTooLarge:`Ảnh vẫn quá lớn sau khi thay đổi kích thước. Hãy chọn ảnh đơn giản hơn.`},primitive:{close:`Đóng`,more:`Thêm`,breadcrumb:`đường dẫn`,sidebar:`Thanh bên`,sidebarDescription:`Hiển thị thanh bên trên di động.`,toggleSidebar:`Bật/tắt thanh bên`,resizeSidebar:`Đổi kích thước thanh bên`,expandSidebar:`Mở rộng thanh bên`,commandTitle:`Bảng lệnh`,commandDescription:`Tìm lệnh để chạy…`}},ticket:{list:{selectSection:`Chọn các phiếu {{section}}`,expandSection:`Mở rộng các phiếu {{section}}`,collapseSection:`Thu gọn các phiếu {{section}}`,sectionTickets:`Phiếu {{section}}`,later:`Sau này`,selectAll:`Chọn tất cả phiếu đang hiển thị`,selectTicket:`Chọn {{key}}`,title:`Tiêu đề`,all:`Tất cả`,planned:`Đã lên kế hoạch`,archived:`Đã lưu trữ`,allTickets:`Tất cả phiếu`,customView:`Chế độ xem tùy chỉnh`,sectionCount:`{{n, number}} {{section}}`,planning:`Kế hoạch {{project}}`,collection:`{{source}} ({{sections}})`,moved:`Đã chuyển {{key}}`,movedTo:`Đã chuyển {{key}} sang {{status}}`,movedAbove:`Đã chuyển {{key}} lên trên {{neighbor}}`,movedBelow:`Đã chuyển {{key}} xuống dưới {{neighbor}}`,movedToAbove:`Đã chuyển {{key}} sang {{status}}, trên {{neighbor}}`,movedToBelow:`Đã chuyển {{key}} sang {{status}}, dưới {{neighbor}}`,emptyFiltered:`Không có phiếu phù hợp`,emptyPlanning:`Không có gì được lên kế hoạch hoặc lưu trữ`,emptyProject:`Chưa có phiếu`,emptyWork:`Không có phiếu đang mở nào được giao cho bạn`,createFirst:`Tạo phiếu đầu tiên`,activeWork:`Việc đang làm`,views:`Chế độ xem phiếu`,saveCurrentView:`Lưu chế độ xem hiện tại`,deleteView:`Xóa chế độ xem {{name}}`,deleteViewConfirm:`Xóa {{name}} khỏi các chế độ xem đã lưu? Phiếu không thay đổi.`,planningLink:`Kế hoạch`,newTicketShortcut:`Phiếu mới ({{shortcut}})`,saveView:`Lưu chế độ xem`,viewSaved:`Đã lưu chế độ xem`,viewName:`Tên chế độ xem`,retry:`Thử tải lại phiếu`,board:`Bảng phiếu`,tickets:`Phiếu`,resizeColumn:`Đổi kích thước cột {{column}}`,count_other:`{{count, number}} phiếu`,scheduledCount_other:`{{count, number}} phiếu đã lên lịch`},move:{destination:`Đích đến`,projectPlaceholder:`Chuyển sang dự án…`,blockers:`Cần xử lý trước khi chuyển`,submit:`Chuyển phiếu`,pending:`Đang chuyển…`},picker:{placeholder:`Chọn phiếu`,loading:`Đang tải phiếu…`,searchLabel:`Tìm {{label, lowercase}}`,searchPlaceholder:`Tìm theo tiêu đề hoặc mã…`,noParent:`Không có phiếu cha`,searching:`Đang tìm…`,empty:`Không tìm thấy phiếu`},property:{status:`Trạng thái`,priority:`Mức ưu tiên`,kind:`Loại`,difficulty:`Độ khó`,assignee:`Người được giao`,you:`{{name}} (bạn)`,assignTo:`Giao cho…`,set:`Đặt {{label, lowercase}}…`,search:`Tìm {{label, lowercase}}`,noMatches:`Không có kết quả phù hợp`},field:{mixed:`Hỗn hợp`,unchecked:`Không`,noValue:`Không có giá trị`},project:{label:`Dự án`,placeholder:`Tạo trong dự án…`,search:`Tìm dự án`},tags:{labels:`Nhãn`,scopes:`Phạm vi`,summary:`{{label}}: {{tags}}`,edit:`Sửa {{label, lowercase}}`,editValues:`Sửa {{label, lowercase}}: {{tags}}`,editMixed:`Sửa {{label, lowercase}}: hỗn hợp`,mixed:`{{label}} hỗn hợp`,none:`Không có {{label, lowercase}}`,mixedNote:`Các phiếu đã chọn có {{label, lowercase}} khác nhau.`,clear:`Xóa {{label, lowercase}}`,replace:`Thay thế {{label, lowercase}}`},tagInput:{remove:`Gỡ {{label, lowercase}} {{tag}}`,addAnother:`Thêm nữa…`,add:`Thêm {{label, lowercase}}…`,choose:`Chọn {{label, lowercase}}`,chooseLabels:`Chọn nhãn`,searchPlaceholder:`Tìm nhãn…`,searchLabel:`Tìm nhãn của dự án`,empty:`Không có nhãn phù hợp`},link:{previewUnavailable:`Không có bản xem trước`},userPicker:{label:`Tài khoản`,placeholder:`Chọn tài khoản`,searchPlaceholder:`Tìm tên hoặc email…`,searchLabel:`Tìm tài khoản`,useEmail:`Dùng {{email}}`,emptyAnyAccount:`Tìm thành viên hoặc nhập email của một tài khoản hiện có.`,empty:`Không có thành viên phù hợp`},date:{placeholder:`Chọn ngày`,clear:`Xóa {{label, lowercase}}`,start:`Ngày bắt đầu`,startShort:`Bắt đầu`,noStart:`Không có ngày bắt đầu`,due:`Hạn chót`,dueShort:`Hạn`,noDue:`Không có hạn chót`},filter:{me:`Tôi`,searchTickets:`Tìm phiếu`,searchTicketsPlaceholder:`Tìm phiếu…`,filters:`Bộ lọc`,filtersActive:`Bộ lọc ({{active, number}})`,due:`Hạn`,anyDue:`Mọi hạn chót`,archived:`Đã lưu trữ`,hideArchived:`Ẩn phiếu đã lưu trữ`,includeArchived:`Bao gồm phiếu đã lưu trữ`,archivedOnly:`Chỉ phiếu đã lưu trữ`,includingArchived:`Bao gồm phiếu đã lưu trữ`,reset:`Đặt lại bộ lọc`,clear:`Xóa bộ lọc`,active:`Bộ lọc phiếu đang dùng`,searchChip:`Tìm: {{query}}`,chipAny:`{{field}}:`,chipNone:`{{field}} không phải:`,notValues:`Không phải {{values}}`,match:`Khớp {{label, lowercase}}`,is:`Là`,isNot:`Không phải`,searchPlaceholder:`{{search}}…`,anyValue:{status:`Mọi trạng thái`,priority:`Mọi mức ưu tiên`,kind:`Mọi loại`,difficulty:`Mọi độ khó`,label:`Mọi nhãn`,assigneeId:`Bất kỳ ai`,customField:`Mọi giá trị trường`},searchValues:{status:`Tìm trạng thái`,priority:`Tìm mức ưu tiên`,kind:`Tìm loại`,difficulty:`Tìm độ khó`,label:`Tìm nhãn`,assigneeId:`Tìm người`,customField:`Tìm trường`}},display:{title:`Hiển thị`,orderBy:`Sắp xếp theo`,direction:`Chiều`,ascending:`Tăng dần`,descending:`Giảm dần`,reset:`Đặt lại hiển thị`,groupBy:`Nhóm theo`,dueDate:`Hạn chót`,layout:`Bố cục`,list:`Danh sách`,board:`Bảng`,backgrounds:`Ảnh nền dự án`,show:`Hiện`,hide:`Ẩn`,rowSpacing:`Khoảng cách dòng`,compact:`Gọn`,comfortable:`Thoáng`,labelDisplay:`Hiển thị nhãn`,compactPreview:`Xem trước gọn`,allLabels:`Tất cả nhãn`,properties:`Thuộc tính`},selection:{region:`Phiếu đã chọn`,clear:`Bỏ chọn`,selected_other:`Đã chọn {{count, number}}`,selectedOf_other:`{{count, number}} trên {{total}}<wide> đã chọn</wide>`,applied_other:`Đã áp dụng {{label}} cho {{count, number}} phiếu`,partlyApplied_other:`Đã áp dụng cho {{done, number}} trên {{count, number}} phiếu`,mixedDue:`Hạn chót khác nhau`,fields:`Trường`,more:`Thao tác khác`,moveTo:`Chuyển sang {{status}}`,restoreChange:`Khôi phục`,restore:`Khôi phục mục đã chọn`,archive:`Lưu trữ mục đã chọn`,delete:`Xóa mục đã chọn`,deleteLimit:`Xóa tối đa {{limit, number}} phiếu mỗi lần`,archiveConfirm_other:`Lưu trữ {{count, number}} phiếu từ {{collection}}?`,deleteConfirm_other:`Xóa vĩnh viễn {{count, number}} phiếu từ {{collection}}, cùng bình luận, quan hệ và tệp đính kèm của chúng? Phiếu con ngoài phần đã chọn sẽ mất phiếu cha.`,deleted_other:`Đã xóa {{count, number}} phiếu`},menu:{copied:`Đã sao chép {{label, lowercase}}`,open:`Mở phiếu`,preview:`Xem trước`,newTab:`Mở trong thẻ mới`,edit:`Sửa phiếu`,editTitle:`Sửa {{key}}`,duplicate:`Nhân bản phiếu`,created:`Đã tạo {{key}}`,move:`Chuyển`,moveToProject:`Chuyển sang dự án…`,moveTitle:`Chuyển {{key}}`,moved:`Đã chuyển thành {{key}}`,follow:`Theo dõi phiếu`,unfollow:`Bỏ theo dõi phiếu`,archive:`Lưu trữ phiếu`,unarchive:`Bỏ lưu trữ phiếu`,delete:`Xóa phiếu`,deleteConfirm:`Xóa vĩnh viễn {{key}}, cùng bình luận, quan hệ và tệp đính kèm của phiếu?`,openProject:`Mở dự án`,projectLink:`Liên kết dự án`,copyLink:`Sao chép liên kết`,newTicket:`Phiếu mới`,projectSettings:`Cài đặt dự án`,manageAccount:`Quản lý tài khoản`,email:`Email`,copyEmail:`Sao chép email`},schedule:{range:`{{from}} – {{to}}`,calendar:`Lịch`,timeline:`Dòng thời gian`,today:`Hôm nay`,previousMonth:`Tháng trước`,nextMonth:`Tháng sau`,previousWeeks:`Hai tuần trước`,nextWeeks:`Hai tuần sau`,emptyWeeks:`Không có gì được lên lịch trong các tuần này`,monthTickets:`Phiếu trong {{title}}`,showDay_other:`Hiện tất cả {{count, number}} phiếu vào {{day}}`,more_other:`Thêm {{count, number}}`,ticketColumn:`Phiếu`,scheduledTickets:`Phiếu đã lên lịch`},copy:{description:`Mô tả`,acceptanceCriteria:`Tiêu chí chấp nhận`}},detail:{field:{title:`Tiêu đề`,description:`Mô tả`,acceptanceCriteria:`Tiêu chí chấp nhận`,parent:`Phiếu cha`,parentTicket:`Phiếu cha`,labels:`Nhãn`,scopes:`Phạm vi`,holdReason:`Lý do tạm giữ`,url:`URL`},page:{preview:`Xem trước phiếu`,unavailable:`Phiếu không khả dụng`,noProject:`Liên kết không chỉ rõ dự án của phiếu.`,gone:`Phiếu này đã bị xóa hoặc bạn không còn quyền truy cập.`,closePreview:`Đóng bản xem trước`,openFullPage:`Mở toàn trang`,backToTickets:`Quay lại danh sách phiếu`,tickets:`Phiếu`,previousTicket:`Phiếu trước`,previousTicketShortcut:`Phiếu trước (K)`,nextTicket:`Phiếu tiếp theo`,nextTicketShortcut:`Phiếu tiếp theo (J)`,position:`{{position, number}} / {{total, number}}`,subscribe:`Theo dõi`,unsubscribe:`Bỏ theo dõi`,subscribed:`Đã theo dõi cập nhật`,unsubscribed:`Đã bỏ theo dõi`,archive:`Lưu trữ phiếu`,unarchive:`Bỏ lưu trữ phiếu`,archivedToast:`Đã lưu trữ phiếu`,unarchivedToast:`Đã bỏ lưu trữ phiếu`,archived:`Đã lưu trữ`,edit:`Sửa phiếu`,editShortcut:`Sửa phiếu (E)`,editTitle:`Sửa {{key}}`,actions:`Thao tác với phiếu`,copyKey:`Sao chép mã phiếu`,keyCopied:`Đã sao chép {{key}}`,noDescription:`_Không có mô tả_`,noAcceptanceCriteria:`_Không có tiêu chí chấp nhận_`,coordination:`Điều phối phiếu`,properties:`Thuộc tính`,created:`Ngày tạo`,updated:`Cập nhật`},section:{discussion:`Thảo luận`,evidence:`Bằng chứng`,activity:`Hoạt động`},readiness:{heading:`Mức sẵn sàng cho tác tử`,ready:`Sẵn sàng để nhận`,notReady:`Chưa sẵn sàng để nhận`,hold:`Tạm giữ: {{reason}}`,claimedUntil:`Đã được <strong>{{worker}}</strong> nhận đến {{date}}.`},claim:{release:`Trả lại việc đã nhận`,releaseDescription:`Trả lại quyền sở hữu sau khi tiến trình của bạn đã ngừng ghi?`,recover:`Thu hồi việc nhận đã hết hạn`,recoverHelp:`Hãy xác nhận tiến trình đã dừng trước.`,reason:`Lý do thu hồi`,confirmed:`Tôi đã xác nhận tiến trình đã dừng`,submit:`Thu hồi quyền sở hữu`},editor:{storageUnavailable:`Trình duyệt này không thể lưu bản nháp. Hãy giữ trình soạn thảo mở cho đến khi lưu.`,saved:`Đã lưu {{key}}`,created:`Đã tạo {{key}}`,properties:`Thuộc tính phiếu`,readyForAgents:`Sẵn sàng cho tác tử`,readyForAgentsHelp:`Tác tử có thể nhận phiếu này khi yêu cầu, phụ thuộc chặn và quyền sở hữu cho phép`,agents:`Tác tử`,notReady:`Chưa sẵn sàng`,moreProperties:`Thêm thuộc tính`,holdPlaceholder:`Vì sao công việc phải chờ?`,claimsNote:`Việc nhận vẫn phụ thuộc vào yêu cầu, phụ thuộc chặn và quyền sở hữu hiện tại.`,restoreSize:`Khôi phục kích thước trình soạn thảo`,expand:`Mở rộng trình soạn thảo`,staleTitle:`Phiếu này đã thay đổi.`,staleDescription:`Bản nháp của bạn vẫn dùng phiên bản {{version}}; khi lưu sẽ cần phiên bản hiện tại.`,discardAndReload:`Hủy bản nháp và tải lại`,titlePlaceholder:`Tiêu đề phiếu`,descriptionPlaceholder:`Thêm bối cảnh, yêu cầu hoặc cách tái hiện…`,criteriaPlaceholder:`- [ ] Điều gì cho thấy việc này đã hoàn thành?`,removeCriteria:`Gỡ tiêu chí chấp nhận`,addCriteria:`Thêm tiêu chí chấp nhận`,savedLocally:`Đã lưu bản nháp trên thiết bị này`,notSavedLocally:`Không thể lưu bản nháp`,discardDraft:`Hủy bản nháp`,createMore:`Tạo thêm`,save:`Lưu phiếu`,create:`Tạo phiếu`},resource:{removeConfirm:`Gỡ {{name}}?`,uploading:`Đang tải lên…`},attachment:{heading:`Tệp đính kèm`,tooLarge:`Chọn các tệp không lớn hơn 10 MB mỗi tệp.`,attached_other:`Đã đính kèm {{count, number}} tệp`,attach:`Đính kèm tệp`,emptyWritable:`Không có tệp đính kèm. Thả tệp vào đây.`,empty:`Không có tệp đính kèm`,remove:`Gỡ tệp đính kèm`,fileInput:`Tệp (tối đa 10 MB)`},evidence:{description:`Liên kết và kết quả do người và tích hợp làm việc trên phiếu này báo cáo.`,add:`Thêm bằng chứng`,empty:`Chưa đính kèm bằng chứng`,added:`Đã thêm bằng chứng`,kindLabel:`Loại`,outcomeLabel:`Kết quả báo cáo`,commit:`Commit (mã băm đầy đủ)`,note:`Ghi chú`},link:{heading:`Liên kết`,add:`Thêm liên kết`,edit:`Sửa liên kết`,save:`Lưu liên kết`,remove:`Gỡ liên kết`,empty:`Không có liên kết`,stateUnknown:`Không rõ trạng thái`,remote:`{{kind}} · {{state}}`,remoteState:{open:`Đang mở`,closed:`Đã đóng`,merged:`Đã hợp nhất`,draft:`Nháp`,active:`Đang hoạt động`,deleted:`Đã xóa`}},activity:{previous:`Hoạt động trước`,next:`Hoạt động tiếp theo`},relations:{heading:`Quan hệ`,add:`Thêm quan hệ`,linkExisting:`Liên kết phiếu có sẵn`,newChild:`Phiếu con mới`,newChildTitle:`Phiếu con mới của {{key}}`,children:`Phiếu con <count>{{done, number}}/{{total, number}}</count>`,previousChildren:`Phiếu con trước`,nextChildren:`Phiếu con tiếp theo`,empty:`Không có quan hệ`,type:`Quan hệ`,ticket:`Phiếu`,statusOf:`Trạng thái của {{key}}`,assigneeOf:`Người được giao của {{key}}`,remove:{blocks:`Gỡ quan hệ chặn`,related:`Gỡ quan hệ liên quan`,duplicate:`Gỡ quan hệ trùng lặp`,causes:`Gỡ quan hệ gây ra`,clones:`Gỡ quan hệ sao chép`,implements:`Gỡ quan hệ triển khai`,reviews:`Gỡ quan hệ duyệt`}},discussion:{empty:`Chưa có bình luận`,previous:`Bình luận trước`,next:`Bình luận tiếp theo`,comment:`Bình luận`,placeholder:`Viết bình luận…`,posting:`Đang đăng…`,edited:`Đã sửa`,edit:`Sửa bình luận`,delete:`Xóa bình luận`,deleteConfirm:`Xóa vĩnh viễn bình luận này?`},markdown:{format:{heading:`Tiêu đề`,bold:`In đậm`,italic:`In nghiêng`,link:`Liên kết`,linkHelp:`Liên kết văn bản đã chọn`,bullets:`Danh sách dấu đầu dòng`,numbers:`Danh sách đánh số`,tasks:`Danh sách kiểm tra`,code:`Khối mã`},formatting:`Định dạng {{label, lowercase}}`,editor:`Trình soạn thảo {{label, lowercase}}`,insertFile:`Chèn tệp`,insertFileInto:`Chèn tệp vào {{label, lowercase}}`,write:`Viết`,visual:`Trực quan`,preview:`Xem trước`,unsupported:`Văn bản này dùng Markdown mà trình soạn thảo trực quan không giữ được, chẳng hạn HTML hoặc chú thích cuối trang.`,nothingToPreview:`Không có gì để xem trước`,mention:`Nhắc đến thành viên`,insertBlock:`Chèn khối`,block:{quote:`Trích dẫn`,table:`Bảng`,diagram:`Sơ đồ`,divider:`Đường phân cách`,file:`Tệp`},table:{addRow:`Thêm hàng`,addColumn:`Thêm cột`,deleteRow:`Xóa hàng`,deleteColumn:`Xóa cột`,deleteTable:`Xóa bảng`},linkAddress:`Địa chỉ liên kết`,diagram:`Sơ đồ`,diagramFailed:`Không thể vẽ sơ đồ này: {{error}}`,diagramSource:`Mã nguồn sơ đồ`}},settings:{account:{title:`Cài đặt`,security:`Đăng nhập và bảo mật`,localPassword:`Mật khẩu cục bộ`,localPasswordDescription:`Đổi mật khẩu sẽ đăng xuất các phiên khác của bạn.`,changePassword:`Đổi mật khẩu`,oidcLinked:`Dùng nhà cung cấp danh tính này để đăng nhập vào cùng tài khoản.`,oidcUnlinked:`Liên kết tài khoản trước khi đăng nhập qua nhà cung cấp này.`,linked:`Đã liên kết`,link:`Liên kết {{name}}`,currentPassword:`Mật khẩu hiện tại`,newPassword:`Mật khẩu mới`,confirmPassword:`Xác nhận mật khẩu mới`,passwordMismatch:`Mật khẩu mới không khớp.`,passwordUpdated:`Đã cập nhật mật khẩu. Các phiên khác đã bị đăng xuất.`},preferences:{behavior:`Hành vi`,languageDescription:`Áp dụng trong trình duyệt này, kể cả trang đăng nhập.`,weekStart:`Tuần bắt đầu vào`,weekStartDescription:`Áp dụng cho mọi bộ chọn ngày.`,weekStartLanguage:`Theo ngôn ngữ`,sidebar:`Thanh bên khi khởi động`,sidebarDescription:`Có hiệu lực vào lần mở Kanvil tiếp theo.`,sidebarLast:`Như lần trước`,sidebarExpanded:`Mở rộng`,sidebarCollapsed:`Thu gọn`,ticketLists:`Danh sách phiếu`,reset:`Đặt lại tùy chọn`,resetDescription:`Khôi phục các lựa chọn này về mặc định trong trình duyệt này.`,resetDone:`Đã đặt lại tùy chọn`},notifications:{title:`Thông báo`,inbox:`Hộp thư đến`,inboxDescription:`Cập nhật của các phiếu bạn theo dõi sẽ hiện trong Kanvil.`,inboxSwitch:`Cập nhật phiếu đã theo dõi trong Hộp thư đến`,push:`Thông báo đẩy`,pushDescription:`Gửi cập nhật đến các thiết bị bạn đã đăng ký.`,pushUnavailable:`Hệ thống này chưa bật gửi thông báo đẩy.`,pushSwitch:`Thông báo đẩy trên thiết bị đã đăng ký`,categories:`Danh mục`,categorySwitch:`Thông báo {{label, lowercase}}`,reminder:`Nhắc sắp đến hạn`,reminderDescription:`Bao lâu trước hạn chót của phiếu đang theo dõi.`,reminderUnit:`Đơn vị nhắc`,reminderAmount:`Thời lượng nhắc`,unit:{minutes:`Phút`,hours:`Giờ`,days:`Ngày`,weeks:`Tuần`}},layout:{nav:`Cài đặt`,section:`Mục cài đặt`,nested:`{{parent}} · {{child}}`,name:`Tên`,description:`Mô tả`,descriptionPlaceholder:`Thêm mô tả`,noDescription:`Không có mô tả`,stale:`Mục này đã được thay đổi ở nơi khác. Hãy hủy và làm lại.`},profile:{title:`Hồ sơ`,displayName:`Tên hiển thị`,edit:`Sửa hồ sơ`,changePhoto:`Đổi ảnh`,removePhoto:`Gỡ ảnh`,photoFile:`Tệp ảnh hồ sơ`,photoUpdated:`Đã cập nhật ảnh`,photoRemoved:`Đã gỡ ảnh`,saved:`Đã lưu hồ sơ`},credentials:{global:`Toàn cục`,globalDescription:`Truy cập mọi dự án và không gian làm việc mà tài khoản của bạn có quyền truy cập, kể cả quyền được cấp sau này.`,title:`Khóa API`,description:`Kết nối script, tích hợp và tác tử với quyền truy cập có thể thu hồi.`,create:`Tạo khóa API`,creating:`Đang tạo…`,created:`Đã tạo khóa API`,name:`Tên`,access:`Quyền truy cập`,projects:`Dự án`,expires:`Hết hạn`,actions:`Thao tác`,unavailableProject:`Dự án không khả dụng`,untitled:`Khóa chưa đặt tên`,expired:`Đã hết hạn`,disabled:`Đã vô hiệu hóa`,custom:`Tùy chỉnh`,noProjects:`Không có quyền truy cập dự án`,never:`Không bao giờ`,revoke:`Thu hồi khóa API`,revokeNamed:`Thu hồi {{name}}? Các kết nối đang dùng khóa này sẽ mất quyền truy cập ngay.`,revokeUnnamed:`Thu hồi khóa API này? Các kết nối đang dùng khóa này sẽ mất quyền truy cập ngay.`,empty:`Không có khóa API`,emptyDescription:`Tạo khóa khi một script, tích hợp hoặc tác tử cần truy cập vào dự án của bạn.`,copyNow:`Sao chép khóa này ngay. Bạn sẽ không thể xem lại.`,newKey:`Khóa API mới`,copy:`Sao chép khóa API`,noProjectTitle:`Hãy chọn dự án trước`,noProjectDescription:`Khóa API cần quyền truy cập ít nhất một dự án.`,goToProjects:`Đi đến dự án`,keyName:`Tên khóa`,keyNamePlaceholder:`vd. Tự động phát hành`,projectAccess:`Quyền truy cập dự án`,findProject:`Tìm dự án`,projectDescription:`{{key}} · {{workspace}}`,workspace:`Không gian làm việc`,noMatches:`Không có dự án phù hợp`,roleLimit:`Vai trò hiện tại của bạn trong dự án vẫn giới hạn những gì khóa này làm được.`,accessLevel:`Mức truy cập`,preset:{read:`Chỉ đọc`,write:`Đọc và ghi`,automation:`Đọc, ghi và nhận việc`,custom:`Quyền tùy chỉnh`},permission:{read:{name:`Đọc phiếu`,description:`Xem dự án, phiếu, bình luận và tệp đính kèm.`},write:{name:`Sửa phiếu`,description:`Tạo và cập nhật phiếu, bình luận và tệp đính kèm.`},claim:{name:`Nhận việc`,description:`Nhận, gia hạn và trả lại quyền sở hữu phiếu.`},admin:{name:`Quản lý dự án và không gian làm việc`,description:`Thay đổi cài đặt và thành viên của dự án và không gian làm việc trong phạm vi vai trò cho phép.`}},expiry:{7:`7 ngày`,30:`30 ngày`,90:`90 ngày`,365:`1 năm`,custom:`Ngày tùy chỉnh`,never:`Không hết hạn`},expiresOn:`Hết hạn vào`,neverDescription:`Khóa hoạt động cho đến khi bạn xóa nó.`},calendarFeeds:{title:`Nguồn lịch`,new:`Nguồn lịch mới`,created:`Đã tạo nguồn lịch`,create:`Tạo nguồn`,adminOnly:`Quản trị viên dự án chia sẻ và thu hồi nguồn lịch.`,labels:`Nhãn`,everyLabel:`Mọi nhãn`,stopped:`· Đã dừng: người tạo không còn quyền truy cập`,revoke:`Thu hồi {{name}}`,revokeDescription:`Các lịch đăng ký {{name}} sẽ ngừng cập nhật ngay. Phiếu không thay đổi.`,revoked:`Đã thu hồi nguồn lịch`,empty:`Không có nguồn lịch`,copyNow:`Sao chép liên kết này vào ứng dụng lịch ngay. Liên kết chỉ hiện một lần, và bất kỳ ai có nó đều đọc được các phiếu được chia sẻ.`,link:`Liên kết nguồn`,name:`Tên nguồn`,onlyLabels:`Chỉ phiếu có các nhãn này`,explanation:`Nguồn liệt kê các phiếu đang mở, chưa lưu trữ, có ngày bắt đầu hoặc hạn chót dưới dạng sự kiện cả ngày theo múi giờ {{zone}}. Bất kỳ ai có liên kết đều thấy mã, tiêu đề, trạng thái, mức ưu tiên và ngày của phiếu.`},project:{title:`Cài đặt dự án`,edit:`Sửa dự án`,copyPrefix:`Sao chép tiền tố phiếu`,saved:`Đã lưu dự án`,noOpenTickets:`Không có phiếu đang mở`,openTickets_other:`{{count, number}} phiếu đang mở`,overdueTickets_other:`· {{count, number}} quá hạn`,created:`· Tạo <time/>`,access:`Quyền truy cập dự án`,accessWorkspace:`Thành viên không gian làm việc kế thừa quyền truy cập từ vai trò trong không gian làm việc.`,accessPrivate:`Chỉ thành viên bạn thêm và quản trị viên không gian làm việc mới thấy dự án này.`,accessUpdated:`Đã cập nhật quyền truy cập dự án`,visibility:{workspace:`Mọi người trong không gian làm việc`,private:`Chỉ thành viên dự án`},workspace:`Không gian làm việc`,workspaceSettings:`Cài đặt không gian làm việc`,prefix:`Tiền tố phiếu`,prefixDescription:`Tiền tố và mã phiếu cũ vẫn hoạt động sau khi thay đổi.`,changePrefix:`Đổi tiền tố`,changePrefixTitle:`Đổi tiền tố phiếu`,changePrefixDescription:`Mọi phiếu trong {{name}} nhận tiền tố mới và giữ nguyên số.`,changing:`Đang thay đổi…`,prefixChanged:`Phiếu giờ dùng {{key}}`,publicLink:`Liên kết công khai`,publicDisclosure:`Bất kỳ ai có liên kết đều đọc được tiêu đề, mô tả, tiêu chí chấp nhận, trạng thái, mức ưu tiên, loại, độ khó, nhãn, phạm vi, ngày và liên kết tới phiếu khác của mọi phiếu chưa lưu trữ trong dự án này. Người, bình luận, hoạt động, tệp đính kèm, bằng chứng và việc nhận vẫn riêng tư.`,publicOn:`Liên kết công khai đang bật`,publicOff:`Liên kết công khai đang tắt`,off:`Tắt`,copyPublicLink:`Sao chép liên kết công khai`,openPublic:`Mở trang công khai`,stopSharing:`Ngừng chia sẻ`,share:`Chia sẻ công khai`,background:`Ảnh nền`,backgroundDescription:`Hiển thị phía sau danh sách và bảng phiếu của dự án này.`,backgroundUpdated:`Đã cập nhật ảnh nền`,backgroundRemoved:`Đã gỡ ảnh nền`,currentBackground:`Ảnh nền hiện tại`,uploading:`Đang tải lên…`,replace:`Thay thế`,upload:`Tải ảnh lên`,backgroundFile:`Tệp ảnh nền dự án`},tickets_other:`{{count, number}} phiếu`,moveUp:`Chuyển {{name}} lên`,moveDown:`Chuyển {{name}} xuống`,workflow:{title:`Quy trình`,new:`Trạng thái mới`,edit:`Sửa trạng thái`,editNamed:`Sửa trạng thái {{name}}`,deleteNamed:`Xóa trạng thái {{name}}`,onlyState:`{{name}} là trạng thái {{category}} duy nhất`,saved:`Đã lưu trạng thái`,name:`Tên trạng thái`,category:`Danh mục`,color:`Màu trạng thái`,categoryChange:`Các phiếu của trạng thái này sẽ chuyển sang {{status}}.`,save:`Lưu trạng thái`,delete:`Xóa trạng thái`,deleteTitle:`Xóa {{name}}`,deleted:`Đã xóa trạng thái`,reassign_other:`Chuyển {{count, number}} phiếu sang`},labels:{title:`Nhãn`,search:`Tìm nhãn`,new:`Nhãn mới`,edit:`Sửa nhãn`,workspace:`Không gian làm việc`,editNamed:`Sửa nhãn {{name}}`,deleteNamed:`Xóa nhãn {{name}}`,deleteUsed_other:`Gỡ {{name}} khỏi {{count, number}} phiếu, kể cả phiếu đã lưu trữ? Các chế độ xem đã lưu dùng nhãn này sẽ bị gỡ bộ lọc nhãn.`,deleteUsedShared_other:`Gỡ {{name}} khỏi {{count, number}} phiếu trong mọi dự án, kể cả phiếu đã lưu trữ? Các chế độ xem đã lưu dùng nhãn này sẽ bị gỡ bộ lọc nhãn.`,deleteUnused:`Xóa nhãn chưa dùng {{name}}? Các chế độ xem đã lưu dùng nhãn này sẽ bị gỡ bộ lọc nhãn.`,deleted:`Đã xóa nhãn`,noMatches:`Không có nhãn phù hợp`,empty:`Chưa có nhãn`,saved:`Đã lưu nhãn`,name:`Tên nhãn`,color:`Màu nhãn`,rename:`Đổi tên sẽ cập nhật nhãn này trên phiếu và trong các chế độ xem đã lưu.`,renameShared:`Đổi tên sẽ cập nhật nhãn này trên phiếu và trong các chế độ xem đã lưu ở mọi dự án.`,adopt:`Tiếp nhận nhãn của dự án`,adoptDescription:`Được định nghĩa trong {{projects}}. Phiếu của các dự án đó giữ nhãn và nhận màu này.`,save:`Lưu nhãn`},fields:{title:`Trường`,new:`Trường mới`,edit:`Sửa trường`,editNamed:`Sửa trường {{name}}`,deleteNamed:`Xóa trường {{name}}`,deleteUsed_other:`Xóa {{name}} và gỡ giá trị của trường khỏi {{count, number}} phiếu, kể cả phiếu đã lưu trữ? Các chế độ xem đã lưu sẽ mất bộ lọc theo trường này.`,deleteUnused:`Xóa trường chưa dùng {{name}}? Các chế độ xem đã lưu sẽ mất bộ lọc theo trường này.`,deleted:`Đã xóa trường`,empty:`Chưa có trường`,saved:`Đã lưu trường`,required:`Bắt buộc`,requiredDescription:`Phiếu mới cần có giá trị.`,defaultValue:`Mặc định {{value}}`,default:`Mặc định`,name:`Tên trường`,type:`Kiểu`,options:`Tùy chọn`,option:`Tùy chọn {{number}}`,optionInline:`tùy chọn {{number}}`,optionColor:`Màu của {{name}}`,removeOption:`Gỡ {{name}}`,addOption:`Thêm tùy chọn`,reassign:`Phiếu có {{name}}`,clearValue:`Xóa giá trị`,moveTo:`Chuyển sang {{name}}`,save:`Lưu trường`},lifecycle:{archivedToast:`Đã lưu trữ dự án`,restoredToast:`Đã khôi phục dự án`,archivedNotice:`Đã lưu trữ <time/> · chỉ đọc`,restore:`Khôi phục`,archive:`Lưu trữ`,archivedDescription:`Đã lưu trữ <time/>. Các phiếu ở chế độ chỉ đọc và không xuất hiện trong danh sách, tìm kiếm, Việc của tôi, nguồn lịch và hàng đợi của tác tử.`,archiveDescription:`Ẩn dự án khỏi danh sách, tìm kiếm, Việc của tôi, nguồn lịch và hàng đợi của tác tử, đồng thời chuyển các phiếu sang chỉ đọc. Lịch sử được giữ lại.`,archiveProject:`Lưu trữ dự án`,archiveConfirm:`{{name}} sẽ rời khỏi danh sách dự án và hàng đợi của tác tử cho đến khi được khôi phục. Các phiếu đã được nhận phải được trả lại trước.`,blocker:`{{message}}: {{tickets}}`,row:{tickets:`Phiếu`,losesAccess:`Mất quyền truy cập`,gainsAccess:`Có quyền truy cập`,labelsCopied:`Nhãn được sao chép`,labelsMerged:`Nhãn được gộp`,followsRemoved:`Lượt theo dõi bị gỡ`,invitations:`Lời mời`,comments:`Bình luận`,files:`Tệp`,kept:`Được giữ lại`,projects:`Dự án`,members:`Thành viên`,sharedLabels:`Nhãn dùng chung`,signIn:`Đăng nhập`,sessions:`Phiên`,credentials:`Thông tin xác thực`,devices:`Thiết bị`,access:`Quyền truy cập`,claims:`Việc đã nhận`,imports:`Lượt nhập`,profile:`Hồ sơ`},transferTickets_other:`{{count, number}}, giữ nguyên mã và liên kết`,noOne:`Không ai`,transferInvitations_other:`{{count, number}} lời mời đang chờ sẽ bỏ dự án`,files_other:`{{count, number}} · {{size}}`,keptProject_other:`{{count, number}} mục hoạt động và tiền tố {{key}}`,keptWorkspace_other:`{{count, number}} mục hoạt động và mã URL {{slug}}`,archivedProject:`đã lưu trữ`,membersLoseAccess_other:`{{count, number}} người mất quyền truy cập; tài khoản vẫn được giữ`,pendingInvitations_other:`{{count, number}} đang chờ`,move:`Chuyển`,moveTitle:`Chuyển {{name}}`,moved:`Đã chuyển sang {{name}}`,movedUnnamed:`Đã chuyển sang không gian làm việc`,destination:`Không gian làm việc đích`,moveProject:`Chuyển dự án`,moving:`Đang chuyển…`,export:`Xuất`,exportDescription:`Phiếu cùng quy trình, trường, nhãn, quan hệ, bình luận, bằng chứng và liên kết dưới dạng JSON có phiên bản. Tệp đính kèm và lịch sử hoạt động vẫn ở lại đây.`,exporting:`Đang xuất…`,exportJson:`Xuất JSON`,delete:`Xóa`,deleteTitle:`Xóa {{name}}`,deleted:`Đã xóa {{name}}`,typeToConfirm:`Nhập {{value}} để xác nhận`,deleting:`Đang xóa…`,deleteProject:`Xóa dự án`,deleteProjectDescription:`Xóa vĩnh viễn phiếu, bình luận và tệp. Lịch sử hoạt động được giữ lại, và {{key}} không bao giờ được dùng lại.`,signInAgain:`Đăng nhập lại`,deleteWorkspace:`Xóa không gian làm việc`,deleteWorkspaceDescription:`Xóa vĩnh viễn mọi dự án trong không gian làm việc cùng phiếu, bình luận và tệp, đồng thời gỡ các thành viên. Tài khoản và lịch sử hoạt động được giữ lại.`,noSignInMethods:`Không có phương thức đăng nhập được liên kết`,sessions_other:`Đã đăng xuất {{count, number}} phiên`,credentials_other:`Đã thu hồi {{count, number}} khóa API hoặc kết nối ứng dụng`,devices_other:`Đã gỡ {{count, number}} thiết bị hoặc kênh thông báo`,workspaceCount_other:`{{count, number}} không gian làm việc`,directProjectCount_other:`{{count, number}} dự án trực tiếp`,accessWorkspaces:`Đã gỡ {{workspaces}}`,accessBoth:`Đã gỡ {{workspaces}} và {{projects}}`,claims_other:`Đã trả {{count, number}} việc đã nhận`,imports_other:`Đã hủy {{count, number}} lượt nhập`,profileErased:`Đã xóa tên, email và ảnh`,commentCount_other:`{{count, number}} bình luận`,activityCount_other:`{{count, number}} mục hoạt động`,keptAccount:`{{tickets}}, {{comments}} và {{events}} hiển thị dưới tên {{name}}`,deleteAccount:`Xóa tài khoản`,deleteOwnAccount:`Xóa vĩnh viễn thông tin đăng nhập, phiên, khóa, thiết bị, tư cách thành viên và thông tin cá nhân của bạn. Phiếu, bình luận và hoạt động được giữ lại và hiển thị dưới tên {{name}}.`,deleteOtherAccount:`Xóa vĩnh viễn thông tin đăng nhập, phiên, khóa, thiết bị, tư cách thành viên và thông tin cá nhân của tài khoản này. Phiếu, bình luận và hoạt động được giữ lại và hiển thị dưới tên {{name}}.`},icon:{change:`Đổi biểu tượng`,title:`Biểu tượng dự án`,library:`Thư viện biểu tượng`,upload:`Tải ảnh lên`,search:`Tìm biểu tượng`,searchPlaceholder:`Tìm biểu tượng…`,color:`Màu biểu tượng`,choose:`Chọn {{name}}`,noMatches:`Không có biểu tượng phù hợp`,showMore:`Hiện thêm biểu tượng`,uploading:`Đang tải lên…`,chooseImage:`Chọn ảnh`,formats:`PNG, JPEG hoặc WebP · tối đa 10 MB`,file:`Tệp biểu tượng dự án`,reset:`Đặt lại biểu tượng`},createProject:{title:`Dự án mới`,inWorkspace:`Trong {{name}}`,everyoneLabel:`Mọi người trong không gian làm việc này`,name:`Tên dự án`,namePlaceholder:`Ứng dụng di động`,create:`Tạo dự án`},workspace:{title:`Cài đặt không gian làm việc`,owner:`Chủ sở hữu`,noOwner:`Chưa có chủ sở hữu. Quản trị viên hệ thống có thể chỉ định.`,transfer:`Chuyển quyền sở hữu`,transferring:`Đang chuyển…`,transferred:`{{name}} giờ sở hữu {{workspace}}`,newOwner:`Chủ sở hữu mới`,noEligible:`Quyền sở hữu được chuyển cho một quản trị viên đang hoạt động của không gian làm việc. Hãy đặt một thành viên khác làm quản trị viên trước.`,chosenCan:`Sau đó {{name}} có thể chuyển giao hoặc xóa không gian làm việc.`,newOwnerCan:`Chủ sở hữu mới có thể chuyển giao hoặc xóa không gian làm việc.`,ownerStays:`{{name}} vẫn là quản trị viên.`,unavailable:`Không gian làm việc không khả dụng`,backToProjects:`Quay lại dự án`,name:`Tên không gian làm việc`,edit:`Sửa không gian làm việc`,copyKey:`Sao chép mã không gian làm việc`,saved:`Đã lưu không gian làm việc`,projects:`Dự án`,projectCount_other:`{{count, number}} dự án bạn có thể truy cập trong không gian làm việc này.`,viewProjects:`Xem dự án`,members:`Thành viên`,membersDescription:`Vai trò trong không gian làm việc áp dụng cho các dự án dùng quyền truy cập không gian làm việc.`,manageMembers:`Quản lý thành viên`},members:{title:`Thành viên`,customRole:`Vai trò tùy chỉnh`,search:`Tìm thành viên`,searchPlaceholder:`Tên hoặc email…`,add:`Thêm thành viên`,added:`Đã thêm thành viên`,workspaceAccess:`Quyền truy cập không gian làm việc`,owner:`Chủ sở hữu`,roleFor:`Vai trò của {{name}}`,useWorkspaceAccess:`Dùng quyền truy cập không gian làm việc`,remove:`Gỡ thành viên`,removeFromWorkspace:`Gỡ {{name}} khỏi không gian làm việc này và mọi dự án của nó?`,restoreAccess:`Khôi phục quyền truy cập không gian làm việc {{role}} cho {{name}}?`,removeFromProject:`Gỡ quyền truy cập dự án của {{name}}?`,noMatches:`Không có thành viên phù hợp`,empty:`Không có thành viên`,projectRole:`Vai trò dự án`,workspaceRole:`Vai trò không gian làm việc`},invitations:{title:`Lời mời`,invite:`Mời qua email`,removedProjects:`Dự án bị loại trừ`,wholeWorkspace:`Toàn bộ không gian làm việc`,selectedProjects:`Dự án đã chọn`,expired:`Đã hết hạn`,expires:`Hết hạn <time/>`,resend:`Gửi lại lời mời đến {{email}}`,revoke:`Thu hồi lời mời`,revokeDescription:`Liên kết đã gửi đến {{email}} sẽ ngừng hoạt động.`,revoked:`Đã thu hồi lời mời`,empty:`Không có lời mời đang chờ`,email:`Email`,role:`Vai trò`,access:`Quyền truy cập`,projects:`Dự án`,noProjects:`Không gian làm việc này chưa có dự án.`,linkExpires:`Liên kết hết hạn`,inDays_other:`Trong {{count, number}} ngày`,submit:`Mời`,link:`Liên kết mời`,copyLink:`Sao chép liên kết mời`,emailed:`Đã gửi email đến {{email}}. Liên kết chỉ dùng được một lần, cho địa chỉ đó.`,notEmailed:`Hệ thống này chưa cấu hình email. Hãy gửi liên kết này đến {{email}}; liên kết chỉ dùng được một lần, cho địa chỉ đó.`,notEmailedUnknown:`Hệ thống này chưa cấu hình email. Hãy gửi liên kết này cho người nhận; liên kết chỉ dùng được một lần, cho địa chỉ đó.`},workspaces:{title:`Không gian làm việc`,search:`Tìm không gian làm việc`,searchPlaceholder:`Tên hoặc mã URL…`,noMatches:`Không có không gian làm việc phù hợp`,empty:`Không có không gian làm việc`,workspace:`Không gian làm việc`,administrators:`Quản trị viên`,members:`Thành viên`,projects:`Dự án`,created:`Ngày tạo`,actions:`Thao tác`,noAdministrator:`Không có quản trị viên`,manage:`Quản lý {{name}}`,pagerNoun:`không gian làm việc`,private:`Riêng tư`,noProjects:`Không có dự án`},roles:{title:`Vai trò`,new:`Vai trò mới`,edit:`Sửa vai trò`,builtIn:`Có sẵn`,readOnly:`Không có thao tác nào ngoài đọc`,memberships_other:`{{count, number}} tư cách thành viên`,editNamed:`Sửa vai trò {{name}}`,deleteNamed:`Xóa vai trò {{name}}`,deleteUnused:`Xóa vai trò chưa dùng {{name}}?`,deleted:`Đã xóa vai trò`,empty:`Không có vai trò`,saved:`Đã lưu vai trò`,name:`Tên vai trò`,actions:`Thao tác`,everyoneReads:`Mọi thành viên đều có thể đọc các dự án mà họ tiếp cận được.`,changesApply_other:`Thay đổi áp dụng ngay cho {{count, number}} tư cách thành viên đang giữ vai trò này.`,save:`Lưu vai trò`,delete:`Xóa vai trò`,reassignDescription_other:`{{count, number}} tư cách thành viên đang giữ {{name}}. Chọn vai trò để chuyển sang.`,moveTo:`Chuyển thành viên sang`},theme:{mode:{light:`Sáng`,dark:`Tối`,system:`Hệ thống`},aligned:`Đã đồng bộ`,hexColor:`Dùng mã màu hex sáu chữ số`,contrast:{light:`Tăng độ tương phản chữ của chủ đề sáng lên ít nhất 4.5:1.`,dark:`Tăng độ tương phản chữ của chủ đề tối lên ít nhất 4.5:1.`},fileTooLarge:`Tệp chủ đề phải nhỏ hơn 100 KB.`,tooMany:`Giữ tối đa 50 chủ đề tùy chỉnh.`},appearance:{colorScheme:`Bảng màu`,theme:`Chủ đề`,themes:`Chủ đề`,colorTheme:`Chủ đề màu`,search:`Tìm chủ đề`,searchPlaceholder:`Tìm chủ đề…`,create:`Tạo chủ đề`,add:`Thêm chủ đề`,importFile:`Nhập tệp chủ đề`,useMode:{light:`Dùng chế độ sáng của {{name}}`,dark:`Dùng chế độ tối của {{name}}`},modeOnly:{light:`Chỉ dùng cho chế độ sáng`,dark:`Chỉ dùng cho chế độ tối`},copyName:`Bản sao {{name}}`,duplicate:`Nhân bản {{name}}`,edit:`Sửa {{name}}`,export:`Xuất {{name}}`,delete:`Xóa {{name}}`,deleteDescription:`Xóa {{name}} khỏi trình duyệt này? Giao diện sáng hoặc tối đang dùng chủ đề này sẽ quay về chủ đề gốc của bạn.`,noMatches:`Không có chủ đề phù hợp`,customTheme:`Chủ đề tùy chỉnh`,name:`Tên chủ đề`,paletteColor:`{{color}} ({{mode, lowercase}})`,color:{background:`Nền`,foreground:`Chữ`,sidebar:`Thanh bên`,primary:`Màu nhấn`,primaryForeground:`Chữ trên màu nhấn`},save:`Lưu chủ đề`},color:{swatch:`{{label}}: {{color}}`,removeCustom:`Gỡ {{hex}} khỏi màu tùy chỉnh`,custom:`Màu tùy chỉnh`,default:`mặc định`,red:`đỏ`,orange:`cam`,amber:`hổ phách`,yellow:`vàng`,lime:`vàng chanh`,green:`xanh lá`,emerald:`ngọc lục bảo`,teal:`xanh mòng két`,cyan:`xanh lơ`,sky:`xanh da trời`,blue:`xanh dương`,indigo:`chàm`,violet:`tím violet`,purple:`tím`,fuchsia:`hồng tím`,pink:`hồng`,rose:`hồng đỏ`,gray:`xám`}},admin:{instance:{title:`Quản trị`,heading:`Hệ thống`,edit:`Sửa hệ thống`,name:`Tên`,description:`Mô tả`,noDescription:`Không có mô tả`,version:`Phiên bản ứng dụng`,publicUrl:`URL công khai`,provider:{local:`Lưu trữ cục bộ trong PostgreSQL`,s3:`Lưu trữ đối tượng tương thích S3`,postgres:`PostgreSQL tích hợp sẵn`,elasticsearch:`Tìm kiếm tương thích Elasticsearch`},section:{storage:`Lưu trữ tệp`,search:`Tìm kiếm phiếu`,events:`Phân phối sự kiện`},viewConfiguration:`Xem cấu hình`,configure:{storage:`Cấu hình lưu trữ`,search:`Cấu hình tìm kiếm`,events:`Cấu hình phân phối sự kiện`},providerTitle:`Nhà cung cấp`,deploymentManaged:`Do triển khai quản lý`,instanceManaged:`Do hệ thống quản lý`,transfers:`Chuyển tệp`,indexStatus:`Trạng thái chỉ mục`,connection:`Kết nối`,transfersS3:`Tệp được chuyển sang lưu trữ đối tượng sau khi được lưu cục bộ.`,transfersLocal:`Tệp mới được lưu trong PostgreSQL.`,searchBuiltIn:`Tìm kiếm chạy trực tiếp trong PostgreSQL.`,searchIndexed:`Thay đổi phiếu được lập chỉ mục ở chế độ nền.`,eventsConnection:`Thông báo đánh thức bên tiêu thụ; PostgreSQL giữ lịch sử phát lại.`,builtIn:`Tích hợp sẵn`,connected:`Đã kết nối`,upToDate:`Đã cập nhật`,status:{ready:`sẵn sàng`,transferring:`đang chuyển`,indexing:`đang lập chỉ mục`,connecting:`đang kết nối`,unavailable:`không khả dụng`},pendingTransfers:`Tệp đang chờ chuyển`,pendingRemain:`Các tệp này vẫn truy cập được từ PostgreSQL cho đến khi chuyển xong.`,noPending:`Không có tệp nào đang chờ chuyển.`,bucket:`Bucket`,storageEndpoint:`Điểm cuối lưu trữ`,backup:`Sao lưu`,backupBuckets:`Sao lưu PostgreSQL và mọi bucket lưu trữ đối tượng được tham chiếu.`,backupDatabase:`Nội dung tệp nằm trong bản sao lưu PostgreSQL của bạn.`,fallback:`Dự phòng`,fallbackDescription:`Tìm kiếm PostgreSQL vẫn dùng được khi chỉ mục ngoài bị chậm hoặc ngoại tuyến.`,searchEndpoint:`Điểm cuối tìm kiếm`,index:`Chỉ mục`,delivery:`Phân phối`,deliveryDescription:`Sự kiện bền vững và việc phát lại vẫn ở trong PostgreSQL. Một broker tùy chọn phân phối tín hiệu đánh thức.`,brokerEndpoint:`Điểm cuối broker`,exchange:`Exchange`},configure:{storageTitle:`Cấu hình lưu trữ tệp`,searchTitle:`Cấu hình tìm kiếm phiếu`,eventsTitle:`Cấu hình phân phối sự kiện`,saved:`Đã lưu cài đặt hệ thống`,instanceName:`Tên hệ thống`,instanceDescription:`Mô tả hệ thống`,publicUrlSource:`URL công khai được đặt bởi KANVIL_URL trong cấu hình triển khai.`,storageIntro:`Tệp đính kèm và ảnh hồ sơ dùng nhà cung cấp này. Tệp hiện có giữ nguyên vị trí lưu trữ ban đầu.`,storageProvider:`Nhà cung cấp lưu trữ`,localDescription:`Nội dung tệp được lưu trong cơ sở dữ liệu cục bộ và nằm trong bản sao lưu PostgreSQL.`,s3Endpoint:`Điểm cuối S3`,s3EndpointHint:`Để trống điểm cuối nếu dùng Amazon S3.`,region:`Vùng`,prefix:`Tiền tố khóa đối tượng`,accessKeyId:`ID khóa truy cập`,secretAccessKey:`Khóa truy cập bí mật`,savedSecret:`Đã lưu. Để trống để giữ nguyên.`,deploymentCredentials:`Dùng thông tin xác thực của triển khai khi bỏ trống`,pathStyle:`Dùng URL bucket kiểu đường dẫn`,storageVerified:`Đã xác minh kết nối lưu trữ`,testStorage:`Kiểm tra kết nối lưu trữ`,filesWaiting_other:`{{count, number}} tệp đang chờ chuyển. Các tệp đang chờ vẫn đọc được từ PostgreSQL.`,transfersComplete:`Đã chuyển xong mọi tệp.`,storageDeployment:`Lưu trữ được cấu hình bởi KANVIL_STORAGE_PROVIDER và các biến triển khai S3_*.`,locations:`Vị trí lưu trữ hiện có`,locationFiles_other:`{{count, number}} tệp`,cleanUp:`Dọn tệp không dùng`,cleanUpConfirm:`Xóa các tệp không được tham chiếu và các lượt tải lên thất bại cũ hơn một ngày? Tệp đính kèm vào phiếu hoặc hồ sơ được giữ lại.`,cleanUpNote:`Việc dọn dẹp cũng chạy tự động. Đối tượng S3 cần sao lưu bucket bên cạnh sao lưu cơ sở dữ liệu.`,searchProvider:`Nhà cung cấp tìm kiếm`,searchBuiltIn:`Tìm kiếm PostgreSQL tích hợp sẵn`,indexName:`Tên chỉ mục Kanvil`,searchAuthentication:`Xác thực tìm kiếm`,noAuthentication:`Không xác thực`,apiKey:`Khóa API`,basic:`Tên người dùng và mật khẩu`,searchApiKey:`Khóa API tìm kiếm`,optional:`Tùy chọn`,searchUsername:`Tên người dùng tìm kiếm`,searchPassword:`Mật khẩu tìm kiếm`,searchVerified:`Đã xác minh kết nối tìm kiếm`,testSearch:`Kiểm tra kết nối tìm kiếm`,rebuildQueued:`Đã xếp hàng dựng lại chỉ mục tìm kiếm`,rebuild:`Dựng lại chỉ mục`,searchNote:`PostgreSQL vẫn là nguồn chính cho quyền và bộ lọc. Tìm kiếm quay về PostgreSQL khi chỉ mục ngoài đang cập nhật hoặc không khả dụng.`,brokerProvider:`Nhà cung cấp phân phối sự kiện`,brokerBuiltIn:`Thông báo PostgreSQL tích hợp sẵn`,rabbitUrl:`URL kết nối RabbitMQ`,savedBrokerEndpoint:`Điểm cuối broker đã lưu`,rabbitExchange:`Exchange RabbitMQ`,brokerVerified:`Đã xác minh phân phối RabbitMQ`,testBroker:`Kiểm tra kết nối broker`,brokerNote:`RabbitMQ phát tín hiệu đánh thức của sự kiện đã cam kết tới các máy Kanvil và đánh thức tiến trình nền. PostgreSQL giữ sự kiện bền vững và công việc đang chờ, đồng thời gửi tín hiệu đánh thức khi broker không khả dụng.`,brokerDeployment:`Phân phối sự kiện được cấu hình bởi KANVIL_BROKER_PROVIDER và các biến triển khai RABBITMQ_*.`,save:`Lưu cài đặt hệ thống`},authentication:{title:`Xác thực`,saved:`Đã lưu cài đặt xác thực`,emailPassword:`Đăng nhập bằng email và mật khẩu`,emailPasswordDescription:`Bao gồm mã đăng nhập qua email và đặt lại mật khẩu.`,ssoProvision:`Tự động tạo người dùng từ SSO`,ssoProvisionDescription:`Người dùng SSO mới không có quyền truy cập không gian làm việc hay dự án cho đến khi được mời.`,registration:`Đăng ký công khai bằng email`,registrationClosed:`Đã đóng`,identityProvider:`Nhà cung cấp danh tính`,notConfigured:`Chưa cấu hình`,linkedProviders:`Nhà cung cấp tài khoản liên kết`,linkedProvidersDescription:`Chỉ đăng nhập các tài khoản đã liên kết với chúng; không bao giờ tạo tài khoản.`,save:`Lưu cài đặt xác thực`,discoveryUrl:`URL khám phá OIDC`,clientId:`ID ứng dụng khách OIDC`,oidcSetup:`Cấu hình OIDC_DISCOVERY_URL, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET và OIDC_NAME, hoặc một cặp CLIENT_ID và CLIENT_SECRET cho GITHUB_, GOOGLE_ hay DISCORD_, trong triển khai, rồi khởi động lại Kanvil. Bí mật của nhà cung cấp không bao giờ được gửi về trình duyệt.`,consumers:`Giao diện cho bên tiêu thụ`,mcpEndpoint:`Điểm cuối MCP`,eventFeed:`Luồng sự kiện thời gian thực`,openApi:`Đặc tả OpenAPI`},users:{title:`Người dùng`,search:`Tìm người dùng`,searchPlaceholder:`Tên hoặc email…`,new:`Người dùng mới`,roleFilter:`Lọc theo vai trò hệ thống`,allRoles:`Mọi vai trò`,administrators:`Quản trị viên`,users:`Người dùng`,statusFilter:`Lọc theo trạng thái tài khoản`,allAccounts:`Mọi tài khoản`,active:`Đang hoạt động`,disabled:`Đã vô hiệu hóa`,noMatches:`Không có người dùng phù hợp`,empty:`Không có người dùng`,user:`Người dùng`,role:`Vai trò`,status:`Trạng thái`,joined:`Ngày tham gia`,actions:`Thao tác`,administrator:`Quản trị viên`,manage:`Quản lý {{name}}`,pagerNoun:`người dùng`,create:`Tạo tài khoản`,creating:`Đang tạo…`,created:`Đã tạo {{email}}`,name:`Tên`,email:`Email`,initialPassword:`Mật khẩu ban đầu`,instanceRole:`Vai trò hệ thống`},account:{details:`Chi tiết tài khoản`,joined:`Tham gia {{date}}`,edit:`Sửa tài khoản`,instanceRole:`Vai trò hệ thống`,adminDescription:`Có thể quản trị mọi không gian làm việc, tài khoản và cài đặt triển khai.`,userDescription:`Vai trò trong không gian làm việc và dự án quyết định quyền truy cập.`,changeRole:`Đổi vai trò`,changeRoleTitle:`Đổi vai trò hệ thống`,signInMethods:`Phương thức đăng nhập`,setPassword:`Đặt mật khẩu cục bộ`,activeSessions:`Phiên đang hoạt động`,sessions_other:`{{count, number}} phiên`,revokeSessions:`Thu hồi phiên`,revokeConfirm:`Đăng xuất {{name}} khỏi mọi thiết bị? Khóa API vẫn hoạt động.`,sessionsRevoked:`Đã thu hồi phiên`,access:`Quyền truy cập tài khoản`,accessDisabled:`Đăng nhập và truy cập API đã bị vô hiệu hóa.`,accessPreserved:`Vô hiệu hóa tài khoản vẫn giữ lại phiếu và lịch sử hoạt động.`,enable:`Kích hoạt tài khoản`,disable:`Vô hiệu hóa tài khoản`,enableConfirm:`Khôi phục quyền đăng nhập cho {{name}}?`,disableConfirm:`Vô hiệu hóa đăng nhập và truy cập API của {{name}}, đồng thời thu hồi các phiên?`,enabled:`Đã kích hoạt tài khoản`,disabledToast:`Đã vô hiệu hóa tài khoản`,updateFailed:`Không thể cập nhật tài khoản`,workspaces:`Không gian làm việc`,addToWorkspace:`Thêm vào không gian làm việc`,noWorkspaces:`Không thuộc không gian làm việc nào`,projectAccess:`Quyền truy cập dự án trực tiếp`,updated:`Đã cập nhật tài khoản`,roleUpdated:`Đã cập nhật vai trò hệ thống`,workspaceAdded:`Đã thêm quyền truy cập không gian làm việc`,passwordMismatch:`Mật khẩu mới không khớp.`,passwordSet:`Đã đặt mật khẩu cục bộ và thu hồi các phiên`,name:`Tên`,email:`Email`,user:`Người dùng`,administrator:`Quản trị viên`,adminsNote:`Quản trị viên có thể quản lý mọi không gian làm việc, người dùng và cài đặt hệ thống.`,workspace:`Không gian làm việc`,workspaceRole:`Vai trò không gian làm việc`,newPassword:`Mật khẩu mới`,confirmPassword:`Xác nhận mật khẩu mới`,passwordNote:`Thao tác này đặt mật khẩu cục bộ và đăng xuất người dùng khỏi mọi thiết bị.`,save:`Lưu thay đổi`},delivery:{field:{address:`Địa chỉ email`,server:`Máy chủ`,topic:`Chủ đề`,accessToken:`Token truy cập`,applicationToken:`Token ứng dụng`,endpointUrl:`URL điểm cuối`,signingSecret:`Bí mật ký`,incomingWebhookUrl:`URL webhook đến`,webhookUrl:`URL webhook`,channel:`Kênh`,botToken:`Token bot`,chatId:`ID cuộc trò chuyện`,chatIdPlaceholder:`-1001234567890 hoặc @channel`,topicId:`ID chủ đề`,optional:`{{label}} (tùy chọn)`,removeSaved:`Gỡ {{label, lowercase}} đã lưu`,savedSecret:`Đã lưu · để trống để giữ nguyên`},failure:{blockedAddress:`Địa chỉ này không được phép`,redirectBlocked:`Điểm cuối đã chuyển hướng`,dnsError:`Không tìm thấy máy chủ`,networkError:`Không thể kết nối`,timeout:`Hết thời gian chờ`,invalidEndpoint:`Điểm cuối không hợp lệ`,emailUnavailable:`Máy chủ này chưa cấu hình email`,smtpError:`Máy chủ thư không khả dụng`,accessRevoked:`Quản trị viên đã kết nối nó mất quyền truy cập; hãy kết nối lại`,repositoryMismatch:`Một lượt gửi đến từ kho mã khác`,http:`Bị từ chối với HTTP {{status}}`,smtp:`Máy chủ thư trả lời {{code}}`},health:{delivery:{done:`Đã gửi <time/>`,pending:`Đang gửi…`,none:`Chưa gửi gì`,failed:`{{reason}}`},access:{done:`Đã kiểm tra quyền truy cập <time/>`,pending:`Đang kiểm tra quyền truy cập…`,none:`Chưa kiểm tra quyền truy cập`,failed:`Kiểm tra quyền truy cập: {{reason}}`},retrying:`đang thử lại`},paused:`Tạm dừng`,failing:`Đang lỗi`,sendTest:`Gửi thử đến {{name}}`,testQueued:`Đã xếp hàng gửi thử`,resume:`Tiếp tục {{name}}`,pause:`Tạm dừng {{name}}`,edit:`Sửa {{name}}`,disconnect:`Ngắt kết nối {{name}}`,disconnected:`Đã ngắt kết nối {{name}}`,name:`Tên`,type:`Kiểu`,channels:`Kênh`,addChannel:`Thêm kênh`,noChannels:`Không có kênh`,editChannel:`Sửa kênh`,channelSaved:`Đã lưu kênh`,channelRemoval:`Ngắt kết nối {{name}}? Cài đặt và các thông báo đang xếp hàng của kênh sẽ bị hủy.`,sendFrom:`Gửi thông báo từ`,routeOff:`Không gì cả`,routeAll:`Mọi dự án`,routeSelected:`Dự án đã chọn`,saveChannel:`Lưu kênh`,adminsOnly:`Quản trị viên dự án quản lý các tích hợp`,destinations:`Đích đến`,addDestination:`Thêm đích đến`,noDestinations:`Không có đích đến`,editDestination:`Sửa đích đến`,destinationSaved:`Đã lưu đích đến`,destinationRemoval:`Ngắt kết nối {{name}}? Cài đặt và các tin nhắn đang xếp hàng của đích đến sẽ bị hủy.`,send:`Gửi`,saveDestination:`Lưu đích đến`},repository:{setup:{github:`Token cần quyền đọc kho mã, và quyền ghi issue và pull request để bình luận hoặc đồng bộ issue. Thêm webhook GitHub với URL sao chép từ dòng của kho mã này, content type application/json, bí mật này, và các sự kiện Branch or tag creation, Branch or tag deletion, Issues, Issue comments và Pull requests.`,gitea:`Token cần phạm vi read:repository, và write:issue để bình luận hoặc đồng bộ issue. Thêm webhook Gitea với URL sao chép từ dòng của kho mã này, content type application/json, bí mật này, và các sự kiện Create, Delete, Issues, Issue Label, Issue Comment và Pull Request.`,gitlab:`Token cần phạm vi read_api, và api để bình luận hoặc đồng bộ issue. Thêm webhook GitLab với URL sao chép từ dòng của kho mã này, token bí mật này, và các sự kiện Push, Issues, Comments và Merge request.`},noWebhook:`Chưa nhận webhook nào`,webhookReceived:`Đã nhận webhook <time/>`,saved:`Đã lưu kho mã`,title:`Kho mã`,connect:`Kết nối kho mã`,empty:`Không có kho mã`,checkAccess:`Kiểm tra quyền truy cập {{repository}}`,accessQueued:`Đã xếp hàng kiểm tra quyền truy cập`,copyWebhook:`Sao chép URL webhook của {{repository}}`,issueSync:`Đồng bộ issue cho {{repository}}`,removal:`Ngắt kết nối {{repository}}? Webhook của kho mã ngừng hoạt động ngay. Các liên kết nó đã thêm vẫn ở trên phiếu.`,edit:`Sửa kho mã`,host:`Máy chủ mã`,serverUrl:`URL máy chủ`,serverUrlOptional:`URL máy chủ (tùy chọn)`,repository:`Kho mã {{host}}`,nestedPlaceholder:`group/project`,placeholder:`owner/repository`,accessToken:`Token truy cập`,webhookSecret:`Bí mật webhook`,savedSecret:`Đã lưu · để trống để giữ nguyên`,commentOnLink:{pull_request:`Bình luận vào issue và pull request mới được liên kết`,merge_request:`Bình luận vào issue và merge request mới được liên kết`},moveTickets:`Chuyển phiếu được liên kết`,noMove:`Không chuyển`,save:`Lưu kho mã`},issueSync:{reason:{labels:`Nhãn đồng bộ của issue đã thay đổi`,conflict:`Đã thay đổi ở cả hai phía`,changedWhilePaused:`Issue đã thay đổi trong khi kho mã bị tạm dừng`,unverified:`Phản hồi của máy chủ mã không xác nhận thay đổi`,claimConflict:`Phiếu đã được nhận`,invalidContent:`Issue dài hơn mức một phiếu cho phép`},issuesSyncing_other:`{{count, number}} issue đang đồng bộ`,linksStopped_other:`{{count, number}} liên kết đã dừng`,match:`Khớp`,matchAny:`Bất kỳ nhãn nào trong số này`,matchAll:`Tất cả các nhãn này`,preview:{matching:`Tiếp tục đồng bộ`,export:`Issue mới sẽ tạo`,pause:`Liên kết sẽ tạm dừng`,review:`Liên kết cần xem xét`},applied:`Đã áp dụng đồng bộ issue`,title:`Đồng bộ issue · {{repository}}`,outbound:`Kanvil sang {{host}}`,exportTickets:`Xuất phiếu thành issue`,exportDescription:`Phiếu đang mở sẽ có issue mới; tiêu đề, mô tả, trạng thái và bình luận mới được giữ đồng bộ.`,ticketLabels:`Chỉ phiếu có các nhãn này`,everyTicket:`Mọi phiếu đang mở`,inbound:`{{host}} sang Kanvil`,importIssues:`Nhập issue thành phiếu`,importDescription:`Issue đang mở được nhập khi {{host}} báo cáo chúng lần tới.`,issueLabels:`Chỉ issue có các nhãn này`,everyIssue:`Mọi issue đang mở`,previewLabel:`Xem trước`,previewAction:`Xem trước`,stopped:`Liên kết đã dừng · {{repository}}`,review:`Xem xét`,linkRemoved:`Đã gỡ liên kết`,resumed:`Đã tiếp tục đồng bộ`,open:`Đang mở`,closed:`Đã đóng`,reviewTitle:`Xem xét {{key}}`,mayExist:`{{host}} có thể đã có issue này; hãy kiểm tra trước khi tạo lại.`,comparison:`So sánh`,field:{title:`tiêu đề`,description:`mô tả`,state:`trạng thái`},notReported:`Chưa báo cáo`,unlink:`Hủy liên kết`,keepHost:`Giữ bản {{host}}`,keepKanvil:`Giữ bản Kanvil`,createAgain:`Tạo lại issue`,unlinkTicket:`Hủy liên kết {{key}}`,unlinkConfirm:`Ngừng đồng bộ {{key}}? Cả phiếu và issue đều được giữ lại.`},import:{count:{tickets:`Phiếu`,workflow:`Trạng thái quy trình`,fields:`Trường tùy chỉnh`,labels:`Nhãn`,relations:`Quan hệ`,comments:`Bình luận`,evidence:`Bằng chứng`,links:`Liên kết`},notExport:`Tệp này không phải bản xuất phiếu của Kanvil.`,progress_other:`{{status}} · {{done, number}} trên {{count, number}} bản ghi`,progressFailed_other:`{{status}} · {{done, number}} trên {{count, number}} bản ghi · {{failed, number}} thất bại`,title:`Nhập`,description:`Tạo dự án từ bản xuất phiếu Kanvil hoặc từ trình theo dõi khác: Linear, Jira, Trello, Plane, PLANKA hoặc Kaneo.`,action:`Nhập dự án`,detailsOf:`Chi tiết của {{name}}`,details:`Chi tiết`,exportFile:`Tệp xuất Kanvil`,source:`Nguồn`,file:`Tệp xuất`,jiraEdition:`Phiên bản Jira`,siteUrl:`URL trang`,accountEmail:`Email tài khoản`,apiKey:`Khóa API`,apiToken:`Token API`,personalToken:`Token truy cập cá nhân`,token:`Token`,apiUrl:`URL API`,workspaceSlug:`Mã URL không gian làm việc`,signInWith:`Đăng nhập bằng`,username:`Tên người dùng hoặc email`,password:`Mật khẩu`,checkConnection:`Kiểm tra thông tin kết nối`,noProjects:`Thông tin xác thực này không đọc được {{label, lowercase}} nào.`,includeComments:`Bao gồm bình luận`,projectName:`Tên dự án`,start:`Nhập`,connect:`Kết nối`,preview:`Xem trước`,starting:`Đang bắt đầu…`,connecting:`Đang kết nối…`,checking:`Đang kiểm tra…`,matched:`Người đã khớp`,unmatched:`Người chưa khớp`,previewLabel:`Xem trước lượt nhập`,errorPrefix:`Lỗi: `,notePrefix:`Lưu ý: `,progressLabel:`Tiến độ nhập`,notImported:`Bản ghi chưa được nhập`,stop:`Dừng nhập`,openProject:`Mở dự án`}},native:{labelValue:`{{label}}: {{value}}`,ui:{dismiss:`Bỏ qua`,loading:`Đang tải`},server:{url:`URL máy chủ`,connect:`Kết nối`,change:`Đổi máy chủ`,invalidOrigin:`Dùng nguồn gốc HTTP hoặc HTTPS của máy chủ Kanvil, không kèm đường dẫn hay thông tin xác thực.`,httpsRequired:`Dùng HTTPS để kết nối tới máy chủ Kanvil.`},login:{setupTitle:`Tạo tài khoản chủ sở hữu`,signIn:`Đăng nhập`,signingIn:`Đang đăng nhập…`,createAccount:`Tạo tài khoản`,signInWith:`Đăng nhập bằng {{provider}}`,name:`Tên`,setupToken:`Token thiết lập`,email:`Email`,password:`Mật khẩu`},connection:{connecting:`đang kết nối`,connected:`● Trực tiếp`,offline:`Ngoại tuyến · dữ liệu đã lưu`,closed:`đã đóng`,signedOut:`Đăng nhập để kết nối lại`},screen:{projects:`Dự án`,inbox:`Hộp thư đến`,settings:`Cài đặt`,tickets:`Phiếu`,ticket:`Phiếu`,newTicket:`Phiếu mới`,editTicket:`Sửa phiếu`},projects:{empty:`Chưa có dự án`,new:`Dự án mới`,name:`Tên dự án`,prefix:`Tiền tố phiếu`,description:`Mô tả`,create:`Tạo dự án`},tickets:{search:`Tìm phiếu`,searchPlaceholder:`Tiêu đề, mô tả hoặc mã`,allStatuses:`Mọi trạng thái`,empty:`Không có phiếu phù hợp`,count:`{{shown}} trên {{total}}`},ticket:{priority:`Mức ưu tiên: {{priority}}`,noDifficulty:`Chưa xác định độ khó`,version:`v{{version}}`,starts:`Bắt đầu {{date}}`,due:`Hạn {{date}}`},editor:{stale:`Phiếu này đã thay đổi. Bản nháp đã lưu vẫn dùng phiên bản {{version}}.`,discardDraft:`Hủy bản nháp và tải lại`,title:`Tiêu đề`,noDifficulty:`Chưa xác định`,labels:`Nhãn (phân cách bằng dấu phẩy)`,scopes:`Phạm vi (phân cách bằng dấu phẩy)`,editMarkdown:`Sửa Markdown`,previewMarkdown:`Xem trước Markdown`,description:`Mô tả (Markdown)`,acceptanceCriteria:`Tiêu chí chấp nhận (Markdown)`,parent:`ID phiếu cha`,automationReady:`Sẵn sàng cho tác tử khi yêu cầu và phụ thuộc cho phép`,holdReason:`Lý do tạm giữ`,draftSaved:`Đã lưu bản nháp trên thiết bị này`,save:`Lưu phiếu`},detail:{archived:`Đã lưu trữ`,subscribe:`Theo dõi`,unsubscribe:`Bỏ theo dõi`,share:`Chia sẻ`,description:`Mô tả`,noDescription:`_Không có mô tả_`,acceptanceCriteria:`Tiêu chí chấp nhận`,noAcceptanceCriteria:`_Không có tiêu chí chấp nhận_`,fields:`Trường`,archive:{action:`Lưu trữ phiếu`,title:`Lưu trữ phiếu?`,message:`Gỡ phiếu này khỏi danh sách đang hoạt động và khỏi diện tác tử có thể nhận?`},unarchive:{action:`Bỏ lưu trữ phiếu`,title:`Bỏ lưu trữ phiếu?`,message:`Đưa phiếu này trở lại danh sách đang hoạt động?`}},readiness:{title:`Mức sẵn sàng cho tác tử`,ready:`Sẵn sàng để nhận`,notReady:`Chưa sẵn sàng để nhận`,hold:`Tạm giữ: {{reason}}`,claimed:`Đã được {{worker}} nhận đến {{time}}.`,release:{action:`Trả lại việc đã nhận`,title:`Trả lại việc đã nhận?`,message:`Hãy dừng tiến trình của bạn trước khi trả lại quyền sở hữu.`,confirm:`Trả lại`},recover:{action:`Thu hồi việc nhận đã hết hạn`,explanation:`Hãy xác nhận tiến trình đã dừng trước.`,reason:`Lý do thu hồi`,confirm:`Tiến trình đã dừng · thu hồi`}},relations:{title:`Quan hệ`,parent:`Phiếu cha · {{key}} · {{title}}`,openParent:`Mở phiếu cha`,children:`Phiếu con`,previousChildren:`Phiếu con trước`,nextChildren:`Phiếu con tiếp theo`,remove:`Gỡ quan hệ`,removeTitle:`Gỡ quan hệ?`,add:`Thêm quan hệ`,find:`Tìm phiếu`,type:`Quan hệ`,ticket:`Phiếu`,choose:`Chọn phiếu`},discussion:{title:`Thảo luận`,previous:`Bình luận trước`,next:`Bình luận tiếp theo`,field:`Bình luận (Markdown)`,submit:`Bình luận`,you:`Bạn`,edit:`Sửa bình luận`,editField:`Bình luận`,delete:`Xóa bình luận`,deleteTitle:`Xóa bình luận?`,deleteMessage:`Xóa vĩnh viễn bình luận này?`,save:`Lưu bình luận`},attachments:{title:`Tệp đính kèm`,item:`{{name}} · {{size}} kB`,remove:`Gỡ {{name}}`,removeTitle:`Gỡ tệp đính kèm?`,working:`Đang xử lý…`,add:`Thêm tệp đính kèm`,tooLarge:`Chọn tệp không lớn hơn 10 MB.`,sharingUnavailable:`Không thể chia sẻ tệp trên thiết bị này.`},evidence:{title:`Bằng chứng`,explanation:`Kết quả do tài khoản gửi chúng báo cáo.`,add:`Thêm bằng chứng`,name:`Tiêu đề`,url:`URL`,outcome:`Kết quả báo cáo`,commit:`Commit (mã băm đầy đủ)`,note:`Ghi chú`,save:`Lưu bằng chứng`},activity:{title:`Hoạt động`,previous:`Hoạt động trước`,next:`Hoạt động tiếp theo`},inbox:{markAllRead:`Đánh dấu tất cả đã đọc`,empty:`Không có thông báo`},notifications:{title:`Thông báo`,inApp:`Cập nhật phiếu đã theo dõi trong Hộp thư đến`,push:`Thông báo đẩy`,enableDevice:`Bật thông báo đẩy trên thiết bị này`,disableDevice:`Tắt thông báo đẩy trên thiết bị này`,unconfigured:`Bản dựng này cần ID dự án Expo và cấu hình ký để dùng thông báo đẩy.`,noProjectId:`Bản dựng này cần ID dự án Expo để dùng thông báo đẩy.`,permissionDenied:`Cho phép thông báo trong cài đặt thiết bị để bật thông báo đẩy.`,channel:`Cập nhật phiếu`},settings:{password:{title:`Mật khẩu cục bộ`,current:`Mật khẩu hiện tại`,new:`Mật khẩu mới`,change:`Đổi mật khẩu`,updated:`Đã cập nhật mật khẩu; các phiên khác đã bị thu hồi`},oidc:{linked:`Đã liên kết tài khoản`,explanation:`Liên kết tài khoản này trước khi đăng nhập bằng nhà cung cấp này.`,link:`Liên kết {{provider}}`},signOut:{action:`Đăng xuất`,title:`Đăng xuất?`,message:`Phiếu và bản nháp đã lưu của tài khoản này sẽ bị xóa khỏi thiết bị này.`},changeServer:{title:`Đổi máy chủ?`,message:`Đăng xuất và xóa bộ nhớ đệm cục bộ cùng bản nháp của tài khoản này?`}}}};export{e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,l as t,o as n,s as r}from"./en-US-DKYSujv3.js";import{Dt as i}from"./index-
|
|
1
|
+
import{c as e,l as t,o as n,s as r}from"./en-US-DKYSujv3.js";import{Dt as i}from"./index-2V6MWx63.js";var a={lessThanXSeconds:{one:`dưới 1 giây`,other:`dưới {{count}} giây`},xSeconds:{one:`1 giây`,other:`{{count}} giây`},halfAMinute:`nửa phút`,lessThanXMinutes:{one:`dưới 1 phút`,other:`dưới {{count}} phút`},xMinutes:{one:`1 phút`,other:`{{count}} phút`},aboutXHours:{one:`khoảng 1 giờ`,other:`khoảng {{count}} giờ`},xHours:{one:`1 giờ`,other:`{{count}} giờ`},xDays:{one:`1 ngày`,other:`{{count}} ngày`},aboutXWeeks:{one:`khoảng 1 tuần`,other:`khoảng {{count}} tuần`},xWeeks:{one:`1 tuần`,other:`{{count}} tuần`},aboutXMonths:{one:`khoảng 1 tháng`,other:`khoảng {{count}} tháng`},xMonths:{one:`1 tháng`,other:`{{count}} tháng`},aboutXYears:{one:`khoảng 1 năm`,other:`khoảng {{count}} năm`},xYears:{one:`1 năm`,other:`{{count}} năm`},overXYears:{one:`hơn 1 năm`,other:`hơn {{count}} năm`},almostXYears:{one:`gần 1 năm`,other:`gần {{count}} năm`}},o=(e,t,n)=>{let r,i=a[e];return r=typeof i==`string`?i:t===1?i.one:i.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?r+` nữa`:r+` trước`:r},s={date:t({formats:{full:`EEEE, 'ngày' d MMMM 'năm' y`,long:`'ngày' d MMMM 'năm' y`,medium:`d MMM 'năm' y`,short:`dd/MM/y`},defaultWidth:`full`}),time:t({formats:{full:`HH:mm:ss zzzz`,long:`HH:mm:ss z`,medium:`HH:mm:ss`,short:`HH:mm`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} {{time}}`,long:`{{date}} {{time}}`,medium:`{{date}} {{time}}`,short:`{{date}} {{time}}`},defaultWidth:`full`})},c={lastWeek:`eeee 'tuần trước vào lúc' p`,yesterday:`'hôm qua vào lúc' p`,today:`'hôm nay vào lúc' p`,tomorrow:`'ngày mai vào lúc' p`,nextWeek:`eeee 'tới vào lúc' p`,other:`P`},l={code:`vi`,formatDistance:o,formatLong:s,formatRelative:(e,t,n,r)=>c[e],localize:{ordinalNumber:(e,t)=>{let n=Number(e),r=t?.unit;if(r===`quarter`)switch(n){case 1:return`I`;case 2:return`II`;case 3:return`III`;case 4:return`IV`}else if(r===`day`)switch(n){case 1:return`thứ 2`;case 2:return`thứ 3`;case 3:return`thứ 4`;case 4:return`thứ 5`;case 5:return`thứ 6`;case 6:return`thứ 7`;case 7:return`chủ nhật`}else if(r===`week`)return n===1?`thứ nhất`:`thứ `+n;else if(r===`dayOfYear`)return n===1?`đầu tiên`:`thứ `+n;return String(n)},era:e({values:{narrow:[`TCN`,`SCN`],abbreviated:[`trước CN`,`sau CN`],wide:[`trước Công Nguyên`,`sau Công Nguyên`]},defaultWidth:`wide`}),quarter:e({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`Q1`,`Q2`,`Q3`,`Q4`],wide:[`Quý 1`,`Quý 2`,`Quý 3`,`Quý 4`]},defaultWidth:`wide`,formattingValues:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`Q1`,`Q2`,`Q3`,`Q4`],wide:[`quý I`,`quý II`,`quý III`,`quý IV`]},defaultFormattingWidth:`wide`,argumentCallback:e=>e-1}),month:e({values:{narrow:[`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`10`,`11`,`12`],abbreviated:[`Thg 1`,`Thg 2`,`Thg 3`,`Thg 4`,`Thg 5`,`Thg 6`,`Thg 7`,`Thg 8`,`Thg 9`,`Thg 10`,`Thg 11`,`Thg 12`],wide:[`Tháng Một`,`Tháng Hai`,`Tháng Ba`,`Tháng Tư`,`Tháng Năm`,`Tháng Sáu`,`Tháng Bảy`,`Tháng Tám`,`Tháng Chín`,`Tháng Mười`,`Tháng Mười Một`,`Tháng Mười Hai`]},defaultWidth:`wide`,formattingValues:{narrow:[`01`,`02`,`03`,`04`,`05`,`06`,`07`,`08`,`09`,`10`,`11`,`12`],abbreviated:[`thg 1`,`thg 2`,`thg 3`,`thg 4`,`thg 5`,`thg 6`,`thg 7`,`thg 8`,`thg 9`,`thg 10`,`thg 11`,`thg 12`],wide:[`tháng 01`,`tháng 02`,`tháng 03`,`tháng 04`,`tháng 05`,`tháng 06`,`tháng 07`,`tháng 08`,`tháng 09`,`tháng 10`,`tháng 11`,`tháng 12`]},defaultFormattingWidth:`wide`}),day:e({values:{narrow:[`CN`,`T2`,`T3`,`T4`,`T5`,`T6`,`T7`],short:[`CN`,`Th 2`,`Th 3`,`Th 4`,`Th 5`,`Th 6`,`Th 7`],abbreviated:[`CN`,`Thứ 2`,`Thứ 3`,`Thứ 4`,`Thứ 5`,`Thứ 6`,`Thứ 7`],wide:[`Chủ Nhật`,`Thứ Hai`,`Thứ Ba`,`Thứ Tư`,`Thứ Năm`,`Thứ Sáu`,`Thứ Bảy`]},defaultWidth:`wide`}),dayPeriod:e({values:{narrow:{am:`am`,pm:`pm`,midnight:`nửa đêm`,noon:`tr`,morning:`sg`,afternoon:`ch`,evening:`tối`,night:`đêm`},abbreviated:{am:`AM`,pm:`PM`,midnight:`nửa đêm`,noon:`trưa`,morning:`sáng`,afternoon:`chiều`,evening:`tối`,night:`đêm`},wide:{am:`SA`,pm:`CH`,midnight:`nửa đêm`,noon:`trưa`,morning:`sáng`,afternoon:`chiều`,evening:`tối`,night:`đêm`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`am`,pm:`pm`,midnight:`nửa đêm`,noon:`tr`,morning:`sg`,afternoon:`ch`,evening:`tối`,night:`đêm`},abbreviated:{am:`AM`,pm:`PM`,midnight:`nửa đêm`,noon:`trưa`,morning:`sáng`,afternoon:`chiều`,evening:`tối`,night:`đêm`},wide:{am:`SA`,pm:`CH`,midnight:`nửa đêm`,noon:`giữa trưa`,morning:`vào buổi sáng`,afternoon:`vào buổi chiều`,evening:`vào buổi tối`,night:`vào ban đêm`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:n({matchPattern:/^(\d+)/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:r({matchPatterns:{narrow:/^(tcn|scn)/i,abbreviated:/^(trước CN|sau CN)/i,wide:/^(trước Công Nguyên|sau Công Nguyên)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^t/i,/^s/i]},defaultParseWidth:`any`}),quarter:r({matchPatterns:{narrow:/^([1234]|i{1,3}v?)/i,abbreviated:/^q([1234]|i{1,3}v?)/i,wide:/^quý ([1234]|i{1,3}v?)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/(1|i)$/i,/(2|ii)$/i,/(3|iii)$/i,/(4|iv)$/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:r({matchPatterns:{narrow:/^(0?[2-9]|10|11|12|0?1)/i,abbreviated:/^thg[ _]?(0?[1-9](?!\d)|10|11|12)/i,wide:/^tháng ?(Một|Hai|Ba|Tư|Năm|Sáu|Bảy|Tám|Chín|Mười|Mười ?Một|Mười ?Hai|0?[1-9](?!\d)|10|11|12)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/0?1$/i,/0?2/i,/3/,/4/,/5/,/6/,/7/,/8/,/9/,/10/,/11/,/12/],abbreviated:[/^thg[ _]?0?1(?!\d)/i,/^thg[ _]?0?2/i,/^thg[ _]?0?3/i,/^thg[ _]?0?4/i,/^thg[ _]?0?5/i,/^thg[ _]?0?6/i,/^thg[ _]?0?7/i,/^thg[ _]?0?8/i,/^thg[ _]?0?9/i,/^thg[ _]?10/i,/^thg[ _]?11/i,/^thg[ _]?12/i],wide:[/^tháng ?(Một|0?1(?!\d))/i,/^tháng ?(Hai|0?2)/i,/^tháng ?(Ba|0?3)/i,/^tháng ?(Tư|0?4)/i,/^tháng ?(Năm|0?5)/i,/^tháng ?(Sáu|0?6)/i,/^tháng ?(Bảy|0?7)/i,/^tháng ?(Tám|0?8)/i,/^tháng ?(Chín|0?9)/i,/^tháng ?(Mười|10)/i,/^tháng ?(Mười ?Một|11)/i,/^tháng ?(Mười ?Hai|12)/i]},defaultParseWidth:`wide`}),day:r({matchPatterns:{narrow:/^(CN|T2|T3|T4|T5|T6|T7)/i,short:/^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,abbreviated:/^(CN|Th ?2|Th ?3|Th ?4|Th ?5|Th ?6|Th ?7)/i,wide:/^(Chủ ?Nhật|Chúa ?Nhật|thứ ?Hai|thứ ?Ba|thứ ?Tư|thứ ?Năm|thứ ?Sáu|thứ ?Bảy)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],short:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],abbreviated:[/CN/i,/2/i,/3/i,/4/i,/5/i,/6/i,/7/i],wide:[/(Chủ|Chúa) ?Nhật/i,/Hai/i,/Ba/i,/Tư/i,/Năm/i,/Sáu/i,/Bảy/i]},defaultParseWidth:`wide`}),dayPeriod:r({matchPatterns:{narrow:/^(a|p|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,abbreviated:/^(am|pm|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i,wide:/^(ch[^i]*|sa|nửa đêm|trưa|(giờ) (sáng|chiều|tối|đêm))/i},defaultMatchWidth:`wide`,parsePatterns:{any:{am:/^(a|sa)/i,pm:/^(p|ch[^i]*)/i,midnight:/nửa đêm/i,noon:/trưa/i,morning:/sáng/i,afternoon:/chiều/i,evening:/tối/i,night:/^đêm/i}},defaultParseWidth:`any`})},options:{weekStartsOn:1,firstWeekContainsDate:1},labels:{labelDayButton:(e,t,n,r)=>{let a=(r??new i(n)).format(e,`PPPP`);return t.today&&(a=`Hôm nay, ${a}`),t.selected&&(a=`${a}, đã chọn`),a},labelMonthDropdown:`Chọn tháng`,labelNext:`Đến tháng tiếp theo`,labelPrevious:`Đến tháng trước`,labelWeekNumber:e=>`Tuần ${e}`,labelYearDropdown:`Chọn năm`,labelGrid:(e,t,n)=>(n??new i(t)).formatMonthYear(e),labelGridcell:(e,t,n,r)=>{let a=(r??new i(n)).format(e,`PPPP`);return t?.today&&(a=`Hôm nay, ${a}`),a},labelNav:`Thanh điều hướng`,labelWeekNumberHeader:`Số tuần`,labelWeekday:(e,t,n)=>(n??new i(t)).format(e,`cccc`)}};export{l as vi};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Nn as t,mn as n,r}from"./default-BgvtI7HK.js";import{Di as i,Ea as a,Ei as o,Ga as s,J as c,Ma as l,Mi as u,N as d,Ni as f,Oi as p,Oo as m,P as h,Ta as g,Y as _,cn as v,fr as y,ji as b,ka as x,ln as S,on as ee,sn as C}from"./search-ZaQmVnj1.js";import{n as te}from"./forms-C3pNy-qY.js";import{en as w}from"./index-BIuqxnJn.js";import{n as ne,r as re}from"./highlight-CKyEM4jx.js";import{_ as ie,c as ae,d as oe,f as se,g as ce,h as le,m as ue,p as de,u as fe}from"./ticket-editor-DL3nHG_q.js";var pe={name:`between-horizontal-end`,size:24,node:[[`rect`,{width:`13`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`11xb64`}],[`path`,{d:`m22 15-3-3 3-3`,key:`26chmm`}],[`rect`,{width:`13`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`k6ky7n`}]],aliases:[`between-horizonal-end`]};pe.node;var me=s(pe),he={name:`between-vertical-end`,size:24,node:[[`rect`,{width:`7`,height:`13`,x:`3`,y:`3`,rx:`1`,key:`1fdu0f`}],[`path`,{d:`m9 22 3-3 3 3`,key:`17z65a`}],[`rect`,{width:`7`,height:`13`,x:`14`,y:`3`,rx:`1`,key:`1squn4`}]]};he.node;var T=s(he),ge={name:`grid-2x2-x`,size:24,node:[[`path`,{d:`M12 3v17a1 1 0 0 1-1 1H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v6a1 1 0 0 1-1 1H3`,key:`11za1p`}],[`path`,{d:`m16.5 16.5 5 5`,key:`zc9lw7`}],[`path`,{d:`m16.5 21.5 5-5`,key:`1fr29m`}]],aliases:[`grid-2-x-2-x`]};ge.node;var _e=s(ge),ve={name:`table-columns-split`,size:24,node:[[`path`,{d:`M14 14v2`,key:`w2a1xv`}],[`path`,{d:`M14 20v2`,key:`1lq872`}],[`path`,{d:`M14 2v2`,key:`6buw04`}],[`path`,{d:`M14 8v2`,key:`i67w9a`}],[`path`,{d:`M2 15h8`,key:`82wtch`}],[`path`,{d:`M2 3h6a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2`,key:`up0l64`}],[`path`,{d:`M2 9h8`,key:`yelfik`}],[`path`,{d:`M22 15h-4`,key:`1es58f`}],[`path`,{d:`M22 3h-2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h2`,key:`pdjoqf`}],[`path`,{d:`M22 9h-4`,key:`1luja7`}],[`path`,{d:`M5 3v18`,key:`14hmio`}]]};ve.node;var ye=s(ve),be={name:`table-rows-split`,size:24,node:[[`path`,{d:`M14 10h2`,key:`1lstlu`}],[`path`,{d:`M15 22v-8`,key:`1fwwgm`}],[`path`,{d:`M15 2v4`,key:`1044rn`}],[`path`,{d:`M2 10h2`,key:`1r8dkt`}],[`path`,{d:`M20 10h2`,key:`1ug425`}],[`path`,{d:`M3 19h18`,key:`awlh7x`}],[`path`,{d:`M3 22v-6a2 2 135 0 1 2-2h14a2 2 45 0 1 2 2v6`,key:`ibqhof`}],[`path`,{d:`M3 2v2a2 2 45 0 0 2 2h14a2 2 135 0 0 2-2V2`,key:`1uenja`}],[`path`,{d:`M8 10h2`,key:`66od0`}],[`path`,{d:`M9 22v-8`,key:`fmnu31`}],[`path`,{d:`M9 2v4`,key:`j1yeou`}]]};be.node;var xe=s(be),Se={name:`table`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]};Se.node;var Ce=s(Se),we={name:`text-quote`,size:24,node:[[`path`,{d:`M17 5H3`,key:`1cn7zz`}],[`path`,{d:`M21 12H8`,key:`scolzb`}],[`path`,{d:`M21 19H8`,key:`13qgcb`}],[`path`,{d:`M3 12v7`,key:`1ri8j3`}]]};we.node;var Te=s(we),E=e(t(),1),Ee=e(m(),1),D=r(),De=a(),Oe=g();function ke(e){this.content=e}ke.prototype={constructor:ke,find:function(e){for(var t=0;t<this.content.length;t+=2)if(this.content[t]===e)return t;return-1},get:function(e){var t=this.find(e);return t==-1?void 0:this.content[t+1]},update:function(e,t,n){var r=n&&n!=e?this.remove(n):this,i=r.find(e),a=r.content.slice();return i==-1?a.push(n||e,t):(a[i+1]=t,n&&(a[i]=n)),new ke(a)},remove:function(e){var t=this.find(e);if(t==-1)return this;var n=this.content.slice();return n.splice(t,2),new ke(n)},addToStart:function(e,t){return new ke([e,t].concat(this.remove(e).content))},addToEnd:function(e,t){var n=this.remove(e).content.slice();return n.push(e,t),new ke(n)},addBefore:function(e,t,n){var r=this.remove(t),i=r.content.slice(),a=r.find(e);return i.splice(a==-1?i.length:a,0,t,n),new ke(i)},forEach:function(e){for(var t=0;t<this.content.length;t+=2)e(this.content[t],this.content[t+1])},prepend:function(e){return e=ke.from(e),e.size?new ke(e.content.concat(this.subtract(e).content)):this},append:function(e){return e=ke.from(e),e.size?new ke(this.subtract(e).content.concat(e.content)):this},subtract:function(e){var t=this;e=ke.from(e);for(var n=0;n<e.content.length;n+=2)t=t.remove(e.content[n]);return t},toObject:function(){var e={};return this.forEach(function(t,n){e[t]=n}),e},get size(){return this.content.length>>1}},ke.from=function(e){if(e instanceof ke)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new ke(t)};function Ae(e,t,n){for(let r=0;;r++){if(r==e.childCount||r==t.childCount)return e.childCount==t.childCount?null:n;let i=e.child(r),a=t.child(r);if(i==a)n+=i.nodeSize;else{if(!i.sameMarkup(a))return n;if(i.isText&&i.text!=a.text){let e=i.text,t=a.text,r=0;for(;e[r]==t[r];r++)n++;return r&&r<e.length&&r<t.length&&Ne(e.charCodeAt(r-1))&&Me(e.charCodeAt(r))&&n--,n}if(i.content.size||a.content.size){let e=Ae(i.content,a.content,n+1);if(e!=null)return e}n+=i.nodeSize}}}function je(e,t,n,r){for(let i=e.childCount,a=t.childCount;;){if(i==0||a==0)return i==a?null:{a:n,b:r};let o=e.child(--i),s=t.child(--a),c=o.nodeSize;if(o==s)n-=c,r-=c;else{if(!o.sameMarkup(s))return{a:n,b:r};if(o.isText&&o.text!=s.text){let e=o.text,t=s.text,i=e.length,a=t.length;for(;i>0&&a>0&&e[i-1]==t[a-1];)i--,a--,n--,r--;return i&&a&&i<e.length&&Ne(e.charCodeAt(i-1))&&Me(e.charCodeAt(i))&&(n++,r++),{a:n,b:r}}if(o.content.size||s.content.size){let e=je(o.content,s.content,n-1,r-1);if(e)return e}n-=c,r-=c}}}function Me(e){return e>=56320&&e<57344}function Ne(e){return e>=55296&&e<56320}var O=class e{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let t=0;t<e.length;t++)this.size+=e[t].nodeSize}nodesBetween(e,t,n,r=0,i){for(let a=0,o=0;o<t;a++){let s=this.content[a],c=o+s.nodeSize;if(c>e&&n(s,r+o,i||null,a)!==!1&&s.content.size){let i=o+1;s.nodesBetween(Math.max(0,e-i),Math.min(s.content.size,t-i),n,r+i)}o=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,n,r){let i=``,a=!0;return this.nodesBetween(e,t,(o,s)=>{let c=o.isText?o.text.slice(Math.max(e,s)-s,t-s):o.isLeaf?r?typeof r==`function`?r(o):r:o.type.spec.leafText?o.type.spec.leafText(o):``:``;o.isBlock&&(o.isLeaf&&c||o.isTextblock)&&n&&(a?a=!1:i+=n),i+=c},0),i}append(t){if(!t.size)return this;if(!this.size)return t;let n=this.lastChild,r=t.firstChild,i=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(r)&&(i[i.length-1]=n.withText(n.text+r.text),a=1);a<t.content.length;a++)i.push(t.content[a]);return new e(i,this.size+t.size)}cut(t,n=this.size){if(t==0&&n==this.size)return this;let r=[],i=0;if(n>t)for(let e=0,a=0;a<n;e++){let o=this.content[e],s=a+o.nodeSize;s>t&&((a<t||s>n)&&(o=o.isText?o.cut(Math.max(0,t-a),Math.min(o.text.length,n-a)):o.cut(Math.max(0,t-a-1),Math.min(o.content.size,n-a-1))),r.push(o),i+=o.nodeSize),a=s}return new e(r,i)}cutByIndex(t,n){return t==n?e.empty:t==0&&n==this.content.length?this:new e(this.content.slice(t,n))}replaceChild(t,n){let r=this.content[t];if(r==n)return this;let i=this.content.slice(),a=this.size+n.nodeSize-r.nodeSize;return i[t]=n,new e(i,a)}addToStart(t){return new e([t].concat(this.content),this.size+t.nodeSize)}addToEnd(t){return new e(this.content.concat(t),this.size+t.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;t<this.content.length;t++)if(!this.content[t].eq(e.content[t]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let t=this.content[e];if(!t)throw RangeError(`Index `+e+` out of range for `+this);return t}maybeChild(e){return this.content[e]||null}forEach(e){for(let t=0,n=0;t<this.content.length;t++){let r=this.content[t];e(r,n,t),n+=r.nodeSize}}findDiffStart(e,t=0){return Ae(this,e,t)}findDiffEnd(e,t=this.size,n=e.size){return je(this,e,t,n)}findIndex(e){if(e==0)return Fe(0,e);if(e==this.size)return Fe(this.content.length,e);if(e>this.size||e<0)throw RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,n=0;;t++){let r=this.child(t),i=n+r.nodeSize;if(i>=e)return i==e?Fe(t+1,i):Fe(t,n);n=i}}toString(){return`<`+this.toStringInner()+`>`}toStringInner(){return this.content.join(`, `)}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(t,n){if(!n)return e.empty;if(!Array.isArray(n))throw RangeError(`Invalid input for Fragment.fromJSON`);return e.fromArray(n.map(t.nodeFromJSON))}static fromArray(t){if(!t.length)return e.empty;let n,r=0;for(let e=0;e<t.length;e++){let i=t[e];r+=i.nodeSize,e&&i.isText&&t[e-1].sameMarkup(i)?(n||=t.slice(0,e),n[n.length-1]=i.withText(n[n.length-1].text+i.text)):n&&n.push(i)}return new e(n||t,r)}static from(t){if(!t)return e.empty;if(t instanceof e)return t;if(Array.isArray(t))return this.fromArray(t);if(t.attrs)return new e([t],t.nodeSize);throw RangeError(`Can not convert `+t+` to a Fragment`+(t.nodesBetween?` (looks like multiple versions of prosemirror-model were loaded)`:``))}};O.empty=new O([],0);var Pe={index:0,offset:0};function Fe(e,t){return Pe.index=e,Pe.offset=t,Pe}function Ie(e,t){if(e===t)return!0;if(!(e&&typeof e==`object`)||!(t&&typeof t==`object`))return!1;let n=Array.isArray(e);if(Array.isArray(t)!=n)return!1;if(n){if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!Ie(e[n],t[n]))return!1}else{for(let n in e)if(!(n in t)||!Ie(e[n],t[n]))return!1;for(let n in t)if(!(n in e))return!1}return!0}var k=class e{constructor(e,t){this.type=e,this.attrs=t}addToSet(e){let t,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(this.eq(i))return e;if(this.type.excludes(i.type))t||=e.slice(0,r);else if(i.type.excludes(this.type))return e;else!n&&i.type.rank>this.type.rank&&(t||=e.slice(0,r),t.push(this),n=!0),t&&t.push(i)}return t||=e.slice(),n||t.push(this),t}removeFromSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return e.slice(0,t).concat(e.slice(t+1));return e}isInSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return!0;return!1}eq(e){return this==e||this.type==e.type&&Ie(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Mark.fromJSON`);let n=e.marks[t.type];if(!n)throw RangeError(`There is no mark type ${t.type} in this schema`);return n.create(t.attrs)}static sameSet(e,t){if(e==t)return!0;if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}static setFrom(t){if(!t||Array.isArray(t)&&t.length==0)return e.none;if(t instanceof e)return[t];let n=t.slice();return n.sort((e,t)=>e.type.rank-t.type.rank),n}};k.none=[];var Le=class extends Error{},A=class e{constructor(e,t,n){this.content=e,this.openStart=t,this.openEnd=n}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(t,n){let r=ze(this.content,t+this.openStart,n,this.openStart+1,this.openEnd+1);return r&&new e(r,this.openStart,this.openEnd)}removeBetween(t,n){return new e(Re(this.content,t+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+`(`+this.openStart+`,`+this.openEnd+`)`}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(t,n){if(!n)return e.empty;let r=n.openStart||0,i=n.openEnd||0;if(typeof r!=`number`||typeof i!=`number`)throw RangeError(`Invalid input for Slice.fromJSON`);return new e(O.fromJSON(t,n.content),r,i)}static maxOpen(t,n=!0){let r=0,i=0;for(let e=t.firstChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.firstChild)r++;for(let e=t.lastChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.lastChild)i++;return new e(t,r,i)}};A.empty=new A(O.empty,0,0);function Re(e,t,n){let{index:r,offset:i}=e.findIndex(t),a=e.maybeChild(r),{index:o,offset:s}=e.findIndex(n);if(i==t||a.isText){if(s!=n&&!e.child(o).isText)throw RangeError(`Removing non-flat range`);return e.cut(0,t).append(e.cut(n))}if(r!=o)throw RangeError(`Removing non-flat range`);return e.replaceChild(r,a.copy(Re(a.content,t-i-1,n-i-1)))}function ze(e,t,n,r,i,a){let{index:o,offset:s}=e.findIndex(t),c=e.maybeChild(o);if(s==t||c.isText)return a&&r<=0&&i<=0&&!a.canReplace(o,o,n)?null:e.cut(0,t).append(n).append(e.cut(t));let l=ze(c.content,t-s-1,n,o==0?r-1:0,o==e.childCount-1?i-1:0,c);return l&&e.replaceChild(o,c.copy(l))}function Be(e,t,n){if(n.openStart>e.depth)throw new Le(`Inserted content deeper than insertion position`);if(e.depth-n.openStart!=t.depth-n.openEnd)throw new Le(`Inconsistent open depths`);return Ve(e,t,n,0)}function Ve(e,t,n,r){let i=e.index(r),a=e.node(r);if(i==t.index(r)&&r<e.depth-n.openStart){let o=Ve(e,t,n,r+1);return a.copy(a.content.replaceChild(i,o))}if(!n.content.size)return Ke(a,Je(e,t,r));if(!n.openStart&&!n.openEnd&&e.depth==r&&t.depth==r){let r=e.parent,i=r.content;return Ke(r,i.cut(0,e.parentOffset).append(n.content).append(i.cut(t.parentOffset)))}{let{start:i,end:o}=Ye(n,e);return Ke(a,qe(e,i,o,t,r))}}function He(e,t){if(!t.type.compatibleContent(e.type))throw new Le(`Cannot join `+t.type.name+` onto `+e.type.name)}function Ue(e,t,n){let r=e.node(n);return He(r,t.node(n)),r}function We(e,t){let n=t.length-1;n>=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function Ge(e,t,n,r){let i=(t||e).node(n),a=0,o=t?t.index(n):i.childCount;e&&(a=e.index(n),e.depth>n?a++:e.textOffset&&(We(e.nodeAfter,r),a++));for(let e=a;e<o;e++)We(i.child(e),r);t&&t.depth==n&&t.textOffset&&We(t.nodeBefore,r)}function Ke(e,t){if(!e.type.validContent(t))throw new Le(`Invalid content for node `+e.type.name);return e.copy(t)}function qe(e,t,n,r,i){let a=e.depth>i&&Ue(e,t,i+1),o=r.depth>i&&Ue(n,r,i+1),s=[];return Ge(null,e,i,s),a&&o&&t.index(i)==n.index(i)?(He(a,o),We(Ke(a,qe(e,t,n,r,i+1)),s)):(a&&We(Ke(a,Je(e,t,i+1)),s),Ge(t,n,i,s),o&&We(Ke(o,Je(n,r,i+1)),s)),Ge(r,null,i,s),new O(s)}function Je(e,t,n){let r=[];return Ge(null,e,n,r),e.depth>n&&We(Ke(Ue(e,t,n+1),Je(e,t,n+1)),r),Ge(t,null,n,r),new O(r)}function Ye(e,t){let n=t.depth-e.openStart,r=t.node(n).copy(e.content);for(let e=n-1;e>=0;e--)r=t.node(e).copy(O.from(r));return{start:r.resolveNoCache(e.openStart+n),end:r.resolveNoCache(r.content.size-e.openEnd-n)}}var Xe=class e{constructor(e,t,n){this.pos=e,this.path=t,this.parentOffset=n,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position before the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position after the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let n=this.pos-this.path[this.path.length-1],r=e.child(t);return n?e.child(t).cut(n):r}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let n=this.path[t*3],r=t==0?0:this.path[t*3-1]+1;for(let t=0;t<e;t++)r+=n.child(t).nodeSize;return r}marks(){let e=this.parent,t=this.index();if(e.content.size==0)return k.none;if(this.textOffset)return e.child(t).marks;let n=e.maybeChild(t-1),r=e.maybeChild(t);if(!n){let e=n;n=r,r=e}let i=n.marks;for(var a=0;a<i.length;a++)i[a].type.spec.inclusive===!1&&(!r||!i[a].isInSet(r.marks))&&(i=i[a--].removeFromSet(i));return i}marksAcross(e){let t=this.parent.maybeChild(this.index());if(!t||!t.isInline)return null;let n=t.marks,r=e.parent.maybeChild(e.index());for(var i=0;i<n.length;i++)n[i].type.spec.inclusive===!1&&(!r||!n[i].isInSet(r.marks))&&(n=n[i--].removeFromSet(n));return n}sharedDepth(e){for(let t=this.depth;t>0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos<this.pos)return e.blockRange(this);for(let n=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);n>=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new et(this,e,n);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e=``;for(let t=1;t<=this.depth;t++)e+=(e?`/`:``)+this.node(t).type.name+`_`+this.index(t-1);return e+`:`+this.parentOffset}static resolve(t,n){if(!(n>=0&&n<=t.content.size))throw RangeError(`Position `+n+` out of range`);let r=[],i=0,a=n;for(let e=t;;){let{index:t,offset:n}=e.content.findIndex(a),o=a-n;if(r.push(e,t,i+n),!o||(e=e.child(t),e.isText))break;a=o-1,i+=n+1}return new e(n,r,a)}static resolveCached(t,n){let r=$e.get(t);if(r)for(let e=0;e<r.elts.length;e++){let t=r.elts[e];if(t.pos==n)return t}else $e.set(t,r=new Ze);let i=r.elts[r.i]=e.resolve(t,n);return r.i=(r.i+1)%Qe,i}},Ze=class{constructor(){this.elts=[],this.i=0}},Qe=12,$e=new WeakMap,et=class{constructor(e,t,n){this.$from=e,this.$to=t,this.depth=n}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}},tt=Object.create(null),nt=class e{constructor(e,t,n,r=k.none){this.type=e,this.attrs=t,this.marks=r,this.content=n||O.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,t,n,r=0){this.content.nodesBetween(e,t,n,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,``)}textBetween(e,t,n,r){return this.content.textBetween(e,t,n,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,t,n){return this.type==e&&Ie(this.attrs,t||e.defaultAttrs||tt)&&k.sameSet(this.marks,n||k.none)}copy(t=null){return t==this.content?this:new e(this.type,this.attrs,t,this.marks)}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.content,t)}cut(e,t=this.content.size){return e==0&&t==this.content.size?this:this.copy(this.content.cut(e,t))}slice(e,t=this.content.size,n=!1){if(e==t)return A.empty;let r=this.resolve(e),i=this.resolve(t),a=n?0:r.sharedDepth(t),o=r.start(a);return new A(r.node(a).content.cut(r.pos-o,i.pos-o),r.depth-a,i.depth-a)}replace(e,t,n){return Be(this.resolve(e),this.resolve(t),n)}nodeAt(e){for(let t=this;;){let{index:n,offset:r}=t.content.findIndex(e);if(t=t.maybeChild(n),!t)return null;if(r==e||t.isText)return t;e-=r+1}}childAfter(e){let{index:t,offset:n}=this.content.findIndex(e);return{node:this.content.maybeChild(t),index:t,offset:n}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:t,offset:n}=this.content.findIndex(e);if(n<e)return{node:this.content.child(t),index:t,offset:n};let r=this.content.child(t-1);return{node:r,index:t-1,offset:n-r.nodeSize}}resolve(e){return Xe.resolveCached(this,e)}resolveNoCache(e){return Xe.resolve(this,e)}rangeHasMark(e,t,n){let r=!1;return t>e&&this.nodesBetween(e,t,e=>(n.isInSet(e.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=`(`+this.content.toStringInner()+`)`),it(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw Error(`Called contentMatchAt on a node with invalid content`);return t}canReplace(e,t,n=O.empty,r=0,i=n.childCount){let a=this.contentMatchAt(e).matchFragment(n,r,i),o=a&&a.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(let e=r;e<i;e++)if(!this.type.allowsMarks(n.child(e).marks))return!1;return!0}canReplaceWith(e,t,n,r){if(r&&!this.type.allowsMarks(r))return!1;let i=this.contentMatchAt(e).matchType(n),a=i&&i.matchFragment(this.content,t);return a?a.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),at(this.type.attrs,this.attrs,`node`,this.type.name);let e=k.none;for(let t=0;t<this.marks.length;t++){let n=this.marks[t];at(n.type.attrs,n.attrs,`mark`,n.type.name),e=n.addToSet(e)}if(!k.sameSet(e,this.marks))throw RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(e=>e.type.name)}`);this.content.forEach(e=>e.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(e=>e.toJSON())),e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Node.fromJSON`);let n;if(t.marks){if(!Array.isArray(t.marks))throw RangeError(`Invalid mark data for Node.fromJSON`);n=t.marks.map(e.markFromJSON)}if(t.type==`text`){if(typeof t.text!=`string`)throw RangeError(`Invalid text node in JSON`);return e.text(t.text,n)}let r=O.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,r,n)}};nt.prototype.text=void 0;var rt=class e extends nt{constructor(e,t,n,r){if(super(e,t,null,r),!n)throw RangeError(`Empty text nodes are not allowed`);this.text=n}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):it(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.text,t)}withText(t){return t==this.text?this:new e(this.type,this.attrs,t,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function it(e,t){for(let n=e.length-1;n>=0;n--)t=e[n].type.name+`(`+t+`)`;return t}function at(e,t,n,r){for(let i in t)if(!(i in e))throw RangeError(`Unsupported attribute ${i} for ${n} of type ${r}`);for(let n in e)e[n].validate&&e[n].validate(t[n])}var ot=class e{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(t,n){let r=new st(t,n);if(r.next==null)return e.empty;let i=ct(r);r.next&&r.err(`Unexpected trailing text`);let a=vt(ht(i));return yt(a,r),a}matchType(e){for(let t=0;t<this.next.length;t++)if(this.next[t].type==e)return this.next[t].next;return null}matchFragment(e,t=0,n=e.childCount){let r=this;for(let i=t;r&&i<n;i++)r=r.matchType(e.child(i).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:t}=this.next[e];if(!(t.isText||t.hasRequiredAttrs()))return t}return null}compatible(e){for(let t=0;t<this.next.length;t++)for(let n=0;n<e.next.length;n++)if(this.next[t].type==e.next[n].type)return!0;return!1}fillBefore(e,t=!1,n=0){let r=[this];function i(a,o){let s=a.matchFragment(e,n);if(s&&(!t||s.validEnd))return O.from(o.map(e=>e.createAndFill()));for(let e=0;e<a.next.length;e++){let{type:t,next:n}=a.next[e];if(!(t.isText||t.hasRequiredAttrs())&&r.indexOf(n)==-1){r.push(n);let e=i(n,o.concat(t));if(e)return e}}return null}return i(this,[])}findWrapping(e){for(let t=0;t<this.wrapCache.length;t+=2)if(this.wrapCache[t]==e)return this.wrapCache[t+1];let t=this.computeWrapping(e);return this.wrapCache.push(e,t),t}computeWrapping(e){let t=Object.create(null),n=[{match:this,type:null,via:null}];for(;n.length;){let r=n.shift(),i=r.match;if(i.matchType(e)){let e=[];for(let t=r;t.type;t=t.via)e.push(t.type);return e.reverse()}for(let e=0;e<i.next.length;e++){let{type:a,next:o}=i.next[e];!a.isLeaf&&!a.hasRequiredAttrs()&&!(a.name in t)&&(!r.type||o.validEnd)&&(n.push({match:a.contentMatch,type:a,via:r}),t[a.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(n){e.push(n);for(let r=0;r<n.next.length;r++)e.indexOf(n.next[r].next)==-1&&t(n.next[r].next)}return t(this),e.map((t,n)=>{let r=n+(t.validEnd?`*`:` `)+` `;for(let n=0;n<t.next.length;n++)r+=(n?`, `:``)+t.next[n].type.name+`->`+e.indexOf(t.next[n].next);return r}).join(`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{Nn as t,mn as n,r}from"./default-6QIAyMq2.js";import{Di as i,Ea as a,Ei as o,Ga as s,J as c,Ma as l,Mi as u,N as d,Ni as f,Oi as p,Oo as m,P as h,Ta as g,Y as _,cn as v,fr as y,ji as b,ka as x,ln as S,on as ee,sn as C}from"./search-B3-w3oCd.js";import{n as te}from"./forms-BbWAl0BZ.js";import{en as w}from"./index-2V6MWx63.js";import{n as ne,r as re}from"./highlight-Ds7xUUQv.js";import{_ as ie,c as ae,d as oe,f as se,g as ce,h as le,m as ue,p as de,u as fe}from"./ticket-editor-CLDBUk0n.js";var pe={name:`between-horizontal-end`,size:24,node:[[`rect`,{width:`13`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`11xb64`}],[`path`,{d:`m22 15-3-3 3-3`,key:`26chmm`}],[`rect`,{width:`13`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`k6ky7n`}]],aliases:[`between-horizonal-end`]};pe.node;var me=s(pe),he={name:`between-vertical-end`,size:24,node:[[`rect`,{width:`7`,height:`13`,x:`3`,y:`3`,rx:`1`,key:`1fdu0f`}],[`path`,{d:`m9 22 3-3 3 3`,key:`17z65a`}],[`rect`,{width:`7`,height:`13`,x:`14`,y:`3`,rx:`1`,key:`1squn4`}]]};he.node;var T=s(he),ge={name:`grid-2x2-x`,size:24,node:[[`path`,{d:`M12 3v17a1 1 0 0 1-1 1H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v6a1 1 0 0 1-1 1H3`,key:`11za1p`}],[`path`,{d:`m16.5 16.5 5 5`,key:`zc9lw7`}],[`path`,{d:`m16.5 21.5 5-5`,key:`1fr29m`}]],aliases:[`grid-2-x-2-x`]};ge.node;var _e=s(ge),ve={name:`table-columns-split`,size:24,node:[[`path`,{d:`M14 14v2`,key:`w2a1xv`}],[`path`,{d:`M14 20v2`,key:`1lq872`}],[`path`,{d:`M14 2v2`,key:`6buw04`}],[`path`,{d:`M14 8v2`,key:`i67w9a`}],[`path`,{d:`M2 15h8`,key:`82wtch`}],[`path`,{d:`M2 3h6a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H2`,key:`up0l64`}],[`path`,{d:`M2 9h8`,key:`yelfik`}],[`path`,{d:`M22 15h-4`,key:`1es58f`}],[`path`,{d:`M22 3h-2a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h2`,key:`pdjoqf`}],[`path`,{d:`M22 9h-4`,key:`1luja7`}],[`path`,{d:`M5 3v18`,key:`14hmio`}]]};ve.node;var ye=s(ve),be={name:`table-rows-split`,size:24,node:[[`path`,{d:`M14 10h2`,key:`1lstlu`}],[`path`,{d:`M15 22v-8`,key:`1fwwgm`}],[`path`,{d:`M15 2v4`,key:`1044rn`}],[`path`,{d:`M2 10h2`,key:`1r8dkt`}],[`path`,{d:`M20 10h2`,key:`1ug425`}],[`path`,{d:`M3 19h18`,key:`awlh7x`}],[`path`,{d:`M3 22v-6a2 2 135 0 1 2-2h14a2 2 45 0 1 2 2v6`,key:`ibqhof`}],[`path`,{d:`M3 2v2a2 2 45 0 0 2 2h14a2 2 135 0 0 2-2V2`,key:`1uenja`}],[`path`,{d:`M8 10h2`,key:`66od0`}],[`path`,{d:`M9 22v-8`,key:`fmnu31`}],[`path`,{d:`M9 2v4`,key:`j1yeou`}]]};be.node;var xe=s(be),Se={name:`table`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]};Se.node;var Ce=s(Se),we={name:`text-quote`,size:24,node:[[`path`,{d:`M17 5H3`,key:`1cn7zz`}],[`path`,{d:`M21 12H8`,key:`scolzb`}],[`path`,{d:`M21 19H8`,key:`13qgcb`}],[`path`,{d:`M3 12v7`,key:`1ri8j3`}]]};we.node;var Te=s(we),E=e(t(),1),Ee=e(m(),1),D=r(),De=a(),Oe=g();function ke(e){this.content=e}ke.prototype={constructor:ke,find:function(e){for(var t=0;t<this.content.length;t+=2)if(this.content[t]===e)return t;return-1},get:function(e){var t=this.find(e);return t==-1?void 0:this.content[t+1]},update:function(e,t,n){var r=n&&n!=e?this.remove(n):this,i=r.find(e),a=r.content.slice();return i==-1?a.push(n||e,t):(a[i+1]=t,n&&(a[i]=n)),new ke(a)},remove:function(e){var t=this.find(e);if(t==-1)return this;var n=this.content.slice();return n.splice(t,2),new ke(n)},addToStart:function(e,t){return new ke([e,t].concat(this.remove(e).content))},addToEnd:function(e,t){var n=this.remove(e).content.slice();return n.push(e,t),new ke(n)},addBefore:function(e,t,n){var r=this.remove(t),i=r.content.slice(),a=r.find(e);return i.splice(a==-1?i.length:a,0,t,n),new ke(i)},forEach:function(e){for(var t=0;t<this.content.length;t+=2)e(this.content[t],this.content[t+1])},prepend:function(e){return e=ke.from(e),e.size?new ke(e.content.concat(this.subtract(e).content)):this},append:function(e){return e=ke.from(e),e.size?new ke(this.subtract(e).content.concat(e.content)):this},subtract:function(e){var t=this;e=ke.from(e);for(var n=0;n<e.content.length;n+=2)t=t.remove(e.content[n]);return t},toObject:function(){var e={};return this.forEach(function(t,n){e[t]=n}),e},get size(){return this.content.length>>1}},ke.from=function(e){if(e instanceof ke)return e;var t=[];if(e)for(var n in e)t.push(n,e[n]);return new ke(t)};function Ae(e,t,n){for(let r=0;;r++){if(r==e.childCount||r==t.childCount)return e.childCount==t.childCount?null:n;let i=e.child(r),a=t.child(r);if(i==a)n+=i.nodeSize;else{if(!i.sameMarkup(a))return n;if(i.isText&&i.text!=a.text){let e=i.text,t=a.text,r=0;for(;e[r]==t[r];r++)n++;return r&&r<e.length&&r<t.length&&Ne(e.charCodeAt(r-1))&&Me(e.charCodeAt(r))&&n--,n}if(i.content.size||a.content.size){let e=Ae(i.content,a.content,n+1);if(e!=null)return e}n+=i.nodeSize}}}function je(e,t,n,r){for(let i=e.childCount,a=t.childCount;;){if(i==0||a==0)return i==a?null:{a:n,b:r};let o=e.child(--i),s=t.child(--a),c=o.nodeSize;if(o==s)n-=c,r-=c;else{if(!o.sameMarkup(s))return{a:n,b:r};if(o.isText&&o.text!=s.text){let e=o.text,t=s.text,i=e.length,a=t.length;for(;i>0&&a>0&&e[i-1]==t[a-1];)i--,a--,n--,r--;return i&&a&&i<e.length&&Ne(e.charCodeAt(i-1))&&Me(e.charCodeAt(i))&&(n++,r++),{a:n,b:r}}if(o.content.size||s.content.size){let e=je(o.content,s.content,n-1,r-1);if(e)return e}n-=c,r-=c}}}function Me(e){return e>=56320&&e<57344}function Ne(e){return e>=55296&&e<56320}var O=class e{constructor(e,t){if(this.content=e,this.size=t||0,t==null)for(let t=0;t<e.length;t++)this.size+=e[t].nodeSize}nodesBetween(e,t,n,r=0,i){for(let a=0,o=0;o<t;a++){let s=this.content[a],c=o+s.nodeSize;if(c>e&&n(s,r+o,i||null,a)!==!1&&s.content.size){let i=o+1;s.nodesBetween(Math.max(0,e-i),Math.min(s.content.size,t-i),n,r+i)}o=c}}descendants(e){this.nodesBetween(0,this.size,e)}textBetween(e,t,n,r){let i=``,a=!0;return this.nodesBetween(e,t,(o,s)=>{let c=o.isText?o.text.slice(Math.max(e,s)-s,t-s):o.isLeaf?r?typeof r==`function`?r(o):r:o.type.spec.leafText?o.type.spec.leafText(o):``:``;o.isBlock&&(o.isLeaf&&c||o.isTextblock)&&n&&(a?a=!1:i+=n),i+=c},0),i}append(t){if(!t.size)return this;if(!this.size)return t;let n=this.lastChild,r=t.firstChild,i=this.content.slice(),a=0;for(n.isText&&n.sameMarkup(r)&&(i[i.length-1]=n.withText(n.text+r.text),a=1);a<t.content.length;a++)i.push(t.content[a]);return new e(i,this.size+t.size)}cut(t,n=this.size){if(t==0&&n==this.size)return this;let r=[],i=0;if(n>t)for(let e=0,a=0;a<n;e++){let o=this.content[e],s=a+o.nodeSize;s>t&&((a<t||s>n)&&(o=o.isText?o.cut(Math.max(0,t-a),Math.min(o.text.length,n-a)):o.cut(Math.max(0,t-a-1),Math.min(o.content.size,n-a-1))),r.push(o),i+=o.nodeSize),a=s}return new e(r,i)}cutByIndex(t,n){return t==n?e.empty:t==0&&n==this.content.length?this:new e(this.content.slice(t,n))}replaceChild(t,n){let r=this.content[t];if(r==n)return this;let i=this.content.slice(),a=this.size+n.nodeSize-r.nodeSize;return i[t]=n,new e(i,a)}addToStart(t){return new e([t].concat(this.content),this.size+t.nodeSize)}addToEnd(t){return new e(this.content.concat(t),this.size+t.nodeSize)}eq(e){if(this.content.length!=e.content.length)return!1;for(let t=0;t<this.content.length;t++)if(!this.content[t].eq(e.content[t]))return!1;return!0}get firstChild(){return this.content.length?this.content[0]:null}get lastChild(){return this.content.length?this.content[this.content.length-1]:null}get childCount(){return this.content.length}child(e){let t=this.content[e];if(!t)throw RangeError(`Index `+e+` out of range for `+this);return t}maybeChild(e){return this.content[e]||null}forEach(e){for(let t=0,n=0;t<this.content.length;t++){let r=this.content[t];e(r,n,t),n+=r.nodeSize}}findDiffStart(e,t=0){return Ae(this,e,t)}findDiffEnd(e,t=this.size,n=e.size){return je(this,e,t,n)}findIndex(e){if(e==0)return Fe(0,e);if(e==this.size)return Fe(this.content.length,e);if(e>this.size||e<0)throw RangeError(`Position ${e} outside of fragment (${this})`);for(let t=0,n=0;;t++){let r=this.child(t),i=n+r.nodeSize;if(i>=e)return i==e?Fe(t+1,i):Fe(t,n);n=i}}toString(){return`<`+this.toStringInner()+`>`}toStringInner(){return this.content.join(`, `)}toJSON(){return this.content.length?this.content.map(e=>e.toJSON()):null}static fromJSON(t,n){if(!n)return e.empty;if(!Array.isArray(n))throw RangeError(`Invalid input for Fragment.fromJSON`);return e.fromArray(n.map(t.nodeFromJSON))}static fromArray(t){if(!t.length)return e.empty;let n,r=0;for(let e=0;e<t.length;e++){let i=t[e];r+=i.nodeSize,e&&i.isText&&t[e-1].sameMarkup(i)?(n||=t.slice(0,e),n[n.length-1]=i.withText(n[n.length-1].text+i.text)):n&&n.push(i)}return new e(n||t,r)}static from(t){if(!t)return e.empty;if(t instanceof e)return t;if(Array.isArray(t))return this.fromArray(t);if(t.attrs)return new e([t],t.nodeSize);throw RangeError(`Can not convert `+t+` to a Fragment`+(t.nodesBetween?` (looks like multiple versions of prosemirror-model were loaded)`:``))}};O.empty=new O([],0);var Pe={index:0,offset:0};function Fe(e,t){return Pe.index=e,Pe.offset=t,Pe}function Ie(e,t){if(e===t)return!0;if(!(e&&typeof e==`object`)||!(t&&typeof t==`object`))return!1;let n=Array.isArray(e);if(Array.isArray(t)!=n)return!1;if(n){if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!Ie(e[n],t[n]))return!1}else{for(let n in e)if(!(n in t)||!Ie(e[n],t[n]))return!1;for(let n in t)if(!(n in e))return!1}return!0}var k=class e{constructor(e,t){this.type=e,this.attrs=t}addToSet(e){let t,n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(this.eq(i))return e;if(this.type.excludes(i.type))t||=e.slice(0,r);else if(i.type.excludes(this.type))return e;else!n&&i.type.rank>this.type.rank&&(t||=e.slice(0,r),t.push(this),n=!0),t&&t.push(i)}return t||=e.slice(),n||t.push(this),t}removeFromSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return e.slice(0,t).concat(e.slice(t+1));return e}isInSet(e){for(let t=0;t<e.length;t++)if(this.eq(e[t]))return!0;return!1}eq(e){return this==e||this.type==e.type&&Ie(this.attrs,e.attrs)}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Mark.fromJSON`);let n=e.marks[t.type];if(!n)throw RangeError(`There is no mark type ${t.type} in this schema`);return n.create(t.attrs)}static sameSet(e,t){if(e==t)return!0;if(e.length!=t.length)return!1;for(let n=0;n<e.length;n++)if(!e[n].eq(t[n]))return!1;return!0}static setFrom(t){if(!t||Array.isArray(t)&&t.length==0)return e.none;if(t instanceof e)return[t];let n=t.slice();return n.sort((e,t)=>e.type.rank-t.type.rank),n}};k.none=[];var Le=class extends Error{},A=class e{constructor(e,t,n){this.content=e,this.openStart=t,this.openEnd=n}get size(){return this.content.size-this.openStart-this.openEnd}insertAt(t,n){let r=ze(this.content,t+this.openStart,n,this.openStart+1,this.openEnd+1);return r&&new e(r,this.openStart,this.openEnd)}removeBetween(t,n){return new e(Re(this.content,t+this.openStart,n+this.openStart),this.openStart,this.openEnd)}eq(e){return this.content.eq(e.content)&&this.openStart==e.openStart&&this.openEnd==e.openEnd}toString(){return this.content+`(`+this.openStart+`,`+this.openEnd+`)`}toJSON(){if(!this.content.size)return null;let e={content:this.content.toJSON()};return this.openStart>0&&(e.openStart=this.openStart),this.openEnd>0&&(e.openEnd=this.openEnd),e}static fromJSON(t,n){if(!n)return e.empty;let r=n.openStart||0,i=n.openEnd||0;if(typeof r!=`number`||typeof i!=`number`)throw RangeError(`Invalid input for Slice.fromJSON`);return new e(O.fromJSON(t,n.content),r,i)}static maxOpen(t,n=!0){let r=0,i=0;for(let e=t.firstChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.firstChild)r++;for(let e=t.lastChild;e&&!e.isLeaf&&(n||!e.type.spec.isolating);e=e.lastChild)i++;return new e(t,r,i)}};A.empty=new A(O.empty,0,0);function Re(e,t,n){let{index:r,offset:i}=e.findIndex(t),a=e.maybeChild(r),{index:o,offset:s}=e.findIndex(n);if(i==t||a.isText){if(s!=n&&!e.child(o).isText)throw RangeError(`Removing non-flat range`);return e.cut(0,t).append(e.cut(n))}if(r!=o)throw RangeError(`Removing non-flat range`);return e.replaceChild(r,a.copy(Re(a.content,t-i-1,n-i-1)))}function ze(e,t,n,r,i,a){let{index:o,offset:s}=e.findIndex(t),c=e.maybeChild(o);if(s==t||c.isText)return a&&r<=0&&i<=0&&!a.canReplace(o,o,n)?null:e.cut(0,t).append(n).append(e.cut(t));let l=ze(c.content,t-s-1,n,o==0?r-1:0,o==e.childCount-1?i-1:0,c);return l&&e.replaceChild(o,c.copy(l))}function Be(e,t,n){if(n.openStart>e.depth)throw new Le(`Inserted content deeper than insertion position`);if(e.depth-n.openStart!=t.depth-n.openEnd)throw new Le(`Inconsistent open depths`);return Ve(e,t,n,0)}function Ve(e,t,n,r){let i=e.index(r),a=e.node(r);if(i==t.index(r)&&r<e.depth-n.openStart){let o=Ve(e,t,n,r+1);return a.copy(a.content.replaceChild(i,o))}if(!n.content.size)return Ke(a,Je(e,t,r));if(!n.openStart&&!n.openEnd&&e.depth==r&&t.depth==r){let r=e.parent,i=r.content;return Ke(r,i.cut(0,e.parentOffset).append(n.content).append(i.cut(t.parentOffset)))}{let{start:i,end:o}=Ye(n,e);return Ke(a,qe(e,i,o,t,r))}}function He(e,t){if(!t.type.compatibleContent(e.type))throw new Le(`Cannot join `+t.type.name+` onto `+e.type.name)}function Ue(e,t,n){let r=e.node(n);return He(r,t.node(n)),r}function We(e,t){let n=t.length-1;n>=0&&e.isText&&e.sameMarkup(t[n])?t[n]=e.withText(t[n].text+e.text):t.push(e)}function Ge(e,t,n,r){let i=(t||e).node(n),a=0,o=t?t.index(n):i.childCount;e&&(a=e.index(n),e.depth>n?a++:e.textOffset&&(We(e.nodeAfter,r),a++));for(let e=a;e<o;e++)We(i.child(e),r);t&&t.depth==n&&t.textOffset&&We(t.nodeBefore,r)}function Ke(e,t){if(!e.type.validContent(t))throw new Le(`Invalid content for node `+e.type.name);return e.copy(t)}function qe(e,t,n,r,i){let a=e.depth>i&&Ue(e,t,i+1),o=r.depth>i&&Ue(n,r,i+1),s=[];return Ge(null,e,i,s),a&&o&&t.index(i)==n.index(i)?(He(a,o),We(Ke(a,qe(e,t,n,r,i+1)),s)):(a&&We(Ke(a,Je(e,t,i+1)),s),Ge(t,n,i,s),o&&We(Ke(o,Je(n,r,i+1)),s)),Ge(r,null,i,s),new O(s)}function Je(e,t,n){let r=[];return Ge(null,e,n,r),e.depth>n&&We(Ke(Ue(e,t,n+1),Je(e,t,n+1)),r),Ge(t,null,n,r),new O(r)}function Ye(e,t){let n=t.depth-e.openStart,r=t.node(n).copy(e.content);for(let e=n-1;e>=0;e--)r=t.node(e).copy(O.from(r));return{start:r.resolveNoCache(e.openStart+n),end:r.resolveNoCache(r.content.size-e.openEnd-n)}}var Xe=class e{constructor(e,t,n){this.pos=e,this.path=t,this.parentOffset=n,this.depth=t.length/3-1}resolveDepth(e){return e==null?this.depth:e<0?this.depth+e:e}get parent(){return this.node(this.depth)}get doc(){return this.node(0)}node(e){return this.path[this.resolveDepth(e)*3]}index(e){return this.path[this.resolveDepth(e)*3+1]}indexAfter(e){return e=this.resolveDepth(e),this.index(e)+(e==this.depth&&!this.textOffset?0:1)}start(e){return e=this.resolveDepth(e),e==0?0:this.path[e*3-1]+1}end(e){return e=this.resolveDepth(e),this.start(e)+this.node(e).content.size}before(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position before the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]}after(e){if(e=this.resolveDepth(e),!e)throw RangeError(`There is no position after the top-level node`);return e==this.depth+1?this.pos:this.path[e*3-1]+this.path[e*3].nodeSize}get textOffset(){return this.pos-this.path[this.path.length-1]}get nodeAfter(){let e=this.parent,t=this.index(this.depth);if(t==e.childCount)return null;let n=this.pos-this.path[this.path.length-1],r=e.child(t);return n?e.child(t).cut(n):r}get nodeBefore(){let e=this.index(this.depth),t=this.pos-this.path[this.path.length-1];return t?this.parent.child(e).cut(0,t):e==0?null:this.parent.child(e-1)}posAtIndex(e,t){t=this.resolveDepth(t);let n=this.path[t*3],r=t==0?0:this.path[t*3-1]+1;for(let t=0;t<e;t++)r+=n.child(t).nodeSize;return r}marks(){let e=this.parent,t=this.index();if(e.content.size==0)return k.none;if(this.textOffset)return e.child(t).marks;let n=e.maybeChild(t-1),r=e.maybeChild(t);if(!n){let e=n;n=r,r=e}let i=n.marks;for(var a=0;a<i.length;a++)i[a].type.spec.inclusive===!1&&(!r||!i[a].isInSet(r.marks))&&(i=i[a--].removeFromSet(i));return i}marksAcross(e){let t=this.parent.maybeChild(this.index());if(!t||!t.isInline)return null;let n=t.marks,r=e.parent.maybeChild(e.index());for(var i=0;i<n.length;i++)n[i].type.spec.inclusive===!1&&(!r||!n[i].isInSet(r.marks))&&(n=n[i--].removeFromSet(n));return n}sharedDepth(e){for(let t=this.depth;t>0;t--)if(this.start(t)<=e&&this.end(t)>=e)return t;return 0}blockRange(e=this,t){if(e.pos<this.pos)return e.blockRange(this);for(let n=this.depth-(this.parent.inlineContent||this.pos==e.pos?1:0);n>=0;n--)if(e.pos<=this.end(n)&&(!t||t(this.node(n))))return new et(this,e,n);return null}sameParent(e){return this.pos-this.parentOffset==e.pos-e.parentOffset}max(e){return e.pos>this.pos?e:this}min(e){return e.pos<this.pos?e:this}toString(){let e=``;for(let t=1;t<=this.depth;t++)e+=(e?`/`:``)+this.node(t).type.name+`_`+this.index(t-1);return e+`:`+this.parentOffset}static resolve(t,n){if(!(n>=0&&n<=t.content.size))throw RangeError(`Position `+n+` out of range`);let r=[],i=0,a=n;for(let e=t;;){let{index:t,offset:n}=e.content.findIndex(a),o=a-n;if(r.push(e,t,i+n),!o||(e=e.child(t),e.isText))break;a=o-1,i+=n+1}return new e(n,r,a)}static resolveCached(t,n){let r=$e.get(t);if(r)for(let e=0;e<r.elts.length;e++){let t=r.elts[e];if(t.pos==n)return t}else $e.set(t,r=new Ze);let i=r.elts[r.i]=e.resolve(t,n);return r.i=(r.i+1)%Qe,i}},Ze=class{constructor(){this.elts=[],this.i=0}},Qe=12,$e=new WeakMap,et=class{constructor(e,t,n){this.$from=e,this.$to=t,this.depth=n}get start(){return this.$from.before(this.depth+1)}get end(){return this.$to.after(this.depth+1)}get parent(){return this.$from.node(this.depth)}get startIndex(){return this.$from.index(this.depth)}get endIndex(){return this.$to.indexAfter(this.depth)}},tt=Object.create(null),nt=class e{constructor(e,t,n,r=k.none){this.type=e,this.attrs=t,this.marks=r,this.content=n||O.empty}get children(){return this.content.content}get nodeSize(){return this.isLeaf?1:2+this.content.size}get childCount(){return this.content.childCount}child(e){return this.content.child(e)}maybeChild(e){return this.content.maybeChild(e)}forEach(e){this.content.forEach(e)}nodesBetween(e,t,n,r=0){this.content.nodesBetween(e,t,n,r,this)}descendants(e){this.nodesBetween(0,this.content.size,e)}get textContent(){return this.isLeaf&&this.type.spec.leafText?this.type.spec.leafText(this):this.textBetween(0,this.content.size,``)}textBetween(e,t,n,r){return this.content.textBetween(e,t,n,r)}get firstChild(){return this.content.firstChild}get lastChild(){return this.content.lastChild}eq(e){return this==e||this.sameMarkup(e)&&this.content.eq(e.content)}sameMarkup(e){return this.hasMarkup(e.type,e.attrs,e.marks)}hasMarkup(e,t,n){return this.type==e&&Ie(this.attrs,t||e.defaultAttrs||tt)&&k.sameSet(this.marks,n||k.none)}copy(t=null){return t==this.content?this:new e(this.type,this.attrs,t,this.marks)}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.content,t)}cut(e,t=this.content.size){return e==0&&t==this.content.size?this:this.copy(this.content.cut(e,t))}slice(e,t=this.content.size,n=!1){if(e==t)return A.empty;let r=this.resolve(e),i=this.resolve(t),a=n?0:r.sharedDepth(t),o=r.start(a);return new A(r.node(a).content.cut(r.pos-o,i.pos-o),r.depth-a,i.depth-a)}replace(e,t,n){return Be(this.resolve(e),this.resolve(t),n)}nodeAt(e){for(let t=this;;){let{index:n,offset:r}=t.content.findIndex(e);if(t=t.maybeChild(n),!t)return null;if(r==e||t.isText)return t;e-=r+1}}childAfter(e){let{index:t,offset:n}=this.content.findIndex(e);return{node:this.content.maybeChild(t),index:t,offset:n}}childBefore(e){if(e==0)return{node:null,index:0,offset:0};let{index:t,offset:n}=this.content.findIndex(e);if(n<e)return{node:this.content.child(t),index:t,offset:n};let r=this.content.child(t-1);return{node:r,index:t-1,offset:n-r.nodeSize}}resolve(e){return Xe.resolveCached(this,e)}resolveNoCache(e){return Xe.resolve(this,e)}rangeHasMark(e,t,n){let r=!1;return t>e&&this.nodesBetween(e,t,e=>(n.isInSet(e.marks)&&(r=!0),!r)),r}get isBlock(){return this.type.isBlock}get isTextblock(){return this.type.isTextblock}get inlineContent(){return this.type.inlineContent}get isInline(){return this.type.isInline}get isText(){return this.type.isText}get isLeaf(){return this.type.isLeaf}get isAtom(){return this.type.isAtom}toString(){if(this.type.spec.toDebugString)return this.type.spec.toDebugString(this);let e=this.type.name;return this.content.size&&(e+=`(`+this.content.toStringInner()+`)`),it(this.marks,e)}contentMatchAt(e){let t=this.type.contentMatch.matchFragment(this.content,0,e);if(!t)throw Error(`Called contentMatchAt on a node with invalid content`);return t}canReplace(e,t,n=O.empty,r=0,i=n.childCount){let a=this.contentMatchAt(e).matchFragment(n,r,i),o=a&&a.matchFragment(this.content,t);if(!o||!o.validEnd)return!1;for(let e=r;e<i;e++)if(!this.type.allowsMarks(n.child(e).marks))return!1;return!0}canReplaceWith(e,t,n,r){if(r&&!this.type.allowsMarks(r))return!1;let i=this.contentMatchAt(e).matchType(n),a=i&&i.matchFragment(this.content,t);return a?a.validEnd:!1}canAppend(e){return e.content.size?this.canReplace(this.childCount,this.childCount,e.content):this.type.compatibleContent(e.type)}check(){this.type.checkContent(this.content),at(this.type.attrs,this.attrs,`node`,this.type.name);let e=k.none;for(let t=0;t<this.marks.length;t++){let n=this.marks[t];at(n.type.attrs,n.attrs,`mark`,n.type.name),e=n.addToSet(e)}if(!k.sameSet(e,this.marks))throw RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(e=>e.type.name)}`);this.content.forEach(e=>e.check())}toJSON(){let e={type:this.type.name};for(let t in this.attrs){e.attrs=this.attrs;break}return this.content.size&&(e.content=this.content.toJSON()),this.marks.length&&(e.marks=this.marks.map(e=>e.toJSON())),e}static fromJSON(e,t){if(!t)throw RangeError(`Invalid input for Node.fromJSON`);let n;if(t.marks){if(!Array.isArray(t.marks))throw RangeError(`Invalid mark data for Node.fromJSON`);n=t.marks.map(e.markFromJSON)}if(t.type==`text`){if(typeof t.text!=`string`)throw RangeError(`Invalid text node in JSON`);return e.text(t.text,n)}let r=O.fromJSON(e,t.content);return e.nodeType(t.type).create(t.attrs,r,n)}};nt.prototype.text=void 0;var rt=class e extends nt{constructor(e,t,n,r){if(super(e,t,null,r),!n)throw RangeError(`Empty text nodes are not allowed`);this.text=n}toString(){return this.type.spec.toDebugString?this.type.spec.toDebugString(this):it(this.marks,JSON.stringify(this.text))}get textContent(){return this.text}textBetween(e,t){return this.text.slice(e,t)}get nodeSize(){return this.text.length}mark(t){return t==this.marks?this:new e(this.type,this.attrs,this.text,t)}withText(t){return t==this.text?this:new e(this.type,this.attrs,t,this.marks)}cut(e=0,t=this.text.length){return e==0&&t==this.text.length?this:this.withText(this.text.slice(e,t))}eq(e){return this.sameMarkup(e)&&this.text==e.text}toJSON(){let e=super.toJSON();return e.text=this.text,e}};function it(e,t){for(let n=e.length-1;n>=0;n--)t=e[n].type.name+`(`+t+`)`;return t}function at(e,t,n,r){for(let i in t)if(!(i in e))throw RangeError(`Unsupported attribute ${i} for ${n} of type ${r}`);for(let n in e)e[n].validate&&e[n].validate(t[n])}var ot=class e{constructor(e){this.validEnd=e,this.next=[],this.wrapCache=[]}static parse(t,n){let r=new st(t,n);if(r.next==null)return e.empty;let i=ct(r);r.next&&r.err(`Unexpected trailing text`);let a=vt(ht(i));return yt(a,r),a}matchType(e){for(let t=0;t<this.next.length;t++)if(this.next[t].type==e)return this.next[t].next;return null}matchFragment(e,t=0,n=e.childCount){let r=this;for(let i=t;r&&i<n;i++)r=r.matchType(e.child(i).type);return r}get inlineContent(){return this.next.length!=0&&this.next[0].type.isInline}get defaultType(){for(let e=0;e<this.next.length;e++){let{type:t}=this.next[e];if(!(t.isText||t.hasRequiredAttrs()))return t}return null}compatible(e){for(let t=0;t<this.next.length;t++)for(let n=0;n<e.next.length;n++)if(this.next[t].type==e.next[n].type)return!0;return!1}fillBefore(e,t=!1,n=0){let r=[this];function i(a,o){let s=a.matchFragment(e,n);if(s&&(!t||s.validEnd))return O.from(o.map(e=>e.createAndFill()));for(let e=0;e<a.next.length;e++){let{type:t,next:n}=a.next[e];if(!(t.isText||t.hasRequiredAttrs())&&r.indexOf(n)==-1){r.push(n);let e=i(n,o.concat(t));if(e)return e}}return null}return i(this,[])}findWrapping(e){for(let t=0;t<this.wrapCache.length;t+=2)if(this.wrapCache[t]==e)return this.wrapCache[t+1];let t=this.computeWrapping(e);return this.wrapCache.push(e,t),t}computeWrapping(e){let t=Object.create(null),n=[{match:this,type:null,via:null}];for(;n.length;){let r=n.shift(),i=r.match;if(i.matchType(e)){let e=[];for(let t=r;t.type;t=t.via)e.push(t.type);return e.reverse()}for(let e=0;e<i.next.length;e++){let{type:a,next:o}=i.next[e];!a.isLeaf&&!a.hasRequiredAttrs()&&!(a.name in t)&&(!r.type||o.validEnd)&&(n.push({match:a.contentMatch,type:a,via:r}),t[a.name]=!0)}}return null}get edgeCount(){return this.next.length}edge(e){if(e>=this.next.length)throw RangeError(`There's no ${e}th edge in this content match`);return this.next[e]}toString(){let e=[];function t(n){e.push(n);for(let r=0;r<n.next.length;r++)e.indexOf(n.next[r].next)==-1&&t(n.next[r].next)}return t(this),e.map((t,n)=>{let r=n+(t.validEnd?`*`:` `)+` `;for(let n=0;n<t.next.length;n++)r+=(n?`, `:``)+t.next[n].type.name+`->`+e.indexOf(t.next[n].next);return r}).join(`
|
|
2
2
|
`)}};ot.empty=new ot(!0);var st=class{constructor(e,t){this.string=e,this.nodeTypes=t,this.inline=null,this.pos=0,this.tokens=e.split(/\s*(?=\b|\W|$)/),this.tokens[this.tokens.length-1]==``&&this.tokens.pop(),this.tokens[0]==``&&this.tokens.shift()}get next(){return this.tokens[this.pos]}eat(e){return this.next==e&&(this.pos++||!0)}err(e){throw SyntaxError(e+` (in content expression '`+this.string+`')`)}};function ct(e){let t=[];do t.push(lt(e));while(e.eat(`|`));return t.length==1?t[0]:{type:`choice`,exprs:t}}function lt(e){let t=[];do t.push(ut(e));while(e.next&&e.next!=`)`&&e.next!=`|`);return t.length==1?t[0]:{type:`seq`,exprs:t}}function ut(e){let t=mt(e);for(;;)if(e.eat(`+`))t={type:`plus`,expr:t};else if(e.eat(`*`))t={type:`star`,expr:t};else if(e.eat(`?`))t={type:`opt`,expr:t};else if(e.eat(`{`))t=ft(e,t);else break;return t}function dt(e){/\D/.test(e.next)&&e.err(`Expected number, got '`+e.next+`'`);let t=Number(e.next);return e.pos++,t}function ft(e,t){let n=dt(e),r=n;return e.eat(`,`)&&(r=e.next==`}`?-1:dt(e)),e.eat(`}`)||e.err(`Unclosed braced range`),{type:`range`,min:n,max:r,expr:t}}function pt(e,t){let n=e.nodeTypes,r=n[t];if(r)return[r];let i=[];for(let e in n){let r=n[e];r.isInGroup(t)&&i.push(r)}return i.length==0&&e.err(`No node type or group '`+t+`' found`),i}function mt(e){if(e.eat(`(`)){let t=ct(e);return e.eat(`)`)||e.err(`Missing closing paren`),t}if(/\W/.test(e.next))e.err(`Unexpected token '`+e.next+`'`);else{let t=pt(e,e.next).map(t=>(e.inline==null?e.inline=t.isInline:e.inline!=t.isInline&&e.err(`Mixing inline and block content`),{type:`name`,value:t}));return e.pos++,t.length==1?t[0]:{type:`choice`,exprs:t}}}function ht(e){let t=[[]];return i(a(e,0),n()),t;function n(){return t.push([])-1}function r(e,n,r){let i={term:r,to:n};return t[e].push(i),i}function i(e,t){e.forEach(e=>e.to=t)}function a(e,t){if(e.type==`choice`)return e.exprs.reduce((e,n)=>e.concat(a(n,t)),[]);if(e.type==`seq`)for(let r=0;;r++){let o=a(e.exprs[r],t);if(r==e.exprs.length-1)return o;i(o,t=n())}else if(e.type==`star`){let o=n();return r(t,o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`plus`){let o=n();return i(a(e.expr,t),o),i(a(e.expr,o),o),[r(o)]}else if(e.type==`opt`)return[r(t)].concat(a(e.expr,t));else if(e.type==`range`){let o=t;for(let t=0;t<e.min;t++){let t=n();i(a(e.expr,o),t),o=t}if(e.max==-1)i(a(e.expr,o),o);else for(let t=e.min;t<e.max;t++){let t=n();r(o,t),i(a(e.expr,o),t),o=t}return[r(o)]}else if(e.type==`name`)return[r(t,void 0,e.value)];else throw Error(`Unknown expr type`)}}function gt(e,t){return t-e}function _t(e,t){let n=[];return r(t),n.sort(gt);function r(t){let i=e[t];if(i.length==1&&!i[0].term)return r(i[0].to);n.push(t);for(let e=0;e<i.length;e++){let{term:t,to:a}=i[e];!t&&n.indexOf(a)==-1&&r(a)}}}function vt(e){let t=Object.create(null);return n(_t(e,0));function n(r){let i=[];r.forEach(t=>{e[t].forEach(({term:t,to:n})=>{if(!t)return;let r;for(let e=0;e<i.length;e++)i[e][0]==t&&(r=i[e][1]);_t(e,n).forEach(e=>{r||i.push([t,r=[]]),r.indexOf(e)==-1&&r.push(e)})})});let a=t[r.join(`,`)]=new ot(r.indexOf(e.length-1)>-1);for(let e=0;e<i.length;e++){let r=i[e][1].sort(gt);a.next.push({type:i[e][0],next:t[r.join(`,`)]||n(r)})}return a}}function yt(e,t){for(let n=0,r=[e];n<r.length;n++){let e=r[n],i=!e.validEnd,a=[];for(let t=0;t<e.next.length;t++){let{type:n,next:o}=e.next[t];a.push(n.name),i&&!(n.isText||n.hasRequiredAttrs())&&(i=!1),r.indexOf(o)==-1&&r.push(o)}i&&t.err(`Only non-generatable nodes (`+a.join(`, `)+`) in a required position (see https://prosemirror.net/docs/guide/#generatable)`)}}function bt(e){let t=Object.create(null);for(let n in e){let r=e[n];if(!r.hasDefault)return null;t[n]=r.default}return t}function xt(e,t){let n=Object.create(null);for(let r in e){let i=e[r],a=t&&t[r];if(a===void 0){if(i.hasDefault)a=i.default;else throw RangeError(`No value supplied for attribute `+r)}else i.validate&&i.validate(a);n[r]=a}return n}function St(e,t){let n=Object.create(null);if(t)for(let r in t)n[r]=new Tt(e,r,t[r]);return n}var Ct=class e{constructor(e,t,n){this.name=e,this.schema=t,this.spec=n,this.markSet=null,this.groups=n.group?n.group.split(` `):[],this.attrs=St(e,n.attrs),this.defaultAttrs=bt(this.attrs),this.contentMatch=null,this.inlineContent=null,this.isBlock=!(n.inline||e==`text`),this.isText=e==`text`}get isInline(){return!this.isBlock}get isTextblock(){return this.isBlock&&this.inlineContent}get isLeaf(){return this.contentMatch==ot.empty}get isAtom(){return this.isLeaf||!!this.spec.atom}isInGroup(e){return this.groups.indexOf(e)>-1}get whitespace(){return this.spec.whitespace||(this.spec.code?`pre`:`normal`)}hasRequiredAttrs(){for(let e in this.attrs)if(this.attrs[e].isRequired)return!0;return!1}compatibleContent(e){return this==e||this.contentMatch.compatible(e.contentMatch)}computeAttrs(e){return!e&&this.defaultAttrs?this.defaultAttrs:xt(this.attrs,e)}create(e=null,t,n){if(this.isText)throw Error(`NodeType.create can't construct text nodes`);return new nt(this,this.computeAttrs(e),O.from(t),k.setFrom(n))}createChecked(e=null,t,n){return t=O.from(t),this.checkContent(t),new nt(this,this.computeAttrs(e),t,k.setFrom(n))}createAndFill(e=null,t,n){if(e=this.computeAttrs(e),t=O.from(t),t.size){let e=this.contentMatch.fillBefore(t);if(!e)return null;t=e.append(t)}let r=this.contentMatch.matchFragment(t),i=r&&r.fillBefore(O.empty,!0);return i?new nt(this,e,t.append(i),k.setFrom(n)):null}validContent(e){let t=this.contentMatch.matchFragment(e);if(!t||!t.validEnd)return!1;for(let t=0;t<e.childCount;t++)if(!this.allowsMarks(e.child(t).marks))return!1;return!0}checkContent(e){if(!this.validContent(e))throw RangeError(`Invalid content for node ${this.name}: ${e.toString().slice(0,50)}`)}checkAttrs(e){}allowsMarkType(e){return this.markSet==null||this.markSet.indexOf(e)>-1}allowsMarks(e){if(this.markSet==null)return!0;for(let t=0;t<e.length;t++)if(!this.allowsMarkType(e[t].type))return!1;return!0}allowedMarks(e){if(this.markSet==null)return e;let t;for(let n=0;n<e.length;n++)this.allowsMarkType(e[n].type)?t&&t.push(e[n]):t||=e.slice(0,n);return t?t.length?t:k.none:e}static compile(t,n){let r=Object.create(null);t.forEach((t,i)=>r[t]=new e(t,n,i));let i=n.spec.topNode||`doc`;if(!r[i])throw RangeError(`Schema is missing its top node type ('`+i+`')`);if(!r.text)throw RangeError(`Every schema needs a 'text' type`);for(let e in r.text.attrs)throw RangeError(`The text node type should not have attributes`);return r}};function wt(e,t,n){let r=n.split(`|`);return n=>{let i=n===null?`null`:typeof n;if(r.indexOf(i)<0)throw RangeError(`Expected value of type ${r} for attribute ${t} on type ${e}, got ${i}`)}}var Tt=class{constructor(e,t,n){this.hasDefault=Object.prototype.hasOwnProperty.call(n,`default`),this.default=n.default,this.validate=typeof n.validate==`string`?wt(e,t,n.validate):n.validate}get isRequired(){return!this.hasDefault}},Et=class e{constructor(e,t,n,r){this.name=e,this.rank=t,this.schema=n,this.spec=r,this.attrs=St(e,r.attrs),this.excluded=null;let i=bt(this.attrs);this.instance=i?new k(this,i):null}create(e=null){return!e&&this.instance?this.instance:new k(this,xt(this.attrs,e))}static compile(t,n){let r=Object.create(null),i=0;return t.forEach((t,a)=>r[t]=new e(t,i++,n,a)),r}removeFromSet(e){for(var t=0;t<e.length;t++)e[t].type==this&&(e=e.slice(0,t).concat(e.slice(t+1)),t--);return e}isInSet(e){for(let t=0;t<e.length;t++)if(e[t].type==this)return e[t]}excludes(e){return this.excluded.indexOf(e)>-1}},Dt=class{constructor(e){this.linebreakReplacement=null,this.cached=Object.create(null);let t=this.spec={};for(let n in e)t[n]=e[n];t.nodes=ke.from(e.nodes),t.marks=ke.from(e.marks||{}),this.nodes=Ct.compile(this.spec.nodes,this),this.marks=Et.compile(this.spec.marks,this);let n=Object.create(null);for(let e in this.nodes){if(e in this.marks)throw RangeError(e+` can not be both a node and a mark`);let t=this.nodes[e],r=t.spec.content||``,i=t.spec.marks;if(t.contentMatch=n[r]||(n[r]=ot.parse(r,this.nodes)),t.inlineContent=t.contentMatch.inlineContent,t.spec.linebreakReplacement){if(this.linebreakReplacement)throw RangeError(`Multiple linebreak nodes defined`);if(!t.isInline||!t.isLeaf)throw RangeError(`Linebreak replacement nodes must be inline leaf nodes`);this.linebreakReplacement=t}t.markSet=i==`_`?null:i?Ot(this,i.split(` `)):i==``||!t.inlineContent?[]:null}for(let e in this.marks){let t=this.marks[e],n=t.spec.excludes;t.excluded=n==null?[t]:n==``?[]:Ot(this,n.split(` `))}this.nodeFromJSON=e=>nt.fromJSON(this,e),this.markFromJSON=e=>k.fromJSON(this,e),this.topNodeType=this.nodes[this.spec.topNode||`doc`],this.cached.wrappings=Object.create(null)}node(e,t=null,n,r){if(typeof e==`string`)e=this.nodeType(e);else if(!(e instanceof Ct))throw RangeError(`Invalid node type: `+e);else if(e.schema!=this)throw RangeError(`Node type from different schema used (`+e.name+`)`);return e.createChecked(t,n,r)}text(e,t){let n=this.nodes.text;return new rt(n,n.defaultAttrs,e,k.setFrom(t))}mark(e,t){return typeof e==`string`&&(e=this.marks[e]),e.create(t)}nodeType(e){let t=this.nodes[e];if(!t)throw RangeError(`Unknown node type: `+e);return t}};function Ot(e,t){let n=[];for(let r=0;r<t.length;r++){let i=t[r],a=e.marks[i],o=a;if(a)n.push(a);else for(let t in e.marks){let r=e.marks[t];(i==`_`||r.spec.group&&r.spec.group.split(` `).indexOf(i)>-1)&&n.push(o=r)}if(!o)throw SyntaxError(`Unknown mark type: '`+t[r]+`'`)}return n}function kt(e){return e.tag!=null}function At(e){return e.style!=null}var jt=class e{constructor(e,t){this.schema=e,this.rules=t,this.tags=[],this.styles=[];let n=this.matchedStyles=[];t.forEach(e=>{if(kt(e))this.tags.push(e);else if(At(e)){let t=/[^=]*/.exec(e.style)[0];n.indexOf(t)<0&&n.push(t),this.styles.push(e)}}),this.normalizeLists=!this.tags.some(t=>{if(!/^(ul|ol)\b/.test(t.tag)||!t.node)return!1;let n=e.nodes[t.node];return n.contentMatch.matchType(n)})}parse(e,t={}){let n=new Bt(this,t,!1);return n.addAll(e,k.none,t.from,t.to),n.finish()}parseSlice(e,t={}){let n=new Bt(this,t,!0);return n.addAll(e,k.none,t.from,t.to),A.maxOpen(n.finish())}matchTag(e,t,n){for(let r=n?this.tags.indexOf(n)+1:0;r<this.tags.length;r++){let n=this.tags[r];if(Ht(e,n.tag)&&(n.namespace===void 0||e.namespaceURI==n.namespace)&&(!n.context||t.matchesContext(n.context))){if(n.getAttrs){let t=n.getAttrs(e);if(t===!1)continue;n.attrs=t||void 0}return n}}}matchStyle(e,t,n,r){for(let i=r?this.styles.indexOf(r)+1:0;i<this.styles.length;i++){let r=this.styles[i],a=r.style;if(!(a.indexOf(e)!=0||r.context&&!n.matchesContext(r.context)||a.length>e.length&&(a.charCodeAt(e.length)!=61||a.slice(e.length+1)!=t))){if(r.getAttrs){let e=r.getAttrs(t);if(e===!1)continue;r.attrs=e||void 0}return r}}}static schemaRules(e){let t=[];function n(e){let n=e.priority==null?50:e.priority,r=0;for(;r<t.length;r++){let e=t[r];if((e.priority==null?50:e.priority)<n)break}t.splice(r,0,e)}for(let t in e.marks){let r=e.marks[t].spec.parseDOM;r&&r.forEach(e=>{n(e=Ut(e)),e.mark||e.ignore||e.clearMark||(e.mark=t)})}for(let t in e.nodes){let r=e.nodes[t].spec.parseDOM;r&&r.forEach(e=>{n(e=Ut(e)),e.node||e.ignore||e.mark||(e.node=t)})}return t}static fromSchema(t){return t.cached.domParser||(t.cached.domParser=new e(t,e.schemaRules(t)))}},Mt={address:!0,article:!0,aside:!0,blockquote:!0,body:!0,canvas:!0,dd:!0,div:!0,dl:!0,fieldset:!0,figcaption:!0,figure:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,li:!0,noscript:!0,ol:!0,output:!0,p:!0,pre:!0,section:!0,table:!0,tfoot:!0,ul:!0},Nt={head:!0,noscript:!0,object:!0,script:!0,style:!0,title:!0},Pt={ol:!0,ul:!0},Ft=1,It=2,Lt=4;function Rt(e,t,n){return t==null?e&&e.whitespace==`pre`?3:n&-5:(t?Ft:0)|(t===`full`?It:0)}var zt=class{constructor(e,t,n,r,i,a){this.type=e,this.attrs=t,this.marks=n,this.solid=r,this.options=a,this.content=[],this.activeMarks=k.none,this.match=i||(a&Lt?null:e.contentMatch)}findWrapping(e){if(!this.match){if(!this.type)return[];let t=this.type.contentMatch.fillBefore(O.from(e));if(t)this.match=this.type.contentMatch.matchFragment(t);else{let t=this.type.contentMatch,n;return(n=t.findWrapping(e.type))?(this.match=t,n):null}}return this.match.findWrapping(e.type)}finish(e){if(!(this.options&Ft)){let e=this.content[this.content.length-1],t;if(e&&e.isText&&(t=/[ \t\r\n\u000c]+$/.exec(e.text))){let n=e;e.text.length==t[0].length?this.content.pop():this.content[this.content.length-1]=n.withText(n.text.slice(0,n.text.length-t[0].length))}}let t=O.from(this.content);return!e&&this.match&&(t=t.append(this.match.fillBefore(O.empty,!0))),this.type?this.type.create(this.attrs,t,this.marks):t}inlineContext(e){return this.type?this.type.inlineContent:this.content.length?this.content[0].isInline:e.parentNode&&!Mt.hasOwnProperty(e.parentNode.nodeName.toLowerCase())}},Bt=class{constructor(e,t,n){this.parser=e,this.options=t,this.isOpen=n,this.open=0,this.localPreserveWS=!1;let r=t.topNode,i,a=Rt(null,t.preserveWhitespace,0)|(n?Lt:0);i=r?new zt(r.type,r.attrs,k.none,!0,t.topMatch||r.type.contentMatch,a):n?new zt(null,null,k.none,!0,null,a):new zt(e.schema.topNodeType,null,k.none,!0,null,a),this.nodes=[i],this.find=t.findPositions,this.needsBlock=!1}get top(){return this.nodes[this.open]}addDOM(e,t){e.nodeType==3?this.addTextNode(e,t):e.nodeType==1&&this.addElement(e,t)}addTextNode(e,t){let n=e.nodeValue,r=this.top,i=r.options&It?`full`:this.localPreserveWS||(r.options&Ft)>0,{schema:a}=this.parser;if(i===`full`||r.inlineContext(e)||/[^ \t\r\n\u000c]/.test(n)){if(!i){if(n=n.replace(/[ \t\r\n\u000c]+/g,` `),/^[ \t\r\n\u000c]/.test(n)&&this.open==this.nodes.length-1){let t=r.content[r.content.length-1],i=e.previousSibling;(!t||i&&i.nodeName==`BR`||t.isText&&/[ \t\r\n\u000c]$/.test(t.text))&&(n=n.slice(1))}}else if(i===`full`)n=n.replace(/\r\n?/g,`
|
|
3
3
|
`);else if(a.linebreakReplacement&&/[\r\n]/.test(n)&&this.top.findWrapping(a.linebreakReplacement.create())){let e=n.split(/\r?\n|\r/);for(let n=0;n<e.length;n++)n&&this.insertNode(a.linebreakReplacement.create(),t,!0),e[n]&&this.insertNode(a.text(e[n]),t,!/\S/.test(e[n]));n=``}else n=n.replace(/\r?\n|\r/g,` `);n&&this.insertNode(a.text(n),t,!/\S/.test(n)),this.findInText(e)}else this.findInside(e)}addElement(e,t,n){let r=this.localPreserveWS,i=this.top;(e.tagName==`PRE`||/pre/.test(e.style&&e.style.whiteSpace))&&(this.localPreserveWS=!0);let a=e.nodeName.toLowerCase(),o;Pt.hasOwnProperty(a)&&this.parser.normalizeLists&&Vt(e);let s=this.options.ruleFromNode&&this.options.ruleFromNode(e)||(o=this.parser.matchTag(e,this,n));out:if(s?s.ignore:Nt.hasOwnProperty(a))this.findInside(e),this.ignoreFallback(e,t);else if(!s||s.skip||s.closeParent){s&&s.closeParent?this.open=Math.max(0,this.open-1):s&&s.skip.nodeType&&(e=s.skip);let n,r=this.needsBlock;if(Mt.hasOwnProperty(a))i.content.length&&i.content[0].isInline&&this.open&&(this.open--,i=this.top),n=!0,i.type||(this.needsBlock=!0);else if(!e.firstChild){this.leafFallback(e,t);break out}let o=s&&s.skip?t:this.readStyles(e,t);o&&this.addAll(e,o),n&&this.sync(i),this.needsBlock=r}else{let n=this.readStyles(e,t);n&&this.addElementByRule(e,s,n,s.consuming===!1?o:void 0)}this.localPreserveWS=r}leafFallback(e,t){e.nodeName==`BR`&&this.top.type&&this.top.type.inlineContent&&this.addTextNode(e.ownerDocument.createTextNode(`
|
|
4
4
|
`),t)}ignoreFallback(e,t){e.nodeName==`BR`&&(!this.top.type||!this.top.type.inlineContent)&&this.findPlace(this.parser.schema.text(`-`),t,!0)}readStyles(e,t){let n=e.style;if(n&&n.length)for(let e=0;e<this.parser.matchedStyles.length;e++){let r=this.parser.matchedStyles[e],i=n.getPropertyValue(r);if(i)for(let e;;){let n=this.parser.matchStyle(r,i,this,e);if(!n)break;if(n.ignore)return null;if(t=n.clearMark?t.filter(e=>!n.clearMark(e)):t.concat(this.parser.schema.marks[n.mark].create(n.attrs)),n.consuming===!1)e=n;else break}}return t}addElementByRule(e,t,n,r){let i,a;if(t.node){if(a=this.parser.schema.nodes[t.node],a.isLeaf)this.insertNode(a.create(t.attrs),n,e.nodeName==`BR`)||this.leafFallback(e,n);else{let e=this.enter(a,t.attrs||null,n,t.preserveWhitespace);e&&(i=!0,n=e)}}else{let e=this.parser.schema.marks[t.mark];n=n.concat(e.create(t.attrs))}let o=this.top;if(a&&a.isLeaf)this.findInside(e);else if(r)this.addElement(e,n,r);else if(t.getContent)this.findInside(e),t.getContent(e,this.parser.schema).forEach(e=>this.insertNode(e,n,!1));else{let r=e;typeof t.contentElement==`string`?r=e.querySelector(t.contentElement):typeof t.contentElement==`function`?r=t.contentElement(e):t.contentElement&&(r=t.contentElement),this.findAround(e,r,!0),this.addAll(r,n),this.findAround(e,r,!1)}i&&this.sync(o)&&this.open--}addAll(e,t,n,r){let i=n||0;for(let a=n?e.childNodes[n]:e.firstChild,o=r==null?null:e.childNodes[r];a!=o;a=a.nextSibling,++i)this.findAtPoint(e,i),this.addDOM(a,t);this.findAtPoint(e,i)}findPlace(e,t,n){let r,i;for(let t=this.open,a=0;t>=0;t--){let o=this.nodes[t],s=o.findWrapping(e);if(s&&(!r||r.length>s.length+a)&&(r=s,i=o,!s.length))break;if(o.solid){if(n)break;a+=2}}if(!r)return null;this.sync(i);for(let e=0;e<r.length;e++)t=this.enterInner(r[e],null,t,!1);return t}insertNode(e,t,n){if(e.isInline&&this.needsBlock&&!this.top.type){let e=this.textblockFromContext();e&&(t=this.enterInner(e,null,t))}let r=this.findPlace(e,t,n);if(r){this.closeExtra();let t=this.top;t.match&&=t.match.matchType(e.type);let n=k.none;for(let i of r.concat(e.marks))(t.type?t.type.allowsMarkType(i.type):Wt(i.type,e.type))&&(n=i.addToSet(n));return t.content.push(e.mark(n)),!0}return!1}enter(e,t,n,r){let i=this.findPlace(e.create(t),n,!1);return i&&=this.enterInner(e,t,n,!0,r),i}enterInner(e,t,n,r=!1,i){this.closeExtra();let a=this.top;a.match=a.match&&a.match.matchType(e);let o=Rt(e,i,a.options);a.options&Lt&&a.content.length==0&&(o|=Lt);let s=k.none;return n=n.filter(t=>!(a.type?a.type.allowsMarkType(t.type):Wt(t.type,e))||(s=t.addToSet(s),!1)),this.nodes.push(new zt(e,t,s,r,null,o)),this.open++,n}closeExtra(e=!1){let t=this.nodes.length-1;if(t>this.open){for(;t>this.open;t--)this.nodes[t-1].content.push(this.nodes[t].finish(e));this.nodes.length=this.open+1}}finish(){return this.open=0,this.closeExtra(this.isOpen),this.nodes[0].finish(!!(this.isOpen||this.options.topOpen))}sync(e){for(let t=this.open;t>=0;t--)if(this.nodes[t]==e)return this.open=t,!0;else this.localPreserveWS&&(this.nodes[t].options|=Ft);return!1}get currentPos(){this.closeExtra();let e=0;for(let t=this.open;t>=0;t--){let n=this.nodes[t].content;for(let t=n.length-1;t>=0;t--)e+=n[t].nodeSize;t&&e++}return e}findAtPoint(e,t){if(this.find)for(let n=0;n<this.find.length;n++)this.find[n].node==e&&this.find[n].offset==t&&(this.find[n].pos=this.currentPos)}findInside(e){if(this.find)for(let t=0;t<this.find.length;t++)this.find[t].pos==null&&e.nodeType==1&&e.contains(this.find[t].node)&&(this.find[t].pos=this.currentPos)}findAround(e,t,n){if(e!=t&&this.find)for(let r=0;r<this.find.length;r++)this.find[r].pos==null&&e.nodeType==1&&e.contains(this.find[r].node)&&t.compareDocumentPosition(this.find[r].node)&(n?2:4)&&(this.find[r].pos=this.currentPos)}findInText(e){if(this.find)for(let t=0;t<this.find.length;t++)this.find[t].node==e&&(this.find[t].pos=this.currentPos-(e.nodeValue.length-this.find[t].offset))}matchesContext(e){if(e.indexOf(`|`)>-1)return e.split(/\s*\|\s*/).some(this.matchesContext,this);let t=e.split(`/`),n=this.options.context,r=!this.isOpen&&(!n||n.parent.type==this.nodes[0].type),i=-(n?n.depth+1:0)+ +!r,a=(e,o)=>{for(;e>=0;e--){let s=t[e];if(s==``){if(e==t.length-1||e==0)continue;for(;o>=i;o--)if(a(e-1,o))return!0;return!1}{let e=o>0||o==0&&r?this.nodes[o].type:n&&o>=i?n.node(o-i).type:null;if(!e||e.name!=s&&!e.isInGroup(s))return!1;o--}}return!0};return a(t.length-1,this.open)}textblockFromContext(){let e=this.options.context;if(e)for(let t=e.depth;t>=0;t--){let n=e.node(t).contentMatchAt(e.indexAfter(t)).defaultType;if(n&&n.isTextblock&&n.defaultAttrs)return n}for(let e in this.parser.schema.nodes){let t=this.parser.schema.nodes[e];if(t.isTextblock&&t.defaultAttrs)return t}}};function Vt(e){for(let t=e.firstChild,n=null;t;t=t.nextSibling){let e=t.nodeType==1?t.nodeName.toLowerCase():null;e&&Pt.hasOwnProperty(e)&&n?(n.appendChild(t),t=n):e==`li`?n=t:e&&(n=null)}}function Ht(e,t){return(e.matches||e.msMatchesSelector||e.webkitMatchesSelector||e.mozMatchesSelector).call(e,t)}function Ut(e){let t={};for(let n in e)t[n]=e[n];return t}function Wt(e,t){let n=t.schema.nodes;for(let r in n){let i=n[r];if(!i.allowsMarkType(e))continue;let a=[],o=e=>{a.push(e);for(let n=0;n<e.edgeCount;n++){let{type:r,next:i}=e.edge(n);if(r==t||a.indexOf(i)<0&&o(i))return!0}};if(o(i.contentMatch))return!0}}var Gt=class e{constructor(e,t){this.nodes=e,this.marks=t}serializeFragment(e,t={},n){n||=qt(t).createDocumentFragment();let r=n,i=[];return e.forEach(e=>{if(i.length||e.marks.length){let n=0,a=0;for(;n<i.length&&a<e.marks.length;){let t=e.marks[a];if(!this.marks[t.type.name])a++;else{if(!t.eq(i[n][0])||t.type.spec.spanning===!1)break;n++,a++}}for(;n<i.length;)r=i.pop()[1];for(;a<e.marks.length;){let n=e.marks[a++],o=this.serializeMark(n,e.isInline,t);o&&(i.push([n,r]),r.appendChild(o.dom),r=o.contentDOM||o.dom)}}r.appendChild(this.serializeNodeInner(e,t))}),n}serializeNodeInner(e,t){if(e.isText)return qt(t).createTextNode(e.text);let{dom:n,contentDOM:r}=Zt(qt(t),this.nodes[e.type.name](e),null,e.attrs);if(r){if(e.isLeaf)throw RangeError(`Content hole not allowed in a leaf node spec`);this.serializeFragment(e.content,t,r)}return n}serializeNode(e,t={}){let n=this.serializeNodeInner(e,t);for(let r=e.marks.length-1;r>=0;r--){let i=this.serializeMark(e.marks[r],e.isInline,t);i&&((i.contentDOM||i.dom).appendChild(n),n=i.dom)}return n}serializeMark(e,t,n={}){let r=this.marks[e.type.name];return r&&Zt(qt(n),r(e,t),null,e.attrs)}static renderSpec(e,t,n=null,r){return typeof t==`string`?{dom:e.createTextNode(t)}:Zt(e,t,n,r)}static fromSchema(t){return t.cached.domSerializer||(t.cached.domSerializer=new e(this.nodesFromSchema(t),this.marksFromSchema(t)))}static nodesFromSchema(e){let t=Kt(e.nodes);return t.text||=e=>e.text,t}static marksFromSchema(e){return Kt(e.marks)}};function Kt(e){let t={};for(let n in e){let r=e[n].spec.toDOM;r&&(t[n]=r)}return t}function qt(e){return e.document||window.document}var Jt=new WeakMap;function Yt(e){let t=Jt.get(e);return t===void 0&&Jt.set(e,t=Xt(e)),t}function Xt(e){let t=null;function n(e){if(e&&typeof e==`object`){if(Array.isArray(e)){if(typeof e[0]==`string`)t||=[],t.push(e);else for(let t=0;t<e.length;t++)n(e[t])}else for(let t in e)n(e[t])}}return n(e),t}function Zt(e,t,n,r){if(t.nodeType==1)return{dom:t};if(t.dom&&t.dom.nodeType==1)return t;let i=t[0],a;if(typeof i!=`string`)throw RangeError(`Invalid array passed to renderSpec`);if(r&&(a=Yt(r))&&a.indexOf(t)>-1)throw RangeError(`Using an array from an attribute object as a DOM spec. This may be an attempted cross site scripting attack.`);let o=i.indexOf(` `);o>0&&(n=i.slice(0,o),i=i.slice(o+1));let s,c=n?e.createElementNS(n,i):e.createElement(i),l=t[1],u=1;if(l&&typeof l==`object`&&l.nodeType==null&&!Array.isArray(l)){u=2;for(let e in l)if(l[e]!=null){let t=e.indexOf(` `);t>0?c.setAttributeNS(e.slice(0,t),e.slice(t+1),l[e]):e==`style`&&c.style?c.style.cssText=l[e]:c.setAttribute(e,l[e])}}for(let i=u;i<t.length;i++){let a=t[i];if(a===0){if(i<t.length-1||i>u)throw RangeError(`Content hole must be the only child of its parent node`);return{dom:c,contentDOM:c}}if(typeof a==`string`)c.appendChild(e.createTextNode(a));else{let{dom:t,contentDOM:i}=Zt(e,a,n,r);if(c.appendChild(t),i){if(s)throw RangeError(`Multiple content holes`);s=i}}}return{dom:c,contentDOM:s}}var Qt=65535,$t=2**16;function en(e,t){return e+t*$t}function tn(e){return e&Qt}function nn(e){return(e-(e&Qt))/$t}var rn=1,an=2,on=4,sn=8,cn=class{constructor(e,t,n){this.pos=e,this.delInfo=t,this.recover=n}get deleted(){return(this.delInfo&sn)>0}get deletedBefore(){return(this.delInfo&5)>0}get deletedAfter(){return(this.delInfo&6)>0}get deletedAcross(){return(this.delInfo&on)>0}},ln=class e{constructor(t,n=!1){if(this.ranges=t,this.inverted=n,!t.length&&e.empty)return e.empty}recover(e){let t=0,n=tn(e);if(!this.inverted)for(let e=0;e<n;e++)t+=this.ranges[e*3+2]-this.ranges[e*3+1];return this.ranges[n*3]+t+nn(e)}mapResult(e,t=1){return this._map(e,t,!1)}map(e,t=1){return this._map(e,t,!0)}_map(e,t,n){let r=0,i=this.inverted?2:1,a=this.inverted?1:2;for(let o=0;o<this.ranges.length;o+=3){let s=this.ranges[o]-(this.inverted?r:0);if(s>e)break;let c=this.ranges[o+i],l=this.ranges[o+a],u=s+c;if(e<=u){let i=c?e==s?-1:e==u?1:t:t,a=s+r+(i<0?0:l);if(n)return a;let d=e==(t<0?s:u)?null:en(o/3,e-s),f=0;return c&&(f|=e==s?an:e==u?rn:on,(t<0?e!=s:e!=u)&&(f|=sn)),new cn(a,f,d)}r+=l-c}return n?e+r:new cn(e+r,0,null)}touches(e,t){let n=0,r=tn(t),i=this.inverted?2:1,a=this.inverted?1:2;for(let t=0;t<this.ranges.length;t+=3){let o=this.ranges[t]-(this.inverted?n:0);if(o>e)break;let s=this.ranges[t+i];if(e<=o+s&&t==r*3)return!0;n+=this.ranges[t+a]-s}return!1}forEach(e){let t=this.inverted?2:1,n=this.inverted?1:2;for(let r=0,i=0;r<this.ranges.length;r+=3){let a=this.ranges[r],o=a-(this.inverted?i:0),s=a+(this.inverted?0:i),c=this.ranges[r+t],l=this.ranges[r+n];e(o,o+c,s,s+l),i+=l-c}}invert(){return new e(this.ranges,!this.inverted)}toString(){return(this.inverted?`-`:``)+JSON.stringify(this.ranges)}static offset(t){return t==0?e.empty:new e(t<0?[0,-t,0]:[0,0,t])}};ln.empty=new ln([]);var un=class e{constructor(e,t,n=0,r=e?e.length:0){this.mirror=t,this.from=n,this.to=r,this._maps=e||[],this.ownData=!(e||t)}get maps(){return this._maps}slice(t=0,n=this.maps.length){return new e(this._maps,this.mirror,t,n)}appendMap(e,t){this.ownData||=(this._maps=this._maps.slice(),this.mirror=this.mirror&&this.mirror.slice(),!0),this.to=this._maps.push(e),t!=null&&this.setMirror(this._maps.length-1,t)}appendMapping(e){for(let t=0,n=this._maps.length;t<e._maps.length;t++){let r=e.getMirror(t);this.appendMap(e._maps[t],r!=null&&r<t?n+r:void 0)}}getMirror(e){if(this.mirror){for(let t=0;t<this.mirror.length;t++)if(this.mirror[t]==e)return this.mirror[t+(t%2?-1:1)]}}setMirror(e,t){this.mirror||=[],this.mirror.push(e,t)}appendMappingInverted(e){for(let t=e.maps.length-1,n=this._maps.length+e._maps.length;t>=0;t--){let r=e.getMirror(t);this.appendMap(e._maps[t].invert(),r!=null&&r>t?n-r-1:void 0)}}invert(){let t=new e;return t.appendMappingInverted(this),t}map(e,t=1){if(this.mirror)return this._map(e,t,!0);for(let n=this.from;n<this.to;n++)e=this._maps[n].map(e,t);return e}mapResult(e,t=1){return this._map(e,t,!1)}_map(e,t,n){let r=0;for(let n=this.from;n<this.to;n++){let i=this._maps[n].mapResult(e,t);if(i.recover!=null){let t=this.getMirror(n);if(t!=null&&t>n&&t<this.to){n=t,e=this._maps[t].recover(i.recover);continue}}r|=i.delInfo,e=i.pos}return n?e:new cn(e,r,null)}},dn=Object.create(null),fn=class{getMap(){return ln.empty}merge(e){return null}static fromJSON(e,t){if(!t||!t.stepType)throw RangeError(`Invalid input for Step.fromJSON`);let n=dn[t.stepType];if(!n)throw RangeError(`No step type ${t.stepType} defined`);return n.fromJSON(e,t)}static jsonID(e,t){if(e in dn)throw RangeError(`Duplicate use of step JSON ID `+e);return dn[e]=t,t.prototype.jsonID=e,t}},pn=class e{constructor(e,t){this.doc=e,this.failed=t}static ok(t){return new e(t,null)}static fail(t){return new e(null,t)}static fromReplace(t,n,r,i){try{return e.ok(t.replace(n,r,i))}catch(t){if(t instanceof Le)return e.fail(t.message);throw t}}};function mn(e,t,n){let r=[];for(let i=0;i<e.childCount;i++){let a=e.child(i);a.content.size&&(a=a.copy(mn(a.content,t,a))),a.isInline&&(a=t(a,n,i)),r.push(a)}return O.fromArray(r)}var hn=class e extends fn{constructor(e,t,n){super(),this.from=e,this.to=t,this.mark=n}apply(e){let t=e.slice(this.from,this.to),n=e.resolve(this.from),r=n.node(n.sharedDepth(this.to)),i=new A(mn(t.content,(e,t)=>!e.isAtom||!t.type.allowsMarkType(this.mark.type)?e:e.mark(this.mark.addToSet(e.marks)),r),t.openStart,t.openEnd);return pn.fromReplace(e,this.from,this.to,i)}invert(){return new gn(this.from,this.to,this.mark)}map(t){let n=t.mapResult(this.from,1),r=t.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new e(n.pos,r.pos,this.mark)}merge(t){return t instanceof e&&t.mark.eq(this.mark)&&this.from<=t.to&&this.to>=t.from?new e(Math.min(this.from,t.from),Math.max(this.to,t.to),this.mark):null}toJSON(){return{stepType:`addMark`,mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`)throw RangeError(`Invalid input for AddMarkStep.fromJSON`);return new e(n.from,n.to,t.markFromJSON(n.mark))}};fn.jsonID(`addMark`,hn);var gn=class e extends fn{constructor(e,t,n){super(),this.from=e,this.to=t,this.mark=n}apply(e){let t=e.slice(this.from,this.to),n=new A(mn(t.content,e=>e.mark(this.mark.removeFromSet(e.marks)),e),t.openStart,t.openEnd);return pn.fromReplace(e,this.from,this.to,n)}invert(){return new hn(this.from,this.to,this.mark)}map(t){let n=t.mapResult(this.from,1),r=t.mapResult(this.to,-1);return n.deleted&&r.deleted||n.pos>=r.pos?null:new e(n.pos,r.pos,this.mark)}merge(t){return t instanceof e&&t.mark.eq(this.mark)&&this.from<=t.to&&this.to>=t.from?new e(Math.min(this.from,t.from),Math.max(this.to,t.to),this.mark):null}toJSON(){return{stepType:`removeMark`,mark:this.mark.toJSON(),from:this.from,to:this.to}}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`)throw RangeError(`Invalid input for RemoveMarkStep.fromJSON`);return new e(n.from,n.to,t.markFromJSON(n.mark))}};fn.jsonID(`removeMark`,gn);var _n=class e extends fn{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return pn.fail(`No node at mark step's position`);let n=t.type.create(t.attrs,null,this.mark.addToSet(t.marks));return pn.fromReplace(e,this.pos,this.pos+1,new A(O.from(n),0,+!t.isLeaf))}invert(t){let n=t.nodeAt(this.pos);if(n){let t=this.mark.addToSet(n.marks);if(t.length==n.marks.length){for(let r=0;r<n.marks.length;r++)if(!n.marks[r].isInSet(t))return new e(this.pos,n.marks[r]);return new e(this.pos,this.mark)}}return new vn(this.pos,this.mark)}map(t){let n=t.mapResult(this.pos,1);return n.deletedAfter?null:new e(n.pos,this.mark)}toJSON(){return{stepType:`addNodeMark`,pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(t,n){if(typeof n.pos!=`number`)throw RangeError(`Invalid input for AddNodeMarkStep.fromJSON`);return new e(n.pos,t.markFromJSON(n.mark))}};fn.jsonID(`addNodeMark`,_n);var vn=class e extends fn{constructor(e,t){super(),this.pos=e,this.mark=t}apply(e){let t=e.nodeAt(this.pos);if(!t)return pn.fail(`No node at mark step's position`);let n=t.type.create(t.attrs,null,this.mark.removeFromSet(t.marks));return pn.fromReplace(e,this.pos,this.pos+1,new A(O.from(n),0,+!t.isLeaf))}invert(e){let t=e.nodeAt(this.pos);return!t||!this.mark.isInSet(t.marks)?this:new _n(this.pos,this.mark)}map(t){let n=t.mapResult(this.pos,1);return n.deletedAfter?null:new e(n.pos,this.mark)}toJSON(){return{stepType:`removeNodeMark`,pos:this.pos,mark:this.mark.toJSON()}}static fromJSON(t,n){if(typeof n.pos!=`number`)throw RangeError(`Invalid input for RemoveNodeMarkStep.fromJSON`);return new e(n.pos,t.markFromJSON(n.mark))}};fn.jsonID(`removeNodeMark`,vn);var yn=class e extends fn{constructor(e,t,n,r=!1){super(),this.from=e,this.to=t,this.slice=n,this.structure=r}apply(e){return this.structure&&xn(e,this.from,this.to)?pn.fail(`Structure replace would overwrite content`):pn.fromReplace(e,this.from,this.to,this.slice)}getMap(){return new ln([this.from,this.to-this.from,this.slice.size])}invert(t){return new e(this.from,this.from+this.slice.size,t.slice(this.from,this.to))}map(t){let n=t.mapResult(this.to,-1),r=this.from==this.to&&e.MAP_BIAS<0?n:t.mapResult(this.from,1);return r.deletedAcross&&n.deletedAcross?null:new e(r.pos,Math.max(r.pos,n.pos),this.slice,this.structure)}merge(t){if(!(t instanceof e)||t.structure||this.structure)return null;if(this.from+this.slice.size==t.from&&!this.slice.openEnd&&!t.slice.openStart){let n=this.slice.size+t.slice.size==0?A.empty:new A(this.slice.content.append(t.slice.content),this.slice.openStart,t.slice.openEnd);return new e(this.from,this.to+(t.to-t.from),n,this.structure)}if(t.to==this.from&&!this.slice.openStart&&!t.slice.openEnd){let n=this.slice.size+t.slice.size==0?A.empty:new A(t.slice.content.append(this.slice.content),t.slice.openStart,this.slice.openEnd);return new e(t.from,this.to,n,this.structure)}return null}toJSON(){let e={stepType:`replace`,from:this.from,to:this.to};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`)throw RangeError(`Invalid input for ReplaceStep.fromJSON`);return new e(n.from,n.to,A.fromJSON(t,n.slice),!!n.structure)}};yn.MAP_BIAS=1,fn.jsonID(`replace`,yn);var bn=class e extends fn{constructor(e,t,n,r,i,a,o=!1){super(),this.from=e,this.to=t,this.gapFrom=n,this.gapTo=r,this.slice=i,this.insert=a,this.structure=o}apply(e){if(this.structure&&(xn(e,this.from,this.gapFrom)||xn(e,this.gapTo,this.to)))return pn.fail(`Structure gap-replace would overwrite content`);let t=e.slice(this.gapFrom,this.gapTo);if(t.openStart||t.openEnd)return pn.fail(`Gap is not a flat range`);let n=this.slice.insertAt(this.insert,t.content);return n?pn.fromReplace(e,this.from,this.to,n):pn.fail(`Content does not fit in gap`)}getMap(){return new ln([this.from,this.gapFrom-this.from,this.insert,this.gapTo,this.to-this.gapTo,this.slice.size-this.insert])}invert(t){let n=this.gapTo-this.gapFrom;return new e(this.from,this.from+this.slice.size+n,this.from+this.insert,this.from+this.insert+n,t.slice(this.from,this.to).removeBetween(this.gapFrom-this.from,this.gapTo-this.from),this.gapFrom-this.from,this.structure)}map(t){let n=t.mapResult(this.from,1),r=t.mapResult(this.to,-1),i=this.from==this.gapFrom?n.pos:t.map(this.gapFrom,-1),a=this.to==this.gapTo?r.pos:t.map(this.gapTo,1);return n.deletedAcross&&r.deletedAcross||i<n.pos||a>r.pos?null:new e(n.pos,r.pos,i,a,this.slice,this.insert,this.structure)}toJSON(){let e={stepType:`replaceAround`,from:this.from,to:this.to,gapFrom:this.gapFrom,gapTo:this.gapTo,insert:this.insert};return this.slice.size&&(e.slice=this.slice.toJSON()),this.structure&&(e.structure=!0),e}static fromJSON(t,n){if(typeof n.from!=`number`||typeof n.to!=`number`||typeof n.gapFrom!=`number`||typeof n.gapTo!=`number`||typeof n.insert!=`number`)throw RangeError(`Invalid input for ReplaceAroundStep.fromJSON`);return new e(n.from,n.to,n.gapFrom,n.gapTo,A.fromJSON(t,n.slice),n.insert,!!n.structure)}};fn.jsonID(`replaceAround`,bn);function xn(e,t,n){let r=e.resolve(t),i=n-t,a=r.depth;for(;i>0&&a>0&&r.indexAfter(a)==r.node(a).childCount;)a--,i--;if(i>0){let e=r.node(a).maybeChild(r.indexAfter(a));for(;i>0;){if(!e||e.isLeaf)return!0;e=e.firstChild,i--}}return!1}function Sn(e,t,n,r){let i=[],a=[],o,s;e.doc.nodesBetween(t,n,(e,c,l)=>{if(!e.isInline)return;let u=e.marks;if(!r.isInSet(u)&&l.type.allowsMarkType(r.type)){let l=Math.max(c,t),d=Math.min(c+e.nodeSize,n),f=r.addToSet(u);for(let e=0;e<u.length;e++)u[e].isInSet(f)||(o&&o.to==l&&o.mark.eq(u[e])?o.to=d:i.push(o=new gn(l,d,u[e])));s&&s.to==l?s.to=d:a.push(s=new hn(l,d,r))}}),i.forEach(t=>e.step(t)),a.forEach(t=>e.step(t))}function Cn(e,t,n,r){let i=[],a=0;e.doc.nodesBetween(t,n,(e,o)=>{if(!e.isInline)return;a++;let s=null;if(r instanceof Et){let t=e.marks,n;for(;n=r.isInSet(t);)(s||=[]).push(n),t=n.removeFromSet(t)}else r?r.isInSet(e.marks)&&(s=[r]):s=e.marks;if(s&&s.length){let r=Math.min(o+e.nodeSize,n);for(let e=0;e<s.length;e++){let n=s[e],c;for(let e=0;e<i.length;e++){let t=i[e];t.step==a-1&&n.eq(i[e].style)&&(c=t)}c?(c.to=r,c.step=a):i.push({style:n,from:Math.max(o,t),to:r,step:a})}}}),i.forEach(t=>e.step(new gn(t.from,t.to,t.style)))}function wn(e,t,n,r=n.contentMatch,i=!0){let a=e.doc.nodeAt(t),o=[],s=t+1;for(let t=0;t<a.childCount;t++){let c=a.child(t),l=s+c.nodeSize,u=r.matchType(c.type);if(!u)o.push(new yn(s,l,A.empty));else{r=u;for(let t=0;t<c.marks.length;t++)n.allowsMarkType(c.marks[t].type)||e.step(new gn(s,l,c.marks[t]));if(i&&c.isText&&n.whitespace!=`pre`){let e,t=/\r?\n|\r/g,r;for(;e=t.exec(c.text);)r||=new A(O.from(n.schema.text(` `,n.allowedMarks(c.marks))),0,0),o.push(new yn(s+e.index,s+e.index+e[0].length,r))}}s=l}if(!r.validEnd){let t=r.fillBefore(O.empty,!0);e.replace(s,s,new A(t,0,0))}for(let t=o.length-1;t>=0;t--)e.step(o[t])}function Tn(e,t,n){return(t==0||e.canReplace(t,e.childCount))&&(n==e.childCount||e.canReplace(0,n))}function En(e){let t=e.parent.content.cutByIndex(e.startIndex,e.endIndex);for(let n=e.depth,r=0,i=0;;--n){let a=e.$from.node(n),o=e.$from.index(n)+r,s=e.$to.indexAfter(n)-i;if(n<e.depth&&a.canReplace(o,s,t))return n;if(n==0||a.type.spec.isolating||!Tn(a,o,s))break;o&&(r=1),s<a.childCount&&(i=1)}return null}function Dn(e,t,n){let{$from:r,$to:i,depth:a}=t,o=r.before(a+1),s=i.after(a+1),c=o,l=s,u=O.empty,d=0;for(let e=a,t=!1;e>n;e--)t||r.index(e)>0?(t=!0,u=O.from(r.node(e).copy(u)),d++):c--;let f=O.empty,p=0;for(let e=a,t=!1;e>n;e--)t||i.after(e+1)<i.end(e)?(t=!0,f=O.from(i.node(e).copy(f)),p++):l++;e.step(new bn(c,l,o,s,new A(u.append(f),d,p),u.size-d,!0))}function On(e,t,n=null,r=e){let i=An(e,t),a=i&&jn(r,t);return a?i.map(kn).concat({type:t,attrs:n}).concat(a.map(kn)):null}function kn(e){return{type:e,attrs:null}}function An(e,t){let{parent:n,startIndex:r,endIndex:i}=e,a=n.contentMatchAt(r).findWrapping(t);if(!a)return null;let o=a.length?a[0]:t;return n.canReplaceWith(r,i,o)?a:null}function jn(e,t){let{parent:n,startIndex:r,endIndex:i}=e,a=n.child(r),o=t.contentMatch.findWrapping(a.type);if(!o)return null;let s=(o.length?o[o.length-1]:t).contentMatch;for(let e=r;s&&e<i;e++)s=s.matchType(n.child(e).type);return!s||!s.validEnd?null:o}function Mn(e,t,n){let r=O.empty;for(let e=n.length-1;e>=0;e--){if(r.size){let t=n[e].type.contentMatch.matchFragment(r);if(!t||!t.validEnd)throw RangeError(`Wrapper type given to Transform.wrap does not form valid content of its parent wrapper`)}r=O.from(n[e].type.create(n[e].attrs,r))}let i=t.start,a=t.end;e.step(new bn(i,a,i,a,new A(r,0,0),n.length,!0))}function Nn(e,t,n,r,i){if(!r.isTextblock)throw RangeError(`Type given to setBlockType should be a textblock`);let a=e.steps.length;e.doc.nodesBetween(t,n,(t,n)=>{let o=typeof i==`function`?i(t):i;if(t.isTextblock&&!t.hasMarkup(r,o)&&In(e.doc,e.mapping.slice(a).map(n),r)){let i=null;if(r.schema.linebreakReplacement){let e=r.whitespace==`pre`,t=!!r.contentMatch.matchType(r.schema.linebreakReplacement);e&&!t?i=!1:!e&&t&&(i=!0)}i===!1&&Fn(e,t,n,a),wn(e,e.mapping.slice(a).map(n,1),r,void 0,i===null);let s=e.mapping.slice(a),c=s.map(n,1),l=s.map(n+t.nodeSize,1);return e.step(new bn(c,l,c+1,l-1,new A(O.from(r.create(o,null,t.marks)),0,0),1,!0)),i===!0&&Pn(e,t,n,a),!1}})}function Pn(e,t,n,r){t.forEach((i,a)=>{if(i.isText){let o,s=/\r?\n|\r/g;for(;o=s.exec(i.text);){let i=e.mapping.slice(r).map(n+1+a+o.index);e.replaceWith(i,i+1,t.type.schema.linebreakReplacement.create())}}})}function Fn(e,t,n,r){t.forEach((i,a)=>{if(i.type==i.type.schema.linebreakReplacement){let i=e.mapping.slice(r).map(n+1+a);e.replaceWith(i,i+1,t.type.schema.text(`
|
package/apps/web/dist/assets/{workspace-settings-DgLyieJN.js → workspace-settings-C-Phmi9i.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{J as t,K as n,Nn as r,Qt as i,Y as a,Yt as o,an as s,bt as c,c as l,et as u,mn as d,q as f,r as p,xt as m,yt as h}from"./default-BgvtI7HK.js";import{$ as g,B as ee,G as te,H as _,Hi as v,J as y,Ji as b,K as x,Oa as S,Pt as C,Q as w,V as T,X as E,Y as D,Zi as O,at as k,di as A,it as j,nt as M,q as N,qa as P,qi as F,ra as I,vt as L}from"./search-ZaQmVnj1.js";import{g as R}from"./item-Cj8xpMLk.js";import{a as z,c as B}from"./project-lifecycle-CIAMJ-SX.js";import{n as V,r as H}from"./CompositeItem-DgnfVvrF.js";import{t as U}from"./invitations-D5unaga2.js";import{t as ne}from"./upload-BwGa8shS.js";import{Ht as W,c as re,i as G,n as K,o as ie,r as q,s as ae,t as oe}from"./index-BIuqxnJn.js";import{n as J,r as Y,t as X}from"./member-directory-48yD01yN.js";import{t as se}from"./label-settings-B89Ehf78.js";var Z=e(r(),1),Q=p();function $({workspaceId:e,canEdit:t,authority:n}){let r=P(v.query(`list_workspace_roles`,{workspaceId:e})),i=O(`create_workspace_role`),a=O(`update_workspace_role`),o=O(`delete_workspace_role`),[s,l]=(0,Z.useState)(null),[u,f]=(0,Z.useState)(null),p=r.data??[],m=i.isPending||a.isPending,g=e=>n.capabilities.includes(e),_=e=>(e.id!==`admin`||n.admin)&&e.permissions.every(g);function b(e){i.reset(),a.reset(),l({role:e,name:e?.name??``,permissions:e?[...e.permissions]:[]})}function A(t,n,r){return t?a.mutateAsync({workspaceId:e,roleId:t.id,expectedVersion:t.version,name:n,permissions:r}):i.mutateAsync({workspaceId:e,name:n,permissions:r})}async function M(t,n){await o.mutateAsync({workspaceId:e,roleId:t.id,expectedVersion:t.version,...n?{reassignTo:n}:{}}),f(null),S.success(d(`settings.roles.deleted`))}let F=u?p.filter(e=>e.id!==u.role.id&&_(e)):[];return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(j,{title:d(`settings.roles.title`),action:t&&(0,Q.jsx)(y,{label:d(`settings.roles.new`),variant:`default`,onClick:()=>b(null),children:(0,Q.jsx)(R,{})})}),(0,Q.jsx)(x,{error:r.error}),r.isPending?(0,Q.jsx)(E,{}):p.length?p.map(e=>{let n=t&&!e.seeded&&_(e);return(0,Q.jsxs)(K,{compact:!0,title:(0,Q.jsxs)(`span`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Q.jsx)(`span`,{dir:`auto`,className:`min-w-0`,children:J(e)}),e.seeded&&(0,Q.jsx)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:d(`settings.roles.builtIn`)})]}),description:e.permissions.length?e.permissions.map(e=>h[e].label).join(` · `):d(`settings.roles.readOnly`),children:[(0,Q.jsx)(`span`,{className:`text-xs whitespace-nowrap text-muted-foreground tabular-nums`,children:d(`settings.roles.memberships`,{count:e.assigned})}),n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(y,{label:d(`settings.roles.editNamed`,{name:J(e)}),onClick:()=>b(e),children:(0,Q.jsx)(H,{})}),e.assigned?(0,Q.jsx)(y,{label:d(`settings.roles.deleteNamed`,{name:J(e)}),onClick:()=>{o.reset(),f({role:e,reassignTo:`reader`})},children:(0,Q.jsx)(V,{})}):(0,Q.jsx)(T,{label:d(`settings.roles.deleteNamed`,{name:J(e)}),icon:(0,Q.jsx)(V,{}),danger:!0,description:d(`settings.roles.deleteUnused`,{name:J(e)}),onConfirm:()=>M(e)})]})]},e.id)}):!r.error&&(0,Q.jsx)(te,{title:d(`settings.roles.empty`)}),(0,Q.jsx)(w,{title:s?.role?d(`settings.roles.edit`):d(`settings.roles.new`),open:!!s,onOpenChange:e=>{e||l(null)},busy:m,children:s&&(0,Q.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),A(s.role,s.name.trim(),s.permissions).then(()=>{l(null),S.success(d(`settings.roles.saved`))}).catch(()=>{})},children:[(0,Q.jsx)(D,{label:d(`settings.roles.name`),value:s.name,onChange:e=>l({...s,name:e.target.value}),maxLength:40,required:!0,autoFocus:!0}),(0,Q.jsxs)(`fieldset`,{className:`mb-4`,children:[(0,Q.jsx)(`legend`,{className:`mb-1 text-sm font-medium`,children:d(`settings.roles.actions`)}),(0,Q.jsx)(`p`,{className:`mt-0 mb-1 text-xs text-muted-foreground`,children:d(`settings.roles.everyoneReads`)}),c.map(e=>(0,Q.jsx)(ee,{label:h[e].label,description:h[e].description,checked:s.permissions.includes(e),disabled:m||!g(e),onCheckedChange:t=>l({...s,permissions:t?[...s.permissions,e]:s.permissions.filter(t=>t!==e)})},e))]}),s.role&&s.role.assigned>0&&(0,Q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(`settings.roles.changesApply`,{count:s.role.assigned})}),(0,Q.jsx)(N,{error:i.error??a.error,pending:m,submitLabel:d(`settings.roles.save`),submitDisabled:!s.name.trim(),onCancel:()=>l(null)})]})}),(0,Q.jsx)(w,{title:d(`settings.roles.delete`),open:!!u,onOpenChange:e=>{e||f(null)},busy:o.isPending,children:u&&(0,Q.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),M(u.role,u.reassignTo).catch(()=>{})},children:[(0,Q.jsx)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:d(`settings.roles.reassignDescription`,{count:u.role.assigned,name:J(u.role)})}),(0,Q.jsx)(k,{label:d(`settings.roles.moveTo`),value:u.reassignTo,onValueChange:e=>e&&f({...u,reassignTo:e}),children:F.map(e=>(0,Q.jsx)(C,{value:e.id,children:J(e)},e.id))}),(0,Q.jsx)(N,{error:o.error,pending:o.isPending,danger:!0,submitLabel:d(`settings.roles.delete`),pendingLabel:d(`settings.lifecycle.deleting`),onCancel:()=>f(null)})]})})]})}var ce=[`tickets`,`workflow`,`fields`,`labels`,`relations`,`comments`,`evidence`,`links`],le=()=>d(`admin.import.notExport`),ue=e=>e?.status===`running`,de=e=>e.issues.some(e=>e.severity===`error`);function fe(e){let{done:t,failed:n,total:r}=e.progress,i={status:a[e.status],done:t,failed:n,count:r};return d(n?`admin.import.progressFailed`:`admin.import.progress`,i)}function pe({workspaceId:e}){let[t,n]=(0,Z.useState)(!1),[r,i]=(0,Z.useState)(null),a=P({...v.query(`list_imports`,{workspaceId:e}),refetchInterval:e=>e.state.data?.some(ue)?2e3:!1}),o=e=>{i(e),n(!0)};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(K,{title:d(`admin.import.title`),description:d(`admin.import.description`),children:(0,Q.jsxs)(A,{onClick:()=>o(null),children:[(0,Q.jsx)(ne,{}),d(`admin.import.action`)]})}),a.data?.map(e=>(0,Q.jsx)(K,{compact:!0,title:(0,Q.jsxs)(Q.Fragment,{children:[e.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.key})]}),description:(0,Q.jsxs)(Q.Fragment,{children:[fe(e),` · `,(0,Q.jsx)(M,{value:e.updatedAt})]}),children:(0,Q.jsx)(A,{size:`sm`,variant:`ghost`,"aria-label":d(`admin.import.detailsOf`,{name:e.name}),onClick:()=>o(e.id),children:d(`admin.import.details`)})},e.id)),(0,Q.jsx)(w,{title:d(`admin.import.action`),open:t,onOpenChange:n,children:r?(0,Q.jsx)(Se,{workspaceId:e,runId:r,onClose:()=>n(!1)}):(0,Q.jsx)(be,{workspaceId:e,onStarted:i,onCancel:()=>n(!1)})})]})}var me=[`file`,...f],he=e=>e===`file`?d(`admin.import.exportFile`):n[e].label,ge={edition:`cloud`,signIn:`password`,baseUrl:``,workspace:``,email:``,username:``,password:``,apiKey:``,token:``},_e=e=>({name:`baseUrl`,label:d(`admin.import.siteUrl`),type:`url`,placeholder:e}),ve={linear:()=>[{name:`token`,label:d(`admin.import.apiKey`),type:`password`}],jira:({edition:e})=>[{name:`edition`,label:d(`admin.import.jiraEdition`),choices:u},_e(e===`cloud`?`https://example.atlassian.net`:`https://jira.example.com`),...e===`cloud`?[{name:`email`,label:d(`admin.import.accountEmail`),type:`email`},{name:`token`,label:d(`admin.import.apiToken`),type:`password`}]:[{name:`token`,label:d(`admin.import.personalToken`),type:`password`}]],trello:()=>[{name:`apiKey`,label:d(`admin.import.apiKey`),type:`password`},{name:`token`,label:d(`admin.import.token`),type:`password`}],plane:()=>[{..._e(`https://api.plane.so`),label:d(`admin.import.apiUrl`)},{name:`workspace`,label:d(`admin.import.workspaceSlug`),placeholder:`my-team`},{name:`token`,label:d(`admin.import.apiToken`),type:`password`}],planka:({signIn:e})=>[_e(`https://planka.example.com`),{name:`signIn`,label:d(`admin.import.signInWith`),choices:m},...e===`password`?[{name:`username`,label:d(`admin.import.username`)},{name:`password`,label:d(`admin.import.password`),type:`password`}]:[{name:`token`,label:d(`admin.import.apiKey`),type:`password`}]],kaneo:()=>[_e(`https://kaneo.example.com`),{name:`token`,label:d(`admin.import.apiKey`),type:`password`}]},ye=(e,t)=>/^[A-Z][A-Z0-9]{1,9}$/.test(e)?e:re(t);function be({workspaceId:e,onStarted:r,onCancel:a}){let[s,c]=(0,Z.useState)(`file`),[l,u]=(0,Z.useState)(ge),[f,p]=(0,Z.useState)(),[m,h]=(0,Z.useState)(``),[g,te]=(0,Z.useState)(!0),[_,v]=(0,Z.useState)(),[y,b]=(0,Z.useState)(),[S,w]=(0,Z.useState)(),[T,E]=(0,Z.useState)(``),[A,j]=(0,Z.useState)(``),[M,P]=(0,Z.useState)(`workspace`),[F,I]=(0,Z.useState)(),L=O(`list_import_source_projects`),R=O(`preview_import`),z=O(`preview_source_import`),B=O(`start_import`),V=(0,Z.useRef)(0),H=()=>{V.current+=1,I(void 0),R.reset(),z.reset()},U=e=>t=>{e(t),H()},ne=()=>{H(),p(void 0),h(``),L.reset()},W=e=>{e&&(h(e.ref),E(e.name),j(ye(e.key,e.name)),H())},re=e=>t=>{u(n=>({...n,[e]:t})),w(void 0),ne()},G=s===`file`?[]:ve[s](l),K=s===`file`?void 0:t.safeParse({provider:s,...Object.fromEntries(G.map(e=>[e.name,l[e.name]]))}),q=K?.success?K.data:void 0,oe=s===`file`?!!_:!!m,J=!!F&&!de(F),Y=s!==`file`&&!f,X=e=>V.current===e,se=s===`file`?R:z,$=s===`file`?void 0:n[s];return(0,Q.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=V.current;J?B.mutateAsync({workspaceId:e,importId:F.id,expectedVersion:F.version}).then(e=>r(e.id)).catch(()=>{}):Y&&!q?w(Error(K?.error?.issues[0]?.message??d(`admin.import.checkConnection`))):q&&Y?L.mutateAsync({workspaceId:e,source:q}).then(e=>{X(n)&&(p(e),W(e[0]))}).catch(()=>{}):q?z.mutateAsync({workspaceId:e,key:A,name:T,visibility:M,source:q,sourceProject:m,includeComments:g}).then(e=>{X(n)&&I(e)}).catch(()=>{}):_&&R.mutateAsync({workspaceId:e,key:A,name:T,visibility:M,bundle:_}).then(e=>{X(n)&&I(e)}).catch(()=>{})},children:[(0,Q.jsx)(k,{label:d(`admin.import.source`),value:s,onValueChange:e=>{let t=me.find(t=>t===e);t&&(c(t),v(void 0),b(void 0),u(ge),w(void 0),ne())},children:me.map(e=>(0,Q.jsx)(C,{value:e,children:he(e)},e))}),s===`file`?(0,Q.jsx)(D,{label:d(`admin.import.file`),type:`file`,accept:`application/json,.json`,required:!0,onChange:e=>{let t=e.currentTarget.files?.[0];if(v(void 0),H(),b(void 0),!t)return;let n=V.current;t.text().then(e=>{let t=JSON.parse(e);if(!o.pick({format:!0}).safeParse(t).success)throw Error(le());let r=i.parse(t);V.current===n&&(v(r),E(r.project.name),j(ye(r.project.key,r.project.name)))}).catch(e=>{V.current===n&&b(e instanceof SyntaxError?Error(le()):e)})}}):(0,Q.jsxs)(Q.Fragment,{children:[G.map(e=>e.choices?(0,Q.jsx)(k,{label:e.label,value:l[e.name],onValueChange:t=>{t!==null&&re(e.name)(t)},children:Object.entries(e.choices).map(([e,t])=>(0,Q.jsx)(C,{value:e,children:t},e))},e.name):(0,Q.jsx)(D,{label:e.label,type:e.type??`text`,required:!0,autoComplete:`off`,placeholder:e.placeholder,value:l[e.name],onChange:t=>re(e.name)(t.target.value)},e.name)),(0,Q.jsx)(`p`,{className:`-mt-2 mb-4 text-xs text-muted-foreground`,children:$?.setup}),(0,Q.jsx)(x,{error:S??L.error}),f&&$&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(k,{label:$.project,value:m,onValueChange:e=>W(f.find(t=>t.ref===e)),children:f.map(e=>(0,Q.jsxs)(C,{value:e.ref,children:[e.group&&(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.group,` /`]}),` `,e.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.key})]},e.ref))}),f.length===0&&(0,Q.jsx)(`p`,{className:`-mt-2 mb-4 text-sm text-muted-foreground`,children:d(`admin.import.noProjects`,{label:$.project})}),(0,Q.jsx)(ee,{label:d(`admin.import.includeComments`),checked:g,onCheckedChange:U(te)})]})]}),(0,Q.jsx)(x,{error:y}),oe&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{label:d(`admin.import.projectName`),value:T,onChange:e=>U(E)(e.target.value),required:!0,maxLength:120}),(0,Q.jsx)(ie,{value:A,onChange:U(j)}),(0,Q.jsx)(ae,{value:M,onChange:U(P)})]}),F&&(0,Q.jsx)(xe,{run:F}),(0,Q.jsx)(N,{error:se.error??B.error,pending:L.isPending||se.isPending||B.isPending,submitLabel:d(J?`admin.import.start`:Y?`admin.import.connect`:`admin.import.preview`),pendingLabel:d(J?`admin.import.starting`:Y?`admin.import.connecting`:`admin.import.checking`),submitDisabled:Y?!1:!oe||!!F&&!J,onCancel:a})]})}function xe({run:e}){let t=e.members.filter(e=>e.userId),n=e.members.filter(e=>!e.userId),r=[...ce.map(t=>[d(`admin.import.count.${t}`),e.counts[t]?String(e.counts[t]):``]),[d(`admin.import.matched`),s(t.map(e=>e.name))],[d(`admin.import.unmatched`),s(n.map(e=>e.name))]];return(0,Q.jsxs)(`section`,{"aria-label":d(`admin.import.previewLabel`),className:`mt-2 border-t pt-3`,children:[(0,Q.jsx)(B,{rows:r}),e.issues.length>0&&(0,Q.jsx)(`ul`,{className:`m-0 list-none space-y-1.5 p-0 text-sm`,children:e.issues.map(e=>(0,Q.jsxs)(`li`,{className:e.severity===`error`?`text-destructive`:`text-muted-foreground`,children:[(0,Q.jsx)(`span`,{className:`sr-only`,children:e.severity===`error`?d(`admin.import.errorPrefix`):d(`admin.import.notePrefix`)}),e.message]},e.message))})]})}function Se({workspaceId:e,runId:t,onClose:n}){let r=P({...v.query(`get_import`,{workspaceId:e,importId:t}),refetchInterval:e=>ue(e.state.data)?1e3:!1}),i=O(`cancel_import`);if(r.error)return(0,Q.jsx)(x,{error:r.error});let a=r.data;if(!a)return(0,Q.jsx)(E,{});let{done:o,failed:s,total:c}=a.progress,l=c?Math.round((o+s)/c*100):0;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{className:`mt-0 mb-2 text-sm`,children:[a.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:a.key})]}),(0,Q.jsxs)(`div`,{className:`my-3`,children:[(0,Q.jsx)(`div`,{role:`progressbar`,"aria-label":d(`admin.import.progressLabel`),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":l,className:`h-1.5 overflow-hidden rounded-full bg-border`,children:(0,Q.jsx)(`div`,{className:`h-full bg-primary transition-[width] duration-300`,style:{width:`${l}%`}})}),(0,Q.jsx)(`p`,{role:`status`,className:`mt-2 mb-0 text-sm text-muted-foreground tabular-nums`,children:fe(a)})]}),a.errors.length>0&&(0,Q.jsx)(`ul`,{"aria-label":d(`admin.import.notImported`),className:`m-0 list-none space-y-1 p-0 text-sm`,children:a.errors.map((e,t)=>(0,Q.jsxs)(`li`,{className:`text-destructive`,children:[e.label,`: `,e.message]},t))}),(0,Q.jsx)(x,{error:i.error}),(0,Q.jsxs)(g,{children:[a.status===`running`&&(0,Q.jsx)(A,{disabled:i.isPending,onClick:()=>void i.mutateAsync({workspaceId:e,importId:a.id,expectedVersion:a.version}).catch(()=>{}),children:d(`admin.import.stop`)}),a.projectId&&a.status!==`running`&&(0,Q.jsx)(A,{variant:`default`,render:(0,Q.jsx)(W,{to:`/projects/$projectId`,params:{projectId:a.projectId}}),onClick:n,children:d(`admin.import.openProject`)})]})]})}function Ce({workspace:e,people:t,canTransfer:n}){let[r,i]=(0,Z.useState)(!1),[a,o]=(0,Z.useState)(``),s=O(`transfer_workspace`),c=t.find(t=>t.userId===e.ownerId),l=t.filter(t=>t.role===`admin`&&!t.disabled&&t.userId!==e.ownerId),u=l.find(e=>e.email===a);return(0,Q.jsx)(K,{title:d(`settings.workspace.owner`),description:c?`${c.name} · ${c.email}`:e.ownerId?void 0:d(`settings.workspace.noOwner`),children:n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(A,{onClick:()=>{o(``),i(!0)},children:d(`settings.workspace.transfer`)}),(0,Q.jsx)(w,{title:d(`settings.workspace.transfer`),open:r,onOpenChange:e=>{i(e),e||s.reset()},busy:s.isPending,children:(0,Q.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),u&&s.mutateAsync({workspaceId:e.id,expectedVersion:e.version,userId:u.userId}).then(()=>{i(!1),S.success(d(`settings.workspace.transferred`,{name:u.name,workspace:e.name}))}).catch(()=>{})},children:[l.length?(0,Q.jsx)(Y,{people:l,value:a,onChange:o,disabled:s.isPending,label:d(`settings.workspace.newOwner`),anyAccount:!1}):(0,Q.jsx)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:d(`settings.workspace.noEligible`)}),(0,Q.jsxs)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:[u?d(`settings.workspace.chosenCan`,{name:u.name}):d(`settings.workspace.newOwnerCan`),` `,c?d(`settings.workspace.ownerStays`,{name:c.name}):``]}),(0,Q.jsx)(N,{error:s.error,pending:s.isPending,submitLabel:d(`settings.workspace.transfer`),pendingLabel:d(`settings.workspace.transferring`),submitDisabled:!u,onCancel:()=>i(!1)})]})})]})})}function we({workspaceId:e,section:t}){let n=b(),r=I(),i=F(),a=r.data?.find(t=>t.id===e),o=P({...v.query(`list_workspace_members`,{workspaceId:e}),enabled:!!a?.role}),s=P({...v.query(`list_workspace_roles`,{workspaceId:e}),enabled:!!a?.role}),c=O(`update_workspace`),u=O(`set_workspace_member`);if(r.isPending)return(0,Q.jsx)(E,{});if(!a?.role)return(0,Q.jsxs)(te,{title:d(`settings.workspace.unavailable`),children:[(0,Q.jsx)(x,{error:r.error}),(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/`}),children:d(`settings.workspace.backToProjects`)})]});let f=l(a),p={admin:a.role===`admin`,capabilities:f},m=f.includes(`workspace.manage`),h=a.ownerId===n.id||n.admin,g=i.data?.filter(e=>e.workspaceId===a.id).length??0;return(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsxs)(q,{title:d(`settings.workspace.title`),section:t,children:[(0,Q.jsxs)(G,{value:`general`,children:[(0,Q.jsx)(`section`,{children:(0,Q.jsx)(oe,{name:a.name,description:a.description,nameLabel:d(`settings.workspace.name`),canEdit:m,version:a.version,pending:c.isPending,error:c.error,editLabel:d(`settings.workspace.edit`),badges:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(L,{variant:`secondary`,className:`ml-0.5 font-mono text-[10px] font-normal`,children:a.slug}),(0,Q.jsx)(_,{label:d(`settings.workspace.copyKey`),value:a.slug,size:`icon-xs`})]}),onSave:t=>c.mutateAsync({workspaceId:e,expectedVersion:a.version,name:t.name,description:t.description}).then(()=>S.success(d(`settings.workspace.saved`)))})}),(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(K,{title:d(`settings.workspace.projects`),description:d(`settings.workspace.projectCount`,{count:g}),children:(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/`}),children:d(`settings.workspace.viewProjects`)})}),(0,Q.jsx)(Ce,{workspace:a,people:o.data??[],canTransfer:h}),(0,Q.jsx)(K,{title:d(`settings.workspace.members`),description:d(`settings.workspace.membersDescription`),children:(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/workspaces/$workspaceId/settings`,params:{workspaceId:e},search:{section:`members`}}),children:d(`settings.workspace.manageMembers`)})}),f.includes(`ticket.write`)&&(0,Q.jsx)(pe,{workspaceId:e}),h&&(0,Q.jsx)(z,{workspace:a})]})]}),(0,Q.jsxs)(G,{value:`members`,children:[(0,Q.jsx)(X,{people:o.data??[],pending:u.isPending,loading:o.isPending,error:o.error,canAdmin:f.includes(`member.manage`),ownerId:a.ownerId,scope:`workspace`,roles:s.data,authority:p,onChange:(t,n)=>u.mutateAsync({workspaceId:e,email:t,role:n})}),f.includes(`invitation.manage`)&&(0,Q.jsx)(U,{workspaceId:e})]}),(0,Q.jsx)(G,{value:`roles`,children:(0,Q.jsx)($,{workspaceId:e,canEdit:m,authority:p})}),(0,Q.jsx)(G,{value:`labels`,children:(0,Q.jsx)(se,{owner:{workspaceId:e},canAdmin:m})})]})})}export{we as WorkspaceSettings};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{J as t,K as n,Nn as r,Qt as i,Y as a,Yt as o,an as s,bt as c,c as l,et as u,mn as d,q as f,r as p,xt as m,yt as h}from"./default-6QIAyMq2.js";import{$ as g,B as ee,G as te,H as _,Hi as v,J as y,Ji as b,K as x,Oa as S,Pt as C,Q as w,V as T,X as E,Y as D,Zi as O,at as k,di as A,it as j,nt as M,q as N,qa as P,qi as F,ra as I,vt as L}from"./search-B3-w3oCd.js";import{g as R}from"./item-DED0Ikqi.js";import{a as z,c as B}from"./project-lifecycle-DGHAmEB2.js";import{n as V,r as H}from"./CompositeItem-B5Qlh5m0.js";import{t as U}from"./invitations-BPk5fwwU.js";import{t as ne}from"./upload-BzLq4CMS.js";import{Ht as W,c as re,i as G,n as K,o as ie,r as q,s as ae,t as oe}from"./index-2V6MWx63.js";import{n as J,r as Y,t as X}from"./member-directory-BRhEIYZ6.js";import{t as se}from"./label-settings-D12QOkDs.js";var Z=e(r(),1),Q=p();function $({workspaceId:e,canEdit:t,authority:n}){let r=P(v.query(`list_workspace_roles`,{workspaceId:e})),i=O(`create_workspace_role`),a=O(`update_workspace_role`),o=O(`delete_workspace_role`),[s,l]=(0,Z.useState)(null),[u,f]=(0,Z.useState)(null),p=r.data??[],m=i.isPending||a.isPending,g=e=>n.capabilities.includes(e),_=e=>(e.id!==`admin`||n.admin)&&e.permissions.every(g);function b(e){i.reset(),a.reset(),l({role:e,name:e?.name??``,permissions:e?[...e.permissions]:[]})}function A(t,n,r){return t?a.mutateAsync({workspaceId:e,roleId:t.id,expectedVersion:t.version,name:n,permissions:r}):i.mutateAsync({workspaceId:e,name:n,permissions:r})}async function M(t,n){await o.mutateAsync({workspaceId:e,roleId:t.id,expectedVersion:t.version,...n?{reassignTo:n}:{}}),f(null),S.success(d(`settings.roles.deleted`))}let F=u?p.filter(e=>e.id!==u.role.id&&_(e)):[];return(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(j,{title:d(`settings.roles.title`),action:t&&(0,Q.jsx)(y,{label:d(`settings.roles.new`),variant:`default`,onClick:()=>b(null),children:(0,Q.jsx)(R,{})})}),(0,Q.jsx)(x,{error:r.error}),r.isPending?(0,Q.jsx)(E,{}):p.length?p.map(e=>{let n=t&&!e.seeded&&_(e);return(0,Q.jsxs)(K,{compact:!0,title:(0,Q.jsxs)(`span`,{className:`flex min-w-0 items-baseline gap-2`,children:[(0,Q.jsx)(`span`,{dir:`auto`,className:`min-w-0`,children:J(e)}),e.seeded&&(0,Q.jsx)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:d(`settings.roles.builtIn`)})]}),description:e.permissions.length?e.permissions.map(e=>h[e].label).join(` · `):d(`settings.roles.readOnly`),children:[(0,Q.jsx)(`span`,{className:`text-xs whitespace-nowrap text-muted-foreground tabular-nums`,children:d(`settings.roles.memberships`,{count:e.assigned})}),n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(y,{label:d(`settings.roles.editNamed`,{name:J(e)}),onClick:()=>b(e),children:(0,Q.jsx)(H,{})}),e.assigned?(0,Q.jsx)(y,{label:d(`settings.roles.deleteNamed`,{name:J(e)}),onClick:()=>{o.reset(),f({role:e,reassignTo:`reader`})},children:(0,Q.jsx)(V,{})}):(0,Q.jsx)(T,{label:d(`settings.roles.deleteNamed`,{name:J(e)}),icon:(0,Q.jsx)(V,{}),danger:!0,description:d(`settings.roles.deleteUnused`,{name:J(e)}),onConfirm:()=>M(e)})]})]},e.id)}):!r.error&&(0,Q.jsx)(te,{title:d(`settings.roles.empty`)}),(0,Q.jsx)(w,{title:s?.role?d(`settings.roles.edit`):d(`settings.roles.new`),open:!!s,onOpenChange:e=>{e||l(null)},busy:m,children:s&&(0,Q.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),A(s.role,s.name.trim(),s.permissions).then(()=>{l(null),S.success(d(`settings.roles.saved`))}).catch(()=>{})},children:[(0,Q.jsx)(D,{label:d(`settings.roles.name`),value:s.name,onChange:e=>l({...s,name:e.target.value}),maxLength:40,required:!0,autoFocus:!0}),(0,Q.jsxs)(`fieldset`,{className:`mb-4`,children:[(0,Q.jsx)(`legend`,{className:`mb-1 text-sm font-medium`,children:d(`settings.roles.actions`)}),(0,Q.jsx)(`p`,{className:`mt-0 mb-1 text-xs text-muted-foreground`,children:d(`settings.roles.everyoneReads`)}),c.map(e=>(0,Q.jsx)(ee,{label:h[e].label,description:h[e].description,checked:s.permissions.includes(e),disabled:m||!g(e),onCheckedChange:t=>l({...s,permissions:t?[...s.permissions,e]:s.permissions.filter(t=>t!==e)})},e))]}),s.role&&s.role.assigned>0&&(0,Q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:d(`settings.roles.changesApply`,{count:s.role.assigned})}),(0,Q.jsx)(N,{error:i.error??a.error,pending:m,submitLabel:d(`settings.roles.save`),submitDisabled:!s.name.trim(),onCancel:()=>l(null)})]})}),(0,Q.jsx)(w,{title:d(`settings.roles.delete`),open:!!u,onOpenChange:e=>{e||f(null)},busy:o.isPending,children:u&&(0,Q.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),M(u.role,u.reassignTo).catch(()=>{})},children:[(0,Q.jsx)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:d(`settings.roles.reassignDescription`,{count:u.role.assigned,name:J(u.role)})}),(0,Q.jsx)(k,{label:d(`settings.roles.moveTo`),value:u.reassignTo,onValueChange:e=>e&&f({...u,reassignTo:e}),children:F.map(e=>(0,Q.jsx)(C,{value:e.id,children:J(e)},e.id))}),(0,Q.jsx)(N,{error:o.error,pending:o.isPending,danger:!0,submitLabel:d(`settings.roles.delete`),pendingLabel:d(`settings.lifecycle.deleting`),onCancel:()=>f(null)})]})})]})}var ce=[`tickets`,`workflow`,`fields`,`labels`,`relations`,`comments`,`evidence`,`links`],le=()=>d(`admin.import.notExport`),ue=e=>e?.status===`running`,de=e=>e.issues.some(e=>e.severity===`error`);function fe(e){let{done:t,failed:n,total:r}=e.progress,i={status:a[e.status],done:t,failed:n,count:r};return d(n?`admin.import.progressFailed`:`admin.import.progress`,i)}function pe({workspaceId:e}){let[t,n]=(0,Z.useState)(!1),[r,i]=(0,Z.useState)(null),a=P({...v.query(`list_imports`,{workspaceId:e}),refetchInterval:e=>e.state.data?.some(ue)?2e3:!1}),o=e=>{i(e),n(!0)};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(K,{title:d(`admin.import.title`),description:d(`admin.import.description`),children:(0,Q.jsxs)(A,{onClick:()=>o(null),children:[(0,Q.jsx)(ne,{}),d(`admin.import.action`)]})}),a.data?.map(e=>(0,Q.jsx)(K,{compact:!0,title:(0,Q.jsxs)(Q.Fragment,{children:[e.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.key})]}),description:(0,Q.jsxs)(Q.Fragment,{children:[fe(e),` · `,(0,Q.jsx)(M,{value:e.updatedAt})]}),children:(0,Q.jsx)(A,{size:`sm`,variant:`ghost`,"aria-label":d(`admin.import.detailsOf`,{name:e.name}),onClick:()=>o(e.id),children:d(`admin.import.details`)})},e.id)),(0,Q.jsx)(w,{title:d(`admin.import.action`),open:t,onOpenChange:n,children:r?(0,Q.jsx)(Se,{workspaceId:e,runId:r,onClose:()=>n(!1)}):(0,Q.jsx)(be,{workspaceId:e,onStarted:i,onCancel:()=>n(!1)})})]})}var me=[`file`,...f],he=e=>e===`file`?d(`admin.import.exportFile`):n[e].label,ge={edition:`cloud`,signIn:`password`,baseUrl:``,workspace:``,email:``,username:``,password:``,apiKey:``,token:``},_e=e=>({name:`baseUrl`,label:d(`admin.import.siteUrl`),type:`url`,placeholder:e}),ve={linear:()=>[{name:`token`,label:d(`admin.import.apiKey`),type:`password`}],jira:({edition:e})=>[{name:`edition`,label:d(`admin.import.jiraEdition`),choices:u},_e(e===`cloud`?`https://example.atlassian.net`:`https://jira.example.com`),...e===`cloud`?[{name:`email`,label:d(`admin.import.accountEmail`),type:`email`},{name:`token`,label:d(`admin.import.apiToken`),type:`password`}]:[{name:`token`,label:d(`admin.import.personalToken`),type:`password`}]],trello:()=>[{name:`apiKey`,label:d(`admin.import.apiKey`),type:`password`},{name:`token`,label:d(`admin.import.token`),type:`password`}],plane:()=>[{..._e(`https://api.plane.so`),label:d(`admin.import.apiUrl`)},{name:`workspace`,label:d(`admin.import.workspaceSlug`),placeholder:`my-team`},{name:`token`,label:d(`admin.import.apiToken`),type:`password`}],planka:({signIn:e})=>[_e(`https://planka.example.com`),{name:`signIn`,label:d(`admin.import.signInWith`),choices:m},...e===`password`?[{name:`username`,label:d(`admin.import.username`)},{name:`password`,label:d(`admin.import.password`),type:`password`}]:[{name:`token`,label:d(`admin.import.apiKey`),type:`password`}]],kaneo:()=>[_e(`https://kaneo.example.com`),{name:`token`,label:d(`admin.import.apiKey`),type:`password`}]},ye=(e,t)=>/^[A-Z][A-Z0-9]{1,9}$/.test(e)?e:re(t);function be({workspaceId:e,onStarted:r,onCancel:a}){let[s,c]=(0,Z.useState)(`file`),[l,u]=(0,Z.useState)(ge),[f,p]=(0,Z.useState)(),[m,h]=(0,Z.useState)(``),[g,te]=(0,Z.useState)(!0),[_,v]=(0,Z.useState)(),[y,b]=(0,Z.useState)(),[S,w]=(0,Z.useState)(),[T,E]=(0,Z.useState)(``),[A,j]=(0,Z.useState)(``),[M,P]=(0,Z.useState)(`workspace`),[F,I]=(0,Z.useState)(),L=O(`list_import_source_projects`),R=O(`preview_import`),z=O(`preview_source_import`),B=O(`start_import`),V=(0,Z.useRef)(0),H=()=>{V.current+=1,I(void 0),R.reset(),z.reset()},U=e=>t=>{e(t),H()},ne=()=>{H(),p(void 0),h(``),L.reset()},W=e=>{e&&(h(e.ref),E(e.name),j(ye(e.key,e.name)),H())},re=e=>t=>{u(n=>({...n,[e]:t})),w(void 0),ne()},G=s===`file`?[]:ve[s](l),K=s===`file`?void 0:t.safeParse({provider:s,...Object.fromEntries(G.map(e=>[e.name,l[e.name]]))}),q=K?.success?K.data:void 0,oe=s===`file`?!!_:!!m,J=!!F&&!de(F),Y=s!==`file`&&!f,X=e=>V.current===e,se=s===`file`?R:z,$=s===`file`?void 0:n[s];return(0,Q.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=V.current;J?B.mutateAsync({workspaceId:e,importId:F.id,expectedVersion:F.version}).then(e=>r(e.id)).catch(()=>{}):Y&&!q?w(Error(K?.error?.issues[0]?.message??d(`admin.import.checkConnection`))):q&&Y?L.mutateAsync({workspaceId:e,source:q}).then(e=>{X(n)&&(p(e),W(e[0]))}).catch(()=>{}):q?z.mutateAsync({workspaceId:e,key:A,name:T,visibility:M,source:q,sourceProject:m,includeComments:g}).then(e=>{X(n)&&I(e)}).catch(()=>{}):_&&R.mutateAsync({workspaceId:e,key:A,name:T,visibility:M,bundle:_}).then(e=>{X(n)&&I(e)}).catch(()=>{})},children:[(0,Q.jsx)(k,{label:d(`admin.import.source`),value:s,onValueChange:e=>{let t=me.find(t=>t===e);t&&(c(t),v(void 0),b(void 0),u(ge),w(void 0),ne())},children:me.map(e=>(0,Q.jsx)(C,{value:e,children:he(e)},e))}),s===`file`?(0,Q.jsx)(D,{label:d(`admin.import.file`),type:`file`,accept:`application/json,.json`,required:!0,onChange:e=>{let t=e.currentTarget.files?.[0];if(v(void 0),H(),b(void 0),!t)return;let n=V.current;t.text().then(e=>{let t=JSON.parse(e);if(!o.pick({format:!0}).safeParse(t).success)throw Error(le());let r=i.parse(t);V.current===n&&(v(r),E(r.project.name),j(ye(r.project.key,r.project.name)))}).catch(e=>{V.current===n&&b(e instanceof SyntaxError?Error(le()):e)})}}):(0,Q.jsxs)(Q.Fragment,{children:[G.map(e=>e.choices?(0,Q.jsx)(k,{label:e.label,value:l[e.name],onValueChange:t=>{t!==null&&re(e.name)(t)},children:Object.entries(e.choices).map(([e,t])=>(0,Q.jsx)(C,{value:e,children:t},e))},e.name):(0,Q.jsx)(D,{label:e.label,type:e.type??`text`,required:!0,autoComplete:`off`,placeholder:e.placeholder,value:l[e.name],onChange:t=>re(e.name)(t.target.value)},e.name)),(0,Q.jsx)(`p`,{className:`-mt-2 mb-4 text-xs text-muted-foreground`,children:$?.setup}),(0,Q.jsx)(x,{error:S??L.error}),f&&$&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(k,{label:$.project,value:m,onValueChange:e=>W(f.find(t=>t.ref===e)),children:f.map(e=>(0,Q.jsxs)(C,{value:e.ref,children:[e.group&&(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.group,` /`]}),` `,e.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:e.key})]},e.ref))}),f.length===0&&(0,Q.jsx)(`p`,{className:`-mt-2 mb-4 text-sm text-muted-foreground`,children:d(`admin.import.noProjects`,{label:$.project})}),(0,Q.jsx)(ee,{label:d(`admin.import.includeComments`),checked:g,onCheckedChange:U(te)})]})]}),(0,Q.jsx)(x,{error:y}),oe&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(D,{label:d(`admin.import.projectName`),value:T,onChange:e=>U(E)(e.target.value),required:!0,maxLength:120}),(0,Q.jsx)(ie,{value:A,onChange:U(j)}),(0,Q.jsx)(ae,{value:M,onChange:U(P)})]}),F&&(0,Q.jsx)(xe,{run:F}),(0,Q.jsx)(N,{error:se.error??B.error,pending:L.isPending||se.isPending||B.isPending,submitLabel:d(J?`admin.import.start`:Y?`admin.import.connect`:`admin.import.preview`),pendingLabel:d(J?`admin.import.starting`:Y?`admin.import.connecting`:`admin.import.checking`),submitDisabled:Y?!1:!oe||!!F&&!J,onCancel:a})]})}function xe({run:e}){let t=e.members.filter(e=>e.userId),n=e.members.filter(e=>!e.userId),r=[...ce.map(t=>[d(`admin.import.count.${t}`),e.counts[t]?String(e.counts[t]):``]),[d(`admin.import.matched`),s(t.map(e=>e.name))],[d(`admin.import.unmatched`),s(n.map(e=>e.name))]];return(0,Q.jsxs)(`section`,{"aria-label":d(`admin.import.previewLabel`),className:`mt-2 border-t pt-3`,children:[(0,Q.jsx)(B,{rows:r}),e.issues.length>0&&(0,Q.jsx)(`ul`,{className:`m-0 list-none space-y-1.5 p-0 text-sm`,children:e.issues.map(e=>(0,Q.jsxs)(`li`,{className:e.severity===`error`?`text-destructive`:`text-muted-foreground`,children:[(0,Q.jsx)(`span`,{className:`sr-only`,children:e.severity===`error`?d(`admin.import.errorPrefix`):d(`admin.import.notePrefix`)}),e.message]},e.message))})]})}function Se({workspaceId:e,runId:t,onClose:n}){let r=P({...v.query(`get_import`,{workspaceId:e,importId:t}),refetchInterval:e=>ue(e.state.data)?1e3:!1}),i=O(`cancel_import`);if(r.error)return(0,Q.jsx)(x,{error:r.error});let a=r.data;if(!a)return(0,Q.jsx)(E,{});let{done:o,failed:s,total:c}=a.progress,l=c?Math.round((o+s)/c*100):0;return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`p`,{className:`mt-0 mb-2 text-sm`,children:[a.name,` `,(0,Q.jsx)(`span`,{className:`font-mono text-xs text-muted-foreground`,children:a.key})]}),(0,Q.jsxs)(`div`,{className:`my-3`,children:[(0,Q.jsx)(`div`,{role:`progressbar`,"aria-label":d(`admin.import.progressLabel`),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":l,className:`h-1.5 overflow-hidden rounded-full bg-border`,children:(0,Q.jsx)(`div`,{className:`h-full bg-primary transition-[width] duration-300`,style:{width:`${l}%`}})}),(0,Q.jsx)(`p`,{role:`status`,className:`mt-2 mb-0 text-sm text-muted-foreground tabular-nums`,children:fe(a)})]}),a.errors.length>0&&(0,Q.jsx)(`ul`,{"aria-label":d(`admin.import.notImported`),className:`m-0 list-none space-y-1 p-0 text-sm`,children:a.errors.map((e,t)=>(0,Q.jsxs)(`li`,{className:`text-destructive`,children:[e.label,`: `,e.message]},t))}),(0,Q.jsx)(x,{error:i.error}),(0,Q.jsxs)(g,{children:[a.status===`running`&&(0,Q.jsx)(A,{disabled:i.isPending,onClick:()=>void i.mutateAsync({workspaceId:e,importId:a.id,expectedVersion:a.version}).catch(()=>{}),children:d(`admin.import.stop`)}),a.projectId&&a.status!==`running`&&(0,Q.jsx)(A,{variant:`default`,render:(0,Q.jsx)(W,{to:`/projects/$projectId`,params:{projectId:a.projectId}}),onClick:n,children:d(`admin.import.openProject`)})]})]})}function Ce({workspace:e,people:t,canTransfer:n}){let[r,i]=(0,Z.useState)(!1),[a,o]=(0,Z.useState)(``),s=O(`transfer_workspace`),c=t.find(t=>t.userId===e.ownerId),l=t.filter(t=>t.role===`admin`&&!t.disabled&&t.userId!==e.ownerId),u=l.find(e=>e.email===a);return(0,Q.jsx)(K,{title:d(`settings.workspace.owner`),description:c?`${c.name} · ${c.email}`:e.ownerId?void 0:d(`settings.workspace.noOwner`),children:n&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(A,{onClick:()=>{o(``),i(!0)},children:d(`settings.workspace.transfer`)}),(0,Q.jsx)(w,{title:d(`settings.workspace.transfer`),open:r,onOpenChange:e=>{i(e),e||s.reset()},busy:s.isPending,children:(0,Q.jsxs)(`form`,{onSubmit:t=>{t.preventDefault(),u&&s.mutateAsync({workspaceId:e.id,expectedVersion:e.version,userId:u.userId}).then(()=>{i(!1),S.success(d(`settings.workspace.transferred`,{name:u.name,workspace:e.name}))}).catch(()=>{})},children:[l.length?(0,Q.jsx)(Y,{people:l,value:a,onChange:o,disabled:s.isPending,label:d(`settings.workspace.newOwner`),anyAccount:!1}):(0,Q.jsx)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:d(`settings.workspace.noEligible`)}),(0,Q.jsxs)(`p`,{className:`mt-0 text-sm text-muted-foreground`,children:[u?d(`settings.workspace.chosenCan`,{name:u.name}):d(`settings.workspace.newOwnerCan`),` `,c?d(`settings.workspace.ownerStays`,{name:c.name}):``]}),(0,Q.jsx)(N,{error:s.error,pending:s.isPending,submitLabel:d(`settings.workspace.transfer`),pendingLabel:d(`settings.workspace.transferring`),submitDisabled:!u,onCancel:()=>i(!1)})]})})]})})}function we({workspaceId:e,section:t}){let n=b(),r=I(),i=F(),a=r.data?.find(t=>t.id===e),o=P({...v.query(`list_workspace_members`,{workspaceId:e}),enabled:!!a?.role}),s=P({...v.query(`list_workspace_roles`,{workspaceId:e}),enabled:!!a?.role}),c=O(`update_workspace`),u=O(`set_workspace_member`);if(r.isPending)return(0,Q.jsx)(E,{});if(!a?.role)return(0,Q.jsxs)(te,{title:d(`settings.workspace.unavailable`),children:[(0,Q.jsx)(x,{error:r.error}),(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/`}),children:d(`settings.workspace.backToProjects`)})]});let f=l(a),p={admin:a.role===`admin`,capabilities:f},m=f.includes(`workspace.manage`),h=a.ownerId===n.id||n.admin,g=i.data?.filter(e=>e.workspaceId===a.id).length??0;return(0,Q.jsx)(Q.Fragment,{children:(0,Q.jsxs)(q,{title:d(`settings.workspace.title`),section:t,children:[(0,Q.jsxs)(G,{value:`general`,children:[(0,Q.jsx)(`section`,{children:(0,Q.jsx)(oe,{name:a.name,description:a.description,nameLabel:d(`settings.workspace.name`),canEdit:m,version:a.version,pending:c.isPending,error:c.error,editLabel:d(`settings.workspace.edit`),badges:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(L,{variant:`secondary`,className:`ml-0.5 font-mono text-[10px] font-normal`,children:a.slug}),(0,Q.jsx)(_,{label:d(`settings.workspace.copyKey`),value:a.slug,size:`icon-xs`})]}),onSave:t=>c.mutateAsync({workspaceId:e,expectedVersion:a.version,name:t.name,description:t.description}).then(()=>S.success(d(`settings.workspace.saved`)))})}),(0,Q.jsxs)(`section`,{children:[(0,Q.jsx)(K,{title:d(`settings.workspace.projects`),description:d(`settings.workspace.projectCount`,{count:g}),children:(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/`}),children:d(`settings.workspace.viewProjects`)})}),(0,Q.jsx)(Ce,{workspace:a,people:o.data??[],canTransfer:h}),(0,Q.jsx)(K,{title:d(`settings.workspace.members`),description:d(`settings.workspace.membersDescription`),children:(0,Q.jsx)(A,{render:(0,Q.jsx)(W,{to:`/workspaces/$workspaceId/settings`,params:{workspaceId:e},search:{section:`members`}}),children:d(`settings.workspace.manageMembers`)})}),f.includes(`ticket.write`)&&(0,Q.jsx)(pe,{workspaceId:e}),h&&(0,Q.jsx)(z,{workspace:a})]})]}),(0,Q.jsxs)(G,{value:`members`,children:[(0,Q.jsx)(X,{people:o.data??[],pending:u.isPending,loading:o.isPending,error:o.error,canAdmin:f.includes(`member.manage`),ownerId:a.ownerId,scope:`workspace`,roles:s.data,authority:p,onChange:(t,n)=>u.mutateAsync({workspaceId:e,email:t,role:n})}),f.includes(`invitation.manage`)&&(0,Q.jsx)(U,{workspaceId:e})]}),(0,Q.jsx)(G,{value:`roles`,children:(0,Q.jsx)($,{workspaceId:e,canEdit:m,authority:p})}),(0,Q.jsx)(G,{value:`labels`,children:(0,Q.jsx)(se,{owner:{workspaceId:e},canAdmin:m})})]})})}export{we as WorkspaceSettings};
|