@consenti/api 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +917 -207
  2. package/dist/chunk-IY4L6MNB.js +2 -0
  3. package/dist/chunk-IY4L6MNB.js.map +1 -0
  4. package/dist/chunk-O5UG4OYI.js +2 -0
  5. package/dist/chunk-O5UG4OYI.js.map +1 -0
  6. package/dist/dashboard/assets/ApiConfig-CE-Noelz.js +1 -0
  7. package/dist/dashboard/assets/ArchivedProfileList-Bw-fx-BD.js +1 -0
  8. package/dist/dashboard/assets/AuditLog-D6HiTQ1o.js +1 -0
  9. package/dist/dashboard/assets/ChangePassword-D2rPkzD1.js +1 -0
  10. package/dist/dashboard/assets/ConfirmDialog-DTtw7VJ-.js +1 -0
  11. package/dist/dashboard/assets/ConsentList-BWOvPOMG.js +1 -0
  12. package/dist/dashboard/assets/ConsentTemplateEditor-BKIEnLmA.js +1 -0
  13. package/dist/dashboard/assets/ConsentTemplateList-DCys2nM3.js +1 -0
  14. package/dist/dashboard/assets/HeadingTagInput-BTjrdzlS.js +1 -0
  15. package/dist/dashboard/assets/HowItWorks-AeyjfQGO.js +1 -0
  16. package/dist/dashboard/assets/PermissionGate-Bhhf7SMh.js +1 -0
  17. package/dist/dashboard/assets/PreviewPane-Dq5K1h2L.js +35 -0
  18. package/dist/dashboard/assets/ProfileEditor-BXtaE0tL.js +2 -0
  19. package/dist/dashboard/assets/ProfileList-CWKSAgu0.js +1 -0
  20. package/dist/dashboard/assets/ProfileVersionHistory-1h8sUgog.js +3 -0
  21. package/dist/dashboard/assets/RecordDetailModal-FaFhzQXi.js +1 -0
  22. package/dist/dashboard/assets/Reports-DWEjQOKh.js +1 -0
  23. package/dist/dashboard/assets/RoleList-BSGoqlzp.js +1 -0
  24. package/dist/dashboard/assets/Select-DjJNwlbY.js +1 -0
  25. package/dist/dashboard/assets/Settings-CVYrlyLm.js +1 -0
  26. package/dist/dashboard/assets/SetupWizard-4NTb5bZj.js +1 -0
  27. package/dist/dashboard/assets/Table-DH_jh8_N.js +1 -0
  28. package/dist/dashboard/assets/TenantList-5AwFtoHf.js +1 -0
  29. package/dist/dashboard/assets/UITemplateEditor-9A55scBe.js +1 -0
  30. package/dist/dashboard/assets/UITemplateList-BS7X4u4F.js +1 -0
  31. package/dist/dashboard/assets/UserList-SPkMyFRy.js +1 -0
  32. package/dist/dashboard/assets/VendorList-C5fPhr6U.js +1 -0
  33. package/dist/dashboard/assets/VisitorList-COP1SyNd.js +1 -0
  34. package/dist/dashboard/assets/check-o5cp1s2J.js +1 -0
  35. package/dist/dashboard/assets/client-ymc9nwWr.js +1 -0
  36. package/dist/dashboard/assets/copy-C01KoUUH.js +1 -0
  37. package/dist/dashboard/assets/createLucideIcon-MdjI3m3u.js +1 -0
  38. package/dist/dashboard/assets/de-DET92Jb5.js +5 -0
  39. package/dist/dashboard/assets/debounce-DlvAAT2V.js +1 -0
  40. package/dist/dashboard/assets/dist-DlhLroYC.js +1 -0
  41. package/dist/dashboard/assets/es-CJNunrnU.js +5 -0
  42. package/dist/dashboard/assets/external-link-DVe00ZBK.js +1 -0
  43. package/dist/dashboard/assets/fr-akfTuf5x.js +5 -0
  44. package/dist/dashboard/assets/history-CHTts_m2.js +1 -0
  45. package/dist/dashboard/assets/index-DW3qOrry.css +2 -0
  46. package/dist/dashboard/assets/index-H_Zm0X-u.js +6 -0
  47. package/dist/dashboard/assets/ja-B0nLWkOd.js +5 -0
  48. package/dist/dashboard/assets/profiles-DmrdGv7t.js +1 -0
  49. package/dist/dashboard/assets/roles-C0dJPFl4.js +1 -0
  50. package/dist/dashboard/assets/search-Bd2RdDRh.js +1 -0
  51. package/dist/dashboard/assets/templates-B2xiivh4.js +1 -0
  52. package/dist/dashboard/assets/templates-CnMoLavN.js +1 -0
  53. package/dist/dashboard/assets/trash-2-BBnkdgm_.js +1 -0
  54. package/dist/dashboard/assets/trash-Dj1jhzHJ.js +1 -0
  55. package/dist/dashboard/assets/useHashQuery-B5ytMIMp.js +1 -0
  56. package/dist/dashboard/assets/users-czK8LRVh.js +1 -0
  57. package/dist/dashboard/assets/x-BRuyBEQP.js +1 -0
  58. package/dist/dashboard/assets/zh-CN-Dxg3G-BL.js +5 -0
  59. package/dist/dashboard/index.html +4 -2
  60. package/dist/dist-Z5RVTVBT.js +2 -0
  61. package/dist/dist-Z5RVTVBT.js.map +1 -0
  62. package/dist/index.cjs +129 -9089
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +963 -254
  65. package/dist/index.d.ts +963 -254
  66. package/dist/index.js +129 -9043
  67. package/dist/index.js.map +1 -1
  68. package/dist/profiles-XTYPWLVC.js +2 -0
  69. package/dist/profiles-XTYPWLVC.js.map +1 -0
  70. package/dist/widget/widget.css +1 -0
  71. package/dist/widget/widget.js +1 -2304
  72. package/package.json +19 -12
  73. package/dist/dashboard/assets/index-BBbhHyc_.js +0 -2637
  74. package/dist/dashboard/assets/index-DYK73WL5.css +0 -1
@@ -0,0 +1,5 @@
1
+ var e={_section_nav:`── ナビゲーション ─────────────────────────────────────`,"nav.dashboard":`ダッシュボード`,"nav.consentBanners":`同意バナー`,"nav.consentTemplates":`Cookie テンプレート`,"nav.uiTemplates":`UI テンプレート`,"nav.profiles":`プロファイル`,"nav.consents":`同意記録`,"nav.visitors":`訪問者`,"nav.users":`ユーザー`,"nav.roles":`ロール`,"nav.sites":`サイト`,"nav.vendors":`TCF ベンダー`,"nav.reports":`レポート`,"nav.audit":`監査ログ`,"nav.api":`API`,"nav.settings":`設定`,"nav.adminDashboard":`管理ダッシュボード`,_section_layout:`── レイアウト ─────────────────────────────────────`,"layout.expandSidebar":`サイドバーを展開`,"layout.collapseSidebar":`サイドバーを折りたたむ`,"layout.signOut":`サインアウト`,"layout.toggleDark":`ダークモードに切り替え`,"layout.toggleLight":`ライトモードに切り替え`,"layout.poweredBy":`提供元`,_section_common:`── 共通 ─────────────────────────────────────────`,"common.loading":`読み込み中…`,"common.searching":`検索中…`,"common.save":`保存`,"common.saving":`保存中…`,"common.cancel":`キャンセル`,"common.close":`閉じる`,"common.delete":`削除`,"common.edit":`編集`,"common.create":`作成`,"common.confirm":`確認`,"common.noData":`データがありません`,"common.search":`Search…`,"common.perPage":`1ページあたり`,"common.goToPage":`ページに移動`,"common.pageOfTotal":`{{total}} ページ中 {{page}} ページ目`,"common.noResults":`No results match your search.`,"common.exportCsv":`CSV をエクスポート`,"common.duplicate":`複製`,"common.active":`有効`,"common.inactive":`無効`,"common.name":`名前`,"common.email":`メール`,"common.status":`ステータス`,"common.created":`作成日時`,"common.id":`ID`,"common.add":`追加`,"common.remove":`削除`,"common.revoke":`取り消す`,"common.required":`必須`,"common.version":`バージョン`,"common.locale":`ロケール`,"common.country":`国`,"common.source":`ソース`,"common.grantAll":`すべて許可`,"common.revokeAll":`すべて取り消す`,"common.granted":`許可済み`,"common.page":`ページ {{n}}`,"common.prev":`前へ`,"common.next":`次へ`,"common.you":`あなた`,"common.default":`デフォルト`,"common.hide":`非表示`,"common.show":`表示`,"common.activate":`有効化`,"common.deactivate":`無効化`,"common.newRole":`新しいロール`,"common.copyToClipboard":`クリップボードにコピー`,"common.back":`戻る`,"common.copyId":`ID をコピー`,"common.mandatory":`必須`,"common.optional":`任意`,"common.roles":`ロール`,"common.showPassword":`パスワードを表示`,"common.hidePassword":`パスワードを非表示`,"common.updated":`更新済み`,_section_locale:`── 言語切り替え ─────────────────────────────────`,"locale.en":`英語`,"locale.switcherAria":`言語を切り替える`,_section_login:`── ログイン ─────────────────────────────────────`,"login.title":`{{appName}} 管理画面`,"login.subtitle":`アカウントにサインインしてください`,"login.email":`メール`,"login.emailPlaceholder":`admin@example.com`,"login.password":`パスワード`,"login.submit":`サインイン`,"login.submitting":`サインイン中…`,"login.error.invalid":`メールアドレスまたはパスワードが無効です`,"login.devSignIn":`⚡ 開発用: user@consenti.dev としてサインイン`,_section_setupWizard:`── セットアップウィザード ─────────────────────`,"setupWizard.welcome.title":`{{appName}} へようこそ`,"setupWizard.welcome.body":`同意管理のセットアップを行いましょう。数分で完了します。現在の設定内容を確認し、コンプライアンスプロファイルの初期セットをインストールするお手伝いをします。`,"setupWizard.welcome.docsLink":`ドキュメントを見る`,"setupWizard.welcome.howItWorksLink":`Consenti の仕組みを見る`,"setupWizard.welcome.getStarted":`始める`,"setupWizard.welcome.skip":`セットアップをスキップ`,"setupWizard.config.title":`現在の設定`,"setupWizard.config.subtitle":`設定ファイルと環境変数から解決された内容と既定値をマージした結果です。機密情報は非表示になっています。`,"setupWizard.back":`戻る`,"setupWizard.continue":`続ける`,"setupWizard.profiles.title":`デフォルトのコンプライアンスプロファイル`,"setupWizard.profiles.subtitle":`Consenti には、主要なプライバシー規制に対応した8種類のコンプライアンスプロファイルが用意されています。今インストールするものを選択してください。後から追加することもできます。`,"setupWizard.profiles.selectAll":`8種類すべてのデフォルトプロファイルをインストール`,"setupWizard.profiles.installAndContinue":`インストールして続ける`,"setupWizard.profiles.skipAndContinue":`スキップして続ける`,"setupWizard.profiles.error":`選択したプロファイルをインストールできませんでした。後でプロファイル画面から再試行できます。`,"setupWizard.confirmation.title":`準備が整いました`,"setupWizard.confirmation.seededSummary":`{{count}} 件のコンプライアンスプロファイルをインストールしました。`,"setupWizard.confirmation.noneSeeded":`プロファイルはインストールされませんでした。プロファイル画面からいつでも作成できます。`,"setupWizard.confirmation.readinessTitle":`本番運用前に`,"setupWizard.confirmation.readinessJsonStorage":`現在 JSON ファイルストレージドライバーを使用しています。開発には適していますが、本番環境ではデータベースドライバー(node:sqlite、PostgreSQL、MySQL、MongoDB)への切り替えを推奨します。`,"setupWizard.confirmation.readinessDefaultCredentials":`管理者の認証情報が設定されていないため、Consenti はデモ用の認証情報を使用しています。本番運用前に CONSENTI_ADMIN_EMAIL と CONSENTI_ADMIN_PASSWORD を設定してください。`,"setupWizard.confirmation.howItWorks":`Consenti の仕組みを見る`,"setupWizard.confirmation.goToDashboard":`ダッシュボードへ`,_section_dashboard:`── ダッシュボード ─────────────────────────────`,"dashboard.title":`ダッシュボード`,"dashboard.stats.totalConsents":`同意の合計`,"dashboard.stats.totalVisitors":`訪問者数合計`,"dashboard.stats.accepted":`承認`,"dashboard.stats.acceptedSub":`≥80% の Cookie が許可済み`,"dashboard.stats.rejected":`拒否`,"dashboard.stats.rejectedSub":`≤20% の Cookie が許可済み`,"dashboard.chart.timeline":`同意(過去30日)`,"dashboard.chart.timelineAria":`同意タイムラインのグラフ`,"dashboard.chart.countries":`上位の国`,"dashboard.chart.noData":`データがありません。`,"dashboard.chart.noCountryData":`国別データがありません。`,"dashboard.gpc.label":`GPC 検出率`,"dashboard.gpc.sub":`{{detected}} / {{total}} 件の同意`,"dashboard.viewReports":`詳細レポートを見る →`,_section_reports:`── レポート ──────────────────────────────────────────`,"reports.title":`レポート`,"reports.filters.from":`開始日`,"reports.filters.to":`終了日`,"reports.filters.apply":`適用`,"reports.optin.total":`合計決定数`,"reports.optin.granted":`許可`,"reports.optin.denied":`拒否`,"reports.optin.managed":`一部管理`,"reports.optin.byDate":`オプトイン推移`,"reports.optin.byDateAria":`期間ごとのオプトイン決定`,"reports.optin.byLocale":`ロケール別`,"reports.category.title":`カテゴリ別`,"reports.legend.granted":`許可`,"reports.legend.denied":`拒否`,"reports.legend.objected":`異議あり`,"reports.legend.managed":`管理済み`,_section_consents:`── 同意記録 ───────────────────────────────────`,"consents.title":`同意記録`,"consents.filterFrom":`開始`,"consents.filterTo":`終了`,"consents.filterGpc":`GPC のみ`,"consents.records":`{{n}} 件の記録`,"consents.empty":`まだ同意記録はありません。`,"consents.col.visitorId":`訪問者 ID`,"consents.col.profile":`プロファイル`,"consents.col.locale":`ロケール`,"consents.col.gpc":`GPC`,"consents.col.age":`年齢`,"consents.col.source":`ソース`,"consents.col.created":`作成日時`,"consents.gpcYes":`はい`,"consents.ageVerified":`確認済み`,"consents.searchPlaceholder":`訪問者、プロファイル、ロケール、ソースを検索…`,"consents.detail.title":`同意記録`,"consents.detail.updated":`更新日時`,"consents.detail.consentJson":`同意データ`,"consents.detail.signature":`署名`,"consents.detail.signed":`署名済み`,"consents.detail.unsigned":`未署名`,_section_visitors:`── 訪問者 ─────────────────────────────────────`,"visitors.title":`訪問者`,"visitors.empty":`まだ訪問者は記録されていません。`,"visitors.col.visitorId":`訪問者 ID`,"visitors.col.country":`国`,"visitors.col.firstSeen":`初回訪問`,"visitors.col.lastSeen":`最終訪問`,"visitors.searchPlaceholder":`訪問者ID、国を検索…`,"visitors.detail.title":`訪問者`,"visitors.detail.region":`地域`,"visitors.detail.city":`市区町村`,_section_users:`── ユーザー ───────────────────────────────────`,"users.title":`ユーザー`,"users.count":`{{n}} 人のユーザー`,"users.newUser":`+ 新規ユーザー`,"users.createForm.title":`ユーザー作成`,"users.createForm.namePlaceholder":`名前`,"users.createForm.emailPlaceholder":`メール`,"users.createForm.passwordPlaceholder":`パスワード`,"users.createForm.confirmPasswordPlaceholder":`パスワードを確認`,"users.createForm.selectRole":`ロールを選択…`,"users.createForm.passwordMismatch":`パスワードが一致しません`,"users.createForm.error":`ユーザーの作成に失敗しました`,"users.col.status":`ステータス`,"users.status.active":`有効`,"users.status.inactive":`無効`,"users.action.activate":`有効化`,"users.action.deactivate":`無効化`,"users.dialog.delete.title":`ユーザー「{{name}}」を削除しますか?`,"users.dialog.delete.message":`このユーザーアカウントは完全に削除されます。`,_section_roles:`── ロールと権限 ─────────────────────────────`,"roles.title":`ロールと権限`,"roles.list.heading":`ロール`,"roles.list.empty":`まだロールがありません。まず1つ作成してください。`,"roles.form.roleNameLabel":`ロール名`,"roles.form.roleNamePlaceholder":`例: Editor`,"roles.form.descriptionLabel":`説明`,"roles.form.descriptionPlaceholder":`任意の説明`,"roles.perms.heading":`権限 — {{name}}`,"roles.perms.selectPrompt":`権限を管理するロールを選択してください`,"roles.perms.clickPrompt":`左側のロールをクリックして、権限の確認と管理を行ってください。`,"roles.perms.noPerms":`システムに定義された権限はありません。`,"roles.error.load":`ロールの読み込みに失敗しました。`,"roles.error.create":`ロールの作成に失敗しました。`,"roles.error.update":`ロールの更新に失敗しました。`,"roles.error.delete":`ロールの削除に失敗しました。`,"roles.error.perm":`権限の更新に失敗しました。`,"roles.dialog.delete.title":`ロール「{{name}}」を削除しますか?`,"roles.dialog.delete.message":`このロールが割り当てられたユーザーは、権限を直ちに失います。`,"roles.aria.editRole":`ロールを編集`,"roles.aria.deleteRole":`ロールを削除`,_section_profiles:`── プロファイル ───────────────────────────────`,"profiles.title":`プロファイル`,"profiles.count":`{{n}} 件のプロファイル`,"profiles.countSingular":`{{n}} 件のプロファイル`,"profiles.newProfile":`+ 新しいプロファイル`,"profiles.empty":`まだプロファイルがありません。まず1つ作成してください。`,"profiles.search.placeholder":`Search profiles…`,"profiles.filter.status":`Status`,"profiles.filter.active":`Active`,"profiles.filter.inactive":`Inactive`,"profiles.archived.cta":`Archived Profiles`,"profiles.archived.title":`Archived Profiles`,"profiles.archived.back":`Back to profiles`,"profiles.archived.hint":`Profile-id directories found on disk with no matching database entry — deleted profiles whose version snapshots weren't. Click one to browse its version history.`,"profiles.archived.empty":`No archived profiles found.`,"profiles.archived.searchPlaceholder":`Search by profile ID…`,"profiles.archived.col.id":`Profile ID`,"profiles.archived.col.versions":`Versions`,"profiles.archived.col.lastModified":`Last Modified`,"profiles.archived.viewHistory":`View history`,"profiles.col.name":`名前`,"profiles.col.defaultLocale":`既定ロケール`,"profiles.col.templates":`テンプレート`,"profiles.col.created":`作成日時`,"profiles.template.cookie":`Cookie:`,"profiles.template.ui":`UI:`,"profiles.action.copyId":`プロファイル ID をコピー`,"profiles.action.copySlug":`Copy compliance group slug`,"profiles.action.copying":`コピー中…`,"profiles.dialog.delete.title":`「{{name}}」を削除しますか?`,"profiles.dialog.delete.message":`このプロファイルとそのすべてのロケール内容は完全に削除されます。`,"profiles.dialog.copy.title":`「{{name}}」を複製しますか?`,"profiles.dialog.copy.message":`このプロファイルとそのすべてのロケール内容が複製されます。`,_section_profileEditor:`── プロファイルエディタ ─────────────────────`,"profileEditor.title.new":`新しいプロファイル`,"profileEditor.title.edit":`プロファイルを編集`,"profileEditor.title.loading":`プロファイルエディタ`,"profileEditor.step.config":`プロファイル設定`,"profileEditor.step.templates":`テンプレート`,"profileEditor.step.content":`コンテンツ`,"profileEditor.step.mainBanner":`メインバナー`,"profileEditor.step.gpcBanner":`GPCバナー`,"profileEditor.step.prefModal":`設定モーダル`,"profileEditor.config.profileName":`プロファイル名`,"profileEditor.config.profileNamePlaceholder":`My Website`,"profileEditor.config.defaultLocale":`既定ロケール`,"profileEditor.config.allowedDomains":`許可ドメイン`,"profileEditor.config.allowedDomainsHint":`*.example.com のようなワイルドカードに対応しています。すべて許可する場合は空欄にしてください。`,"profileEditor.config.regulations":`準拠規制`,"profileEditor.config.reg.gdprLabel":`GDPR`,"profileEditor.config.reg.gdprDesc":`EU/EEA のオプトイン。同意が与えられるまでトラッキングしません。初回訪問時にバナーを表示します。`,"profileEditor.config.reg.ccpaLabel":`CCPA`,"profileEditor.config.reg.ccpaDesc":`カリフォルニアのオプトアウト。Cookie は既定で許可されます。「Do Not Sell」トリガーを提供してください。`,"profileEditor.config.reg.cpraLabel":`CPRA`,"profileEditor.config.reg.cpraDesc":`カリフォルニア 2023。販売/共有はオプトアウト、機微データはオプトイン。GPC を尊重します。`,"profileEditor.config.reg.dpdpaLabel":`DPDPA`,"profileEditor.config.reg.dpdpaDesc":`インド 2023。GDPR と同様のオプトイン。GPC は認識されません。データ受託者の通知が必要です。`,"profileEditor.config.darkMode":`ダークモードを有効にする`,"profileEditor.config.darkModeHint":`ダークテーマのサイト向けに、同意ウィジェットへダークカラーのトークンを適用します。`,"profileEditor.config.dpdpa.heading":`DPDPA — 同意通知に必要な項目`,"profileEditor.config.dpdpa.fiduciary":`データ受託者名`,"profileEditor.config.dpdpa.fiduciaryPlaceholder":`Acme Corp Pvt Ltd`,"profileEditor.config.dpdpa.grievanceEmail":`苦情担当者のメール`,"profileEditor.config.dpdpa.grievanceEmailPlaceholder":`grievance@acme.com`,"profileEditor.config.dpdpa.purpose":`利用目的の説明`,"profileEditor.config.dpdpa.purposePlaceholder":`お客様の体験をパーソナライズするためにデータを収集します…`,"profileEditor.templates.cookieTemplate":`Cookie テンプレート`,"profileEditor.templates.cookieTemplateHint":`設定モーダルに表示する Cookie / 目的を定義します。すべての項目はテンプレートから派生し、プロファイル内では読み取り専用です。`,"profileEditor.templates.selectCookie":`— Cookie テンプレートを選択 —`,"profileEditor.templates.uiTemplate":`UI テンプレート`,"profileEditor.templates.uiTemplateHint":`バナー/モーダルのレイアウト、ボタン数、カテゴリ構造を定義します。テキスト内容はステップ 3〜5 で追加します。`,"profileEditor.templates.selectUi":`— UI テンプレートを選択 —`,"profileEditor.templates.noTemplate":`テンプレートが選択されていません。`,"profileEditor.templates.previewPrompt":`ライブプレビューを表示するには、Cookie テンプレートと UI テンプレートの両方を選択してください。`,"profileEditor.templates.categoriesCount":`カテゴリ`,"profileEditor.templates.buttonsTotal":`合計ボタン数`,"profileEditor.content.loadDefaults":`デフォルト値を読み込む`,"profileEditor.content.loadDefaultsTitle":`コンプライアンス対応の英語デフォルト値でこのセクションを埋める`,"profileEditor.content.loadDefaultsNotice":`デフォルト値は英語のみです — 上のロケールタブで翻訳してください。`,"profileEditor.content.importError":`アップロードされたファイルを解析できませんでした。Consenti のロケールテンプレート形式に一致していることを確認してください。`,"profileEditor.content.mainBanner":`メインバナー`,"profileEditor.content.gpcBanner":`GPC バナー`,"profileEditor.content.prefModal":`設定モーダル`,"profileEditor.content.heading":`見出し`,"profileEditor.content.subheading":`サブ見出し`,"profileEditor.content.bodyText":`本文テキスト`,"profileEditor.content.introText":`導入文(任意)`,"profileEditor.content.buttonLabels":`ボタンラベル`,"profileEditor.content.categoryHeading":`カテゴリ見出し`,"profileEditor.content.categoryDesc":`カテゴリ説明`,"profileEditor.content.categoryFallback":`カテゴリ {{n}}`,"profileEditor.content.buttonLabelPlaceholder":`ボタンのテキスト…`,"profileEditor.content.categoryDescPlaceholder":`この Cookie カテゴリの説明…`,"profileEditor.content.liDescription":`正当な利益の説明(任意)`,"profileEditor.content.liDescriptionPlaceholder":`正当な利益に基づく理由…`,"profileEditor.content.liDescriptionHint":`正当な利益に基づく処理の GDPR 比較衡量テストの根拠を、訪問者に表示します。任意 — 上記のカテゴリ説明に含めることもできます。`,"profileEditor.content.mainBannerHeadingPlaceholder":`お客様のプライバシーを大切にしています`,"profileEditor.content.mainBannerBodyPlaceholder":`体験を向上させるために Cookie を使用しています…`,"profileEditor.content.gpcHeadingPlaceholder":`Global Privacy Control を検出しました`,"profileEditor.content.prefHeadingPlaceholder":`プライバシー設定`,"profileEditor.content.prefSubheadingPlaceholder":`以下で Cookie 設定を管理してください。`,"profileEditor.content.prefIntroPlaceholder":`カテゴリの上に表示する任意の導入文…`,"profileEditor.content.noContent":`コンテンツ編集を開始するには、ステップ 2 で UI テンプレートを選択してください。`,"profileEditor.content.loadingTemplate":`テンプレートを読み込み中…`,"profileEditor.nav.nextTemplates":`次へ: テンプレート`,"profileEditor.nav.nextContent":`次へ: コンテンツ`,"profileEditor.nav.nextMainBanner":`次へ: メインバナー`,"profileEditor.nav.nextGpcBanner":`次へ: GPCバナー`,"profileEditor.nav.nextPrefModal":`次へ: 設定モーダル`,"profileEditor.action.create":`プロファイルを作成`,"profileEditor.action.save":`プロファイルを保存`,"profileEditor.error.nameRequired":`プロファイル名は必須です。`,"profileEditor.error.nameRequiredContinue":`次に進むにはプロファイル名が必要です。`,"profileEditor.error.cookieRequired":`Cookie テンプレートを選択してください。`,"profileEditor.error.cookieContinue":`続行するには Cookie テンプレートを選択してください。`,"profileEditor.error.uiRequired":`UI テンプレートを選択してください。`,"profileEditor.error.uiContinue":`続行するには UI テンプレートを選択してください。`,"profileEditor.error.failed":`プロファイルの保存に失敗しました。`,"profileEditor.error.load":`プロファイルの読み込みに失敗しました。`,"profileEditor.table.noNoCookies":`このテンプレートには Cookie が定義されていません。`,"profileEditor.table.id":`ID`,"profileEditor.table.legalBasis":`法的根拠`,"profileEditor.table.mandatory":`必須`,"profileEditor.table.gpc":`GPC`,"profileEditor.table.tcfVendor":`TCF ベンダー`,"profileEditor.table.cpraCategory":`CPRA カテゴリ`,"profileEditor.table.cookies":`Cookie`,"profileEditor.export.json":`JSON`,"profileEditor.export.csv":`CSV`,"profileEditor.export.import":`インポート`,"profileEditor.export.jsonTitle":`ロケール内容を JSON でダウンロード`,"profileEditor.export.csvTitle":`翻訳用にロケール内容を CSV でダウンロード`,"profileEditor.export.importTitle":`翻訳済みの JSON または CSV をアップロード`,"profileEditor.newLink":`+ 新規 ↗`,_section_consentTemplates:`── Cookie テンプレート ─────────────────────────`,"consentTemplates.title":`Cookie テンプレート`,"consentTemplates.count":`{{n}} 件のテンプレート`,"consentTemplates.countSingular":`{{n}} 件のテンプレート`,"consentTemplates.new":`+ 新しい Cookie テンプレート`,"consentTemplates.empty.title":`まだ Cookie テンプレートがありません。`,"consentTemplates.empty.hint":`Cookie テンプレートは、同意プロファイルで使用する Cookie / 目的の一覧を定義します。1つ作成して複数のプロファイルで再利用してください。`,"consentTemplates.search.placeholder":`Search consent templates…`,"consentTemplates.col.name":`Name`,"consentTemplates.col.cookies":`Cookies`,"consentTemplates.required":`必須`,"consentTemplates.dialog.delete.title":`「{{name}}」を削除しますか?`,"consentTemplates.dialog.delete.message":`この Cookie テンプレートは完全に削除されます。紐づくプロファイルは Cookie 定義を失います。`,"consentTemplates.editor.title.new":`新しい Cookie テンプレート`,"consentTemplates.editor.title.edit":`Cookie テンプレートを編集`,"consentTemplates.editor.name":`テンプレート名`,"consentTemplates.editor.namePlaceholder":`例: Google Analytics + Ads`,"consentTemplates.editor.nameRequired":`テンプレート名は必須です。`,"consentTemplates.editor.definitions":`Cookie 定義`,"consentTemplates.editor.empty":`まだ Cookie が定義されていません。上で追加してください。`,"consentTemplates.editor.addCookie":`+ Cookie を追加`,"consentTemplates.editor.idNoMatches":`一致する既知のキーがありません — カスタム ID をそのまま入力できます`,"consentTemplates.editor.error.allIds":`すべての Cookie に ID が必要です。`,"consentTemplates.editor.error.uniqueIds":`Cookie ID は一意である必要があります。`,"consentTemplates.editor.error.failed":`テンプレートの保存に失敗しました。`,"consentTemplates.editor.error.notFound":`テンプレートが見つかりません。`,"consentTemplates.editor.action.create":`テンプレートを作成`,"consentTemplates.editor.action.save":`テンプレートを保存`,"consentTemplates.editor.showTcf":`TCF ベンダー`,"consentTemplates.editor.showCpra":`CPRA カテゴリ`,"consentTemplates.editor.infoHint":`詳細を確認するには列見出しをクリックしてください`,"consentTemplates.editor.infoUsage":`用途`,"consentTemplates.editor.infoLaws":`規制ガイダンス`,"consentTemplates.editor.infoExamples":`例`,"consentTemplates.col.id":`Cookie ID`,"consentTemplates.col.idShort":`ID / 名前`,"consentTemplates.col.gpc":`GPC シグナルを尊重`,"consentTemplates.col.gpcShort":`GPC`,"consentTemplates.col.tcfVendor":`TCF ベンダー ID`,"consentTemplates.col.cpraCategory":`CPRA データカテゴリ`,"consentTemplates.col.tcfVendorShort":`TCF ベンダー`,"consentTemplates.col.cpraCategoryShort":`CPRA カテゴリ`,"consentTemplates.col.purpose":`Cookie の目的`,"consentTemplates.col.purposeShort":`目的`,"consentTemplates.purpose.necessary":`必須`,"consentTemplates.purpose.functional":`機能`,"consentTemplates.purpose.preferences":`設定`,"consentTemplates.purpose.analytics":`分析`,"consentTemplates.purpose.marketing":`マーケティング`,"consentTemplates.editor.purposePlaceholder":`目的を選択…`,"consentTemplates.editor.error.purpose":`すべての Cookie に目的を設定してください。`,_section_uiTemplates:`── UI テンプレート ───────────────────────────`,"uiTemplates.title":`UI テンプレート`,"uiTemplates.count":`{{n}} 件のテンプレート`,"uiTemplates.countSingular":`{{n}} 件のテンプレート`,"uiTemplates.new":`+ 新しい UI テンプレート`,"uiTemplates.empty.title":`まだ UI テンプレートがありません。`,"uiTemplates.empty.hint":`UI テンプレートは、同意バナーやモーダルの視覚的設定 — 位置、ボタン、カテゴリ — を定義します。`,"uiTemplates.search.placeholder":`Search UI templates…`,"uiTemplates.col.name":`Name`,"uiTemplates.col.positions":`Positions`,"uiTemplates.col.buttons":`Buttons`,"uiTemplates.mainBanner":`メインバナー:`,"uiTemplates.gpcBanner":`GPC バナー:`,"uiTemplates.modal":`モーダル:`,"uiTemplates.categories":`{{n}} カテゴリ`,"uiTemplates.dialog.delete.title":`「{{name}}」を削除しますか?`,"uiTemplates.dialog.delete.message":`この UI テンプレートは完全に削除されます。紐づくプロファイルは UI 設定を失います。`,"uiTemplates.editor.title.new":`新しい UI テンプレート`,"uiTemplates.editor.title.edit":`UI テンプレートを編集`,"uiTemplates.editor.name":`テンプレート名`,"uiTemplates.editor.nameRequired":`テンプレート名は必須です。`,"uiTemplates.editor.namePlaceholder":`例: 標準 GDPR レイアウト`,"uiTemplates.editor.loading":`テンプレートを読み込み中…`,"uiTemplates.editor.tabMain":`メインバナー`,"uiTemplates.editor.tabGpc":`GPC バナー`,"uiTemplates.editor.tabModal":`設定モーダル`,"uiTemplates.editor.mainBannerHint":`同意がまだ記録されていない初回訪問時に表示されます。`,"uiTemplates.editor.gpcBannerHint":`GPC シグナルが検出された場合、メインバナーの代わりに表示されます(autoHonorGPC 有効時)。`,"uiTemplates.editor.error.notFound":`テンプレートが見つかりません。`,"uiTemplates.editor.error.buttons":`すべてのボタンに ID が必要です。`,"uiTemplates.editor.error.uniqueButtonIds":`Button IDs must be unique.`,"uiTemplates.editor.error.customButtons":`すべての「custom」アクションボタンには Cookie の選択が必要です。`,"uiTemplates.editor.error.catIds":`すべてのカテゴリ ID は必須です。`,"uiTemplates.editor.error.uniqueCatIds":`カテゴリ ID は一意である必要があります。`,"uiTemplates.editor.error.catCookies":`各カテゴリには少なくとも 1 つの Cookie が必要です。`,"uiTemplates.editor.error.failed":`テンプレートの保存に失敗しました。`,"uiTemplates.editor.action.create":`テンプレートを作成`,"uiTemplates.editor.action.save":`テンプレートを保存`,_section_sites:`── サイト / テナント ───────────────────────────`,"sites.title":`サイト / テナント`,"sites.createNew":`新しいサイトを作成`,"sites.namePlaceholder":`サイト名`,"sites.slugPlaceholder":`slug(例: site-a)`,"sites.col.name":`名前`,"sites.col.slug":`Slug`,"sites.col.id":`ID`,"sites.col.created":`作成日時`,"sites.empty":`まだサイトがありません。`,"sites.dialog.delete.title":`「{{name}}」を削除しますか?`,"sites.dialog.delete.message":`このサイトと関連データはすべて完全に削除されます。元に戻すことはできません。`,_section_vendors:`── TCF ベンダー ─────────────────────────────────`,"vendors.title":`TCF ベンダー一覧`,"vendors.info.title":`TCF ベンダー一覧とは?`,"vendors.searchPlaceholder":`ベンダーを検索…`,"vendors.gvlMeta":`GVL v{{version}} · 合計 {{total}} ベンダー`,"vendors.loading":`ベンダー一覧を読み込み中…`,"vendors.noResults":`ベンダーが見つかりません。`,"vendors.col.id":`ID`,"vendors.col.name":`名前`,"vendors.col.purposes":`目的`,"vendors.col.liPurposes":`正当な利益の目的`,"vendors.col.specialPurposes":`特別目的`,"vendors.pagination":`ページ {{page}} / {{totalPages}} · 合計 {{total}} ベンダー`,"vendors.prev":`← 前へ`,"vendors.next":`次へ →`,_section_audit:`── 監査ログ ─────────────────────────────────────`,"audit.title":`監査ログ`,"audit.empty":`まだ監査イベントはありません。`,"audit.col.time":`時刻`,"audit.col.action":`操作`,"audit.col.resource":`リソース`,"audit.col.resourceId":`リソース ID`,"audit.col.actor":`実行者`,"audit.actor.system":`システム`,"audit.viewHistory":`比較`,"audit.searchPlaceholder":`アクション、リソース、実行者を検索…`,"audit.detail.title":`監査エントリ`,"audit.detail.oldData":`変更前データ`,"audit.detail.newData":`変更後データ`,_section_apiConfig:`── API 設定 ────────────────────────────────────`,"apiConfig.title":`API 設定`,"apiConfig.public.heading":`公開 API`,"apiConfig.public.about.text":`ウィジェットが同意の送信・管理に使用します。認証トークンはなく、下記の許可オリジンが唯一のアクセス制御です。`,"apiConfig.public.about.link":`consenti.dev で公開 API リファレンスを開く`,"apiConfig.admin.heading":`管理 API`,"apiConfig.admin.about.text":`これらのトークンを使用して、スクリプト、CI/CD、またはサーバーサイドの連携から Consenti 管理 API を呼び出せます。すべてのルート、リクエスト/レスポンスの形式、認証ヘッダーは consenti.dev で文書化されています。`,"apiConfig.admin.about.link":`consenti.dev で管理 API リファレンスを開く`,"apiConfig.endpoint.heading":`エンドポイント`,"apiConfig.endpoint.hint":`この環境の設定から解決されたベース URL です。`,"apiConfig.origins.heading":`許可オリジン`,"apiConfig.origins.hint":`これらのオリジンからのリクエストのみが受け付けられます。* を使用するとすべて許可できます(本番環境では非推奨)。`,"apiConfig.origins.publicNote":`公開 API には認証トークンがありません。このリストが唯一のアクセス制御です。`,"apiConfig.origins.adminNote":`Bearer トークン認証に加えた追加のレイヤーです。このダッシュボード自身のオリジン({{origin}})を含めないと、自分自身がアクセスできなくなる可能性があります。`,"apiConfig.origins.placeholder":`https://example.com`,"apiConfig.origins.empty":`オリジンが設定されていません。現在はすべてのオリジンが許可されています。`,"apiConfig.origins.errorDuplicate":`すでにリストにあります。`,"apiConfig.origins.errorSave":`保存に失敗しました。もう一度お試しください。`,"apiConfig.origins.remove":`削除`,"apiConfig.tokens.heading":`管理 API トークン`,"apiConfig.tokens.hint":`Consenti 管理 API へのサーバーサイドおよび CI/CD アクセス用の Bearer トークンです。Authorization: Bearer <token> として渡してください。クライアント側コードには絶対に公開しないでください。完全な管理権限を付与します。`,"apiConfig.tokens.created":`トークンが作成されました。今すぐコピーしてください。再表示されません。`,"apiConfig.tokens.placeholder":`トークン名(例: CI デプロイ)`,"apiConfig.tokens.empty":`まだトークンはありません。`,"apiConfig.tokens.errorName":`名前は必須です`,"apiConfig.tokens.errorCreate":`トークンの作成に失敗しました`,"apiConfig.tokens.col.name":`名前`,"apiConfig.tokens.col.status":`ステータス`,"apiConfig.tokens.col.created":`作成日時`,"apiConfig.tokens.status.active":`有効`,"apiConfig.tokens.status.revoked":`取り消し済み`,"apiConfig.tokens.status.expired":`Expired`,"apiConfig.tokens.col.expires":`Expires`,"apiConfig.tokens.expiresLabel":`Expires (optional)`,"apiConfig.tokens.expiresNever":`Never`,"apiConfig.tokens.dialog.title":`この API トークンを取り消しますか?`,"apiConfig.tokens.dialog.message":`このトークンを使用しているアプリケーションは、ただちにアクセス権を失います。`,"apiConfig.tokens.reactivate":`再有効化`,"apiConfig.tokens.deleteDialog.title":`この API トークンを完全に削除しますか?`,"apiConfig.tokens.deleteDialog.message":`トークンの記録が完全に削除され、元に戻すことはできません。再有効化もできなくなります。`,_section_settings:`── 設定 ────────────────────────────────────────`,"settings.title":`設定`,"settings.account.heading":`アカウント`,"settings.account.email":`メール:`,"settings.account.roles":`ロール:`,"settings.account.id":`ID:`,"settings.account.changePassword":`パスワードを変更`,"settings.export.heading":`データのエクスポート`,"settings.export.hint":`すべての同意記録または監査ログをダウンロードします。`,"settings.export.consentCsv":`同意 CSV`,"settings.export.consentXlsx":`同意 XLSX`,"settings.export.consentJson":`同意 JSON`,"settings.export.auditCsv":`監査 CSV`,"settings.about.heading":`概要`,"settings.about.text":`Consenti v0.1.0 — GDPR 準拠のオープンソース同意管理プラットフォーム。`,"settings.about.license":`Apache 2.0 ライセンス。`,_section_changePassword:`── パスワード変更 ─────────────────────────────`,"changePassword.title":`パスワード変更`,"changePassword.hint":`12文字以上の強力なパスワードを選んでください。`,"changePassword.success":`パスワードが正常に更新されました。`,"changePassword.newPassword":`新しいパスワード`,"changePassword.newPasswordPlaceholder":`12文字以上`,"changePassword.confirmPassword":`新しいパスワードを確認`,"changePassword.confirmPasswordPlaceholder":`新しいパスワードを再入力`,"changePassword.submit":`パスワードを更新`,"changePassword.submitting":`保存中…`,"changePassword.error.minLength":`パスワードは12文字以上である必要があります。`,"changePassword.error.mismatch":`パスワードが一致しません。`,"changePassword.error.failed":`パスワードの更新に失敗しました。`,"login.showPassword":`Show password`,"login.hidePassword":`Hide password`,"users.allowedSites":`Allowed Sites`,"users.allowedSitesHint":`(leave empty to allow all)`,"users.edit.title":`Edit User: {{name}}`,"users.edit.error.save":`Failed to save changes.`,"users.edit.resetPassword":`パスワードをリセット`,"users.edit.resetPasswordHint":`(現在のパスワードを維持する場合は空欄のまま)`,"users.edit.newPassword":`新しいパスワード`,"users.edit.confirmNewPassword":`新しいパスワードの確認`,"users.edit.passwordTooShort":`パスワードは12文字以上である必要があります`,"users.detail.title":`ユーザー`,"users.detail.allSites":`すべてのサイト`,"profileEditor.import.imported":`Imported {{n}} locales: {{list}}`,"profileEditor.import.importedSingular":`Imported 1 locale: {{list}}`,"profileEditor.import.skipped":`Skipped {{n}} unrecognised locale keys: {{list}}`,"profileEditor.import.skippedSingular":`Skipped 1 unrecognised locale key: {{list}}`,"profileEditor.config.selectDefaultLocale":`Select default locale…`,"profileEditor.config.complianceGroup":`Compliance Group`,"profileEditor.config.complianceGroupNone":`None / Custom`,"profileEditor.config.customComplianceGroup":`Custom group name`,"profileEditor.config.customComplianceGroupPlaceholder":`e.g. internal-testing`,"profileEditor.config.customComplianceGroupHint":`Lower-kebab-case identifier. The widget's compliance.type config uses this to fetch the profile — required, since there's no other way to address it. Only one profile can be active per name at a time. No compliance-rule defaults are applied (those only exist for the built-in groups above).`,"profileEditor.config.gpcMode":`GPC Signal Mode`,"profileEditor.config.gpcModeDefault":`Default (inherit from compliance group)`,"profileEditor.config.gpcModePlaceholder":`Default`,"profileEditor.config.hidePoweredBy":`Hide "Powered by Consenti"`,"profileEditor.config.hidePoweredByHint":`Remove the branding link from the consent banner.`,"profileEditor.config.allowReceipt":`Allow consent receipt`,"profileEditor.config.allowReceiptHint":`Let visitors download a PDF receipt of their consent choices.`,"profileEditor.config.enhanceAccessibility":`アクセシビリティ強化`,"profileEditor.config.enhanceAccessibilityHint":`WCAG 2.1 AAのボタンサイズ(最小高さ44px)、フォーカスリング、スクリーンリーダーラベルを同意ウィジェットに適用します。`,"profileEditor.config.showFooterMetadata":`フッターメタデータを表示`,"profileEditor.config.showFooterMetadataHint":`バナーとモーダルに同意ID、日付、プロファイルバージョン、プライバシー設定へのリンクを表示します。`,"profileEditor.conflict.title":`Active profile conflict`,"profileEditor.conflict.message":`Profile "{{name}}" is already active for this compliance group. Only one profile can be active per group.`,"profileEditor.conflict.deactivate":`Deactivate "{{name}}" and activate this one`,"profileEditor.conflict.saveInactive":`Save this profile as inactive`,"profileEditor.compliance.errors.heading":`Compliance errors — fix before continuing:`,"profileEditor.compliance.warnings.heading":`Compliance warnings:`,"profileEditor.compliance.warnings.acknowledge":`I acknowledge these warnings and wish to continue`,"profileEditor.compliance.preGrantOverridden":`Pre-grant was overridden for these parameters — this compliance group requires an explicit opt-in, so "Pre Grant" cannot stay enabled.`,"profileEditor.content.selectLocale":`Select locale…`,"profileEditor.content.addLocale":`+ Add locale`,"profileEditor.content.defaultLocaleLabel":`(default)`,_section_readability:`── Readability Warnings ─────────────────────────`,"readability.headingTooLong":`Heading is {{n}} characters — keep it under 80 for readability.`,"readability.avgSentenceLong":`Average sentence length is {{n}} words — aim for 25 or fewer.`,"readability.totalWordsLong":`Text is {{n}} words long — consider keeping banner copy under 150 words.`,"consentTemplates.editor.gpcMandatoryTitle":`Mandatory cookies are never auto-denied by GPC`,"consentTemplates.editor.loadDefaultsBtn":`Click here to load default cookies list`,"consentTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"consentTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"consentTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
2
+
3
+ Saving will update cookie definitions for all profiles using this template. Continue?`,"uiTemplates.editor.loadDefaultsPrompt":`Start from scratch, or load a sensible default structure (buttons, categories, positions).`,"uiTemplates.editor.loadDefaultsBtn":`Load Defaults`,"uiTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"uiTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"uiTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
4
+
5
+ Saving will apply UI changes to all profiles using this template. Continue?`,"uiTemplates.editor.wizard.stepOf":`ステップ {{step}} / {{total}}`,"uiTemplates.editor.wizard.next":`次へ`,"uiTemplates.editor.wizard.back":`戻る`,"uiTemplates.editor.stackButtonsOnBreakpoint":`ボタンの縦積み幅 (px)`,"uiTemplates.editor.stackButtonsOnBreakpointHint":`この幅以下でボタンを縦に積み重ねます。0で無効化。デフォルト: 400。`,"uiTemplates.editor.trapFocus":`フォーカスを閉じ込める`,"uiTemplates.editor.trapFocusHint":`このバナーまたはモーダルが表示されている間、キーボードのTabフォーカスを同意ルート内に制限します。`,_section_howItWorks:`── Consientiの使い方 ─────────────────────────────────`,"nav.howItWorks":`Consientiの使い方`,"howItWorks.title":`Consientiの使い方`,"howItWorks.intro":`ConsientiはオープンソースのGDPR準拠同意管理プラットフォームです。ウェブサイトのCookie同意の収集・保存・レポートを管理します。このガイドでは主なワークフローと各ダッシュボードセクションについて説明します。`,"howItWorks.workflow.heading":`基本ワークフロー`,"howItWorks.workflow.step1.title":`Cookieカテゴリを定義する`,"howItWorks.workflow.step1.desc":`同意バナー → Cookieテンプレートに移動し、サイトで使用するCookieカテゴリ(例:アナリティクス、マーケティング)を一覧にしたテンプレートを作成します。各カテゴリの法的根拠と有効期限を設定します。`,"howItWorks.workflow.step2.title":`同意UIをデザインする`,"howItWorks.workflow.step2.desc":`同意バナー → UIテンプレートに移動し、バナーと設定モーダルの視覚的レイアウトを設定します。ボタンラベル、カラー、レイアウトスタイル、カテゴリ表示を構成します。`,"howItWorks.workflow.step3.title":`同意プロファイルを作成する`,"howItWorks.workflow.step3.desc":`同意バナー → プロファイルに移動し、CookieテンプレートとUIテンプレートを組み合わせます。サポートするロケールごとに翻訳テキストを追加し、必要な規制(GDPR、CCPA、DPDPA)を有効にして公開します。`,"howItWorks.workflow.step4.title":`ウィジェットを埋め込む`,"howItWorks.workflow.step4.desc":`API → 設定からAPIキーをコピーし、ConsientiのスクリプトタグをウェブサイトのHTMLに追加します。ウィジェットが公開済みプロファイルを取得し、同意バナーを自動表示します。`,"howItWorks.workflow.step5.title":`監視と監査`,"howItWorks.workflow.step5.desc":`同意一覧と訪問者ページでリアルタイムの同意記録を確認します。監査ログで全管理操作の改ざん不可能な履歴をコンプライアンス証拠として確認できます。`,"howItWorks.features.heading":`ダッシュボード機能`,"howItWorks.features.dashboard.title":`ダッシュボード`,"howItWorks.features.dashboard.desc":`ホーム画面にリアルタイムKPI(同意総数、承認率、拒否率、時系列グラフ)が表示されます。トレンド把握やバナー変更の効果測定にご利用ください。`,"howItWorks.features.reports.title":`レポート`,"howItWorks.features.reports.desc":`期間ごとのオプトイン推移に加え、カテゴリ・ロケール別の内訳(許可/拒否/異議)を表示します。stats:view権限が必要です。`,"howItWorks.features.consentTemplates.title":`Cookieテンプレート`,"howItWorks.features.consentTemplates.desc":`Cookieカテゴリの再利用可能なリストです。各カテゴリにはID、法的根拠(同意、正当な利益、必要)、GPC信号処理、有効期限、オプションのTCFベンダーまたはCPRAカテゴリマッピングがあります。`,"howItWorks.features.uiTemplates.title":`UIテンプレート`,"howItWorks.features.uiTemplates.desc":`同意バナー、GPC通知、設定モーダルの外観を制御します。ボタンセット、見出しタグ、オーバーレイ不透明度、カテゴリ表示順序を設定できます。`,"howItWorks.features.profiles.title":`プロファイル`,"howItWorks.features.profiles.desc":`プロファイルはデプロイ可能な単位です。CookieテンプレートとUIテンプレートを結合し、多言語コンテンツを保存し、ロールバック用のバージョン番号を追跡します。ドメインごとに1つのプロファイルのみアクティブにできます。`,"howItWorks.features.consents.title":`同意一覧`,"howItWorks.features.consents.desc":`訪問者が送信した全同意記録の検索・フィルタリング可能なログです。各記録には訪問者ID、使用プロファイル、ロケール、GPC信号、同意選択、タイムスタンプが表示されます。`,"howItWorks.features.visitors.title":`訪問者`,"howItWorks.features.visitors.desc":`サイト全体のユニーク訪問者識別子のリストで、国、初回閲覧日、最終閲覧日が含まれます。訪問者IDはIPアドレスを保存しない仮名UUIDです。`,"howItWorks.features.users.title":`ユーザー`,"howItWorks.features.users.desc":`ダッシュボードにログインできる管理者アカウントを管理します。ロールの割り当て、アカウントの有効化・無効化、マルチテナント環境での特定サイトへのユーザー制限が行えます。`,"howItWorks.features.roles.title":`ロール`,"howItWorks.features.roles.desc":`名前付き権限セット(例:閲覧者、編集者、管理者)を定義します。consent:view、profile:edit、audit:viewなどの細かい権限を各ロールに割り当て、ユーザーにロールを付与します。`,"howItWorks.features.vendors.title":`ベンダー`,"howItWorks.features.vendors.desc":`IABグローバルベンダーリスト(GVL)を参照して、TCFベンダーID、宣言された目的、正当な利益の目的を調べます。テンプレートのCookieカテゴリ設定時にこれらのIDを使用します。`,"howItWorks.features.audit.title":`監査ログ`,"howItWorks.features.audit.desc":`プロファイル保存、ユーザー変更、APIキー作成など全管理操作の追記専用・改ざん不可能なログです。GDPRの説明責任義務に必要です。`,"howItWorks.features.api.title":`APIとキー`,"howItWorks.features.api.desc":`APIトークンの生成・失効、公開同意APIの許可CORSオリジン設定、インタラクティブなOpenAPIリファレンスによる各エンドポイントの確認が行えます。`,"howItWorks.features.settings.title":`設定`,"howItWorks.features.settings.desc":`アカウント情報の確認、パスワード変更、同意・監査データのCSV・XLSX・JSON形式でのエクスポート(オフライン分析や規制当局への提出用)が行えます。`,"howItWorks.docs.heading":`詳細ドキュメント`,"howItWorks.docs.text":`詳細なガイド、設定リファレンス、インテグレーション例、ライブプレイグラウンドはConsientiドキュメントサイトでご覧いただけます。`,"howItWorks.docs.link":`consenti.dev/docs を開く →`,"howItWorks.consentFlow.heading":`エンドツーエンドの同意フロー`,"howItWorks.consentFlow.step1.title":`ウィジェットの初期化`,"howItWorks.consentFlow.step1.desc":`Consentiスクリプトが訪問者のブラウザに読み込まれ、設定(APIキー、compliance.type)を読み取ります。有効期限内の同意クッキーがすでに存在する場合、ウィジェットはサイレントに終了し、バナーは表示されません。`,"howItWorks.consentFlow.step2.title":`管轄の検出`,"howItWorks.consentFlow.step2.desc":`compliance.typeが'auto'の場合、ウィジェットはGET /resolve-profileを呼び出し、訪問者のタイムゾーン、Accept-Languageヘッダー、IPアドレスを送信します。サーバーはこれらのシグナルを、組み込みの国→コンプライアンスマップを使用してcomplianceGroupにマッピングします。`,"howItWorks.consentFlow.step3.title":`プロファイルの取得`,"howItWorks.consentFlow.step3.desc":`ウィジェットは、解決されたcomplianceGroupと訪問者のロケールに対応するアクティブなプロファイルを取得します。レスポンスは、バナーテキスト、クッキーカテゴリ、UI設定、規制フラグをすべて含むフラットなJSONオブジェクトです。`,"howItWorks.consentFlow.step4.title":`バナーの表示`,"howItWorks.consentFlow.step4.desc":`ウィジェットはプロファイルのUIテンプレートに基づいてバナーまたは設定モーダルをレンダリングします。必須カテゴリは事前にチェックされており、選択を解除できません。オプションカテゴリは法的根拠(同意または正当な利益)を表示します。`,"howItWorks.consentFlow.step5.title":`同意の送信`,"howItWorks.consentFlow.step5.desc":`訪問者が操作(すべて承認、すべて拒否、または設定を保存)した際、ウィジェットはAPIに同意レコードをPOSTします。レコードには訪問者ID、プロファイルバージョン、カテゴリごとのステータス(granted/denied/objected)、GPCシグナル、タイムスタンプ、ロケールが含まれます。`,"howItWorks.consentFlow.step6.title":`保存と監査`,"howItWorks.consentFlow.step6.desc":`APIはペイロードを検証し、同意レコードを保存して、追記専用の監査ログにエントリを追加します。訪問者レコードは国と最初/最後のアクセス日時でアップサートされます。ウィジェットは同意クッキーを書き込み、以降の訪問でバナーをスキップします。`,"howItWorks.profileResolution.heading":`プロファイル解決アルゴリズム`,"howItWorks.profileResolution.intro":`訪問者が訪れると、Consentiは5つのステップで表示する同意プロファイルを解決します。`,"howItWorks.profileResolution.step1.title":`地理シグナルの収集`,"howItWorks.profileResolution.step1.desc":`ウィジェットはGET /resolve-profileに3つのシグナルを送信します:ブラウザのIntl.DateTimeFormatタイムゾーン、Accept-Languageヘッダー(またはlangクエリパラメータ)、サーバーサイドのIPアドレス。`,"howItWorks.profileResolution.step2.title":`国の特定`,"howItWorks.profileResolution.step2.desc":`サーバーは順番に試みます:(1) 設定されたgeoDataProviderによるIPジオロケーション;(2) タイムゾーン→国のルックアップテーブル;(3) 言語タグ→国のヒューリスティック(例:'ja' → JP)。最初の非空の結果が採用されます。`,"howItWorks.profileResolution.step3.title":`コンプライアンスグループのマッピング`,"howItWorks.profileResolution.step3.desc":`ISO-3166-1 alpha-2の国コード(オプションの地域/州コード付き)が、埋め込みの国→コンプライアンスグループマップで検索されます。地域オーバーライド(例:US/CA → optOutCalifornia)は国のデフォルトより優先されます。`,"howItWorks.profileResolution.step4.title":`アクティブなプロファイルの特定`,"howItWorks.profileResolution.step4.desc":`システムは、解決されたグループに一致するcomplianceGroupを持つアクティブなプロファイルをデータベースで検索します。complianceGroupごとにアクティブにできるプロファイルは1つだけです。存在しない場合は404が返され、ウィジェットはprofileOverrideにフォールバックする場合があります。`,"howItWorks.profileResolution.step5.title":`ロケールの解決`,"howItWorks.profileResolution.step5.desc":`最適なロケールは以下の順で選択されます:(1) ウィジェットのリクエストロケールとの完全一致;(2) 言語プレフィックスの一致(例:'ja-JP' → 'ja');(3) プロバイダーから解決されたロケール;(4) プロファイルのdefaultLocale。解決されたJSONは静的ファイル(公開済みプロファイル)またはデータベースから直接(プレビュー)提供されます。`,"howItWorks.complianceGroups.heading":`コンプライアンスグループ`,"howItWorks.complianceGroups.intro":`世界のすべての国が8つのコンプライアンスグループのいずれかにマッピングされています。各グループはウィジェットが従うべき同意モデルを決定します。`,"howItWorks.complianceGroups.optIn.title":`optIn — GDPR / ePrivacy 厳格なオプトイン`,"howItWorks.complianceGroups.optIn.desc":`非必須クッキーを設定する前に事前の同意が必要です。訪問者は拒否する本物の選択肢を与えられなければならず、同意の撤回は同意と同じくらい簡単でなければならず、カテゴリ単位の詳細な選択が必須です。`,"howItWorks.complianceGroups.optIn.laws":`GDPR、ePrivacy指令、UK GDPR、PECR、revFADP(スイス)、KVKK(トルコ)、PDPA(タイ)、その他の厳格な国内法`,"howItWorks.complianceGroups.optIn.countries":`全EUメンバー国、英国、スイス、トルコ、タイ、アイスランド、リヒテンシュタイン、ノルウェー、ガーンジー、ジブラルタル、その他ePrivacy規則が厳格な国々`,"howItWorks.complianceGroups.optInDPDPA.title":`optInDPDPA — インドDPDPA`,"howItWorks.complianceGroups.optInDPDPA.desc":`インドの2023年デジタル個人データ保護法は明示的なオプトイン同意を要求します。追加義務:データ受託者の指名、専用の同意通知の提供、データ主体の権利のサポート。プロファイルにdpdpaDataFiduciaryフィールドを設定してください。`,"howItWorks.complianceGroups.optInDPDPA.laws":`デジタル個人データ保護法2023(DPDPA)`,"howItWorks.complianceGroups.optInDPDPA.countries":`インド(IN)`,"howItWorks.complianceGroups.optInChina.title":`optInChina — 中国マルチ法スタック`,"howItWorks.complianceGroups.optInChina.desc":`中国のデータガバナンスはPIPL下での明示的な同意に加え、データセキュリティ法(DSL)とサイバーセキュリティ法(CSL)からの義務を組み合わせています。越境データ転送とデータ分類に関する追加要件が適用されます。`,"howItWorks.complianceGroups.optInChina.laws":`個人情報保護法(PIPL)、データセキュリティ法(DSL)、サイバーセキュリティ法(CSL)`,"howItWorks.complianceGroups.optInChina.countries":`中国(CN)`,"howItWorks.complianceGroups.optOutCalifornia.title":`optOutCalifornia — カリフォルニアCCPA / CPRA`,"howItWorks.complianceGroups.optOutCalifornia.desc":`デフォルトでデータを収集できますが、消費者には個人情報の販売または共有の明確なオプトアウト選択肢を提供する必要があります。グローバルプライバシーコントロール(GPC)ブラウザシグナルは有効なオプトアウトとして尊重されなければなりません。`,"howItWorks.complianceGroups.optOutCalifornia.laws":`CCPA、CPRA(カリフォルニア消費者プライバシー法 / カリフォルニアプライバシー権利法)`,"howItWorks.complianceGroups.optOutCalifornia.countries":`アメリカ合衆国 — カリフォルニア(US/CA)`,"howItWorks.complianceGroups.optOutUSState.title":`optOutUSState — その他の米国州法`,"howItWorks.complianceGroups.optOutUSState.desc":`カリフォルニアのオプトアウトフレームワークをモデルにしています。消費者はターゲット広告と個人データの販売をオプトアウトできます。いくつかの州ではGPCシグナルを尊重することが必要です。`,"howItWorks.complianceGroups.optOutUSState.laws":`CDPA (VA)、CPA (CO)、CTDPA (CT)、UCPA (UT)、TDPSA (TX)、DPDPA (DE)、NJDPA (NJ)、OCPA (OR)、MCDPA (MN)、MODPA (MD)、KCDPA (KY)、TIPA (TN)、NDPA (NE)、ICDPA (IA/IN)、MCDPA (MT)、NHPA (NH)、RIDTPA (RI)`,"howItWorks.complianceGroups.optOutUSState.countries":`アメリカ合衆国 — VA、CO、CT、UT、TX、DE、NJ、OR、MN、MD、KY、TN、NE、IA、IN、MT、NH、RI`,"howItWorks.complianceGroups.generalPrivacyConsent.title":`generalPrivacyConsent — 一般プライバシー / 同意`,"howItWorks.complianceGroups.generalPrivacyConsent.desc":`一般的なプライバシー法が適用されますが、PECR/ePrivacy方式の厳格なクッキーバナー要件は課されません。非必須クッキーの同意選択肢と明確なプライバシー通知を提供することがベストプラクティスですが、法的な閾値はGDPRオプトインより低いです。`,"howItWorks.complianceGroups.generalPrivacyConsent.laws":`PIPEDA / 法律25(CA)、LGPD(BR — hybridBrazilを使用)、POPIA(ZA)、APPI(JP)、プライバシー法(AU/NZ)、PDPA-SG、PDPA-MY、PIPA-KR、PDPD-VN、DPA-PH、PDP-IDなど`,"howItWorks.complianceGroups.generalPrivacyConsent.countries":`カナダ、オーストラリア、ニュージーランド、日本、韓国、シンガポール、マレーシア、南アフリカ、ならびに多くのラテンアメリカ、アフリカ、アジアの国々`,"howItWorks.complianceGroups.hybridBrazil.title":`hybridBrazil — ブラジルLGPD`,"howItWorks.complianceGroups.hybridBrazil.desc":`ブラジルのLGPDはGDPRと概ね類似していますが、データ管理者の評価によっては分析・広告クッキーを正当な利益の法的根拠として扱うことができます。バナーは表示されますが、カテゴリレベルの法的根拠は厳格なGDPRオプトインより柔軟に設定できます。`,"howItWorks.complianceGroups.hybridBrazil.laws":`Lei Geral de Proteção de Dados (LGPD)`,"howItWorks.complianceGroups.hybridBrazil.countries":`ブラジル(BR)`,"howItWorks.complianceGroups.noticeOnly.title":`noticeOnly — プライバシー通知のみ`,"howItWorks.complianceGroups.noticeOnly.desc":`専用のクッキー規制が適用されないか、既存の制度がプライバシー通知のみを要求しています(オプトインまたはオプトアウトバナー不要)。同意バナーの表示は透明性のためにも推奨されますが、法律で厳密には義務付けられていません。`,"howItWorks.complianceGroups.noticeOnly.laws":`様々 — 専用のクッキー/ePrivacy規制のない国々`,"howItWorks.complianceGroups.noticeOnly.countries":`上記のグループに含まれないアフリカ、中央アジア、カリブ海、太平洋地域の多くの国々`,"howItWorks.enums.heading":`主要値リファレンス`,"howItWorks.enums.legalBasis.heading":`legalBasis(クッキーカテゴリ)`,"howItWorks.enums.legalBasis.mandatory":`mandatory — 同意に関わらずカテゴリは常にアクティブです(例:セッション、認証)。GPCやオプトアウトシグナルによってブロックされることはありません。`,"howItWorks.enums.legalBasis.consent":`consent — 訪問者の明示的なオプトインが必要です。デフォルトでブロック;すべてのオプトイン管轄でGPCによりブロック。`,"howItWorks.enums.legalBasis.legitimateInterest":`legitimate_interest — 管理者の正当な利益に基づきます。デフォルトでアクティブ;訪問者は異議を申し立てることができます。一部の管轄(EU、UK)ではGPCによりソフトブロック。`,"howItWorks.enums.consentStatus.heading":`ConsentStatus(カテゴリレコードごと)`,"howItWorks.enums.consentStatus.granted":`granted — 訪問者がこのカテゴリに明示的に同意しました。`,"howItWorks.enums.consentStatus.denied":`denied — 訪問者がこのカテゴリへの同意を明示的に拒否しました。`,"howItWorks.enums.consentStatus.objected":`objected — 訪問者が正当な利益カテゴリに異議を申し立てました(オプトアウト。同意の拒否ではありません)。`,"howItWorks.enums.geoProvider.heading":`geoDataProviderのオプション`,"howItWorks.enums.geoProvider.default":`default / timezone — ブラウザのタイムゾーン(Intl.DateTimeFormat)を使用して国を推定し、Accept-Languageにフォールバックします。追加依存関係なし。`,"howItWorks.enums.geoProvider.language":`language — Accept-Languageヘッダーのみから国を導出します(例:'ja' → JP、'pt' → BR)。高速ですが精度が低いです。`,"howItWorks.enums.geoProvider.geoip":`geoip — バンドルされたMaxMind Liteデータベースとともにnpmパッケージgeoip-liteを使用します。必要:npm install geoip-lite。`,"howItWorks.enums.geoProvider.hostedGeoipLite":`hosted-geoip-lite — 組み込みのHTTPS経由でipinfo.ioを呼び出します(追加依存関係なし)。初回訪問ごとに約50〜200ミリ秒追加されます。`,"howItWorks.enums.geoProvider.maxmind":`maxmind — ローカルのGeoLite2-City.mmdbファイルとともにnpmパッケージmaxmindを使用します。最も正確。MAXMIND_DB_PATH環境変数とnpm install maxmindが必要。`,"howItWorks.enums.geoProvider.custom":`カスタム関数 — CountryResolverFnをcompliance.geoDataProviderに渡して、任意のGeo-IPまたはCDNプロバイダーを統合します。`,"consentTemplates.editor.categories":`Consent Categories`,"consentTemplates.editor.addCategory":`+ Add Category`,"consentTemplates.editor.noCategories":`No categories defined yet. Add one above.`,"consentTemplates.editor.error.noCategories":`At least one category is required.`,"consentTemplates.editor.error.catIds":`All categories must have an ID.`,"consentTemplates.editor.error.uniqueCatIds":`Category IDs must be unique.`,"consentTemplates.editor.error.catCookies":`Every category must contain at least one parameter.`,"consentTemplates.editor.error.uncategorized":`Parameter "{{id}}" is not assigned to any category.`,"consentTemplates.editor.error.multiCategory":`Parameter "{{id}}" is assigned to more than one category.`,"consentTemplates.editor.error.purposeLegalBasisMismatch":`Parameter "{{id}}" has a non-necessary purpose but is assigned to a Mandatory category — this grants a tracking parameter with no consent gate.`,"consentTemplates.editor.warning.necessaryNotMandatory":`Parameter "{{id}}" has purpose "necessary" but is assigned to a non-Mandatory category — this may break site functionality since it can be denied.`,"cookieTemplates.editor.trackerDetected":`検出: {{vendor}}`,"consentTemplates.col.preGrantShort":`Pre Grant`,"profileEditor.config.expiryDays":`Re-consent Interval (days)`,"profileEditor.config.expiryDaysHint":`How many days until stored consent expires and the visitor is asked again.`,"profileEditor.error.expiryDays":`Expiry (days) must be at least 1.`,"profileEditor.error.customComplianceGroupRequired":`Enter a custom group name, or pick a compliance group above.`,"profileEditor.table.preGrant":`Pre Grant`,"profileEditor.table.preGrantLocked":`Already effectively pre-granted — only editable when the category's legal basis is Consent`,"profileEditor.content.receiptHeading":`Consent Receipt Checkbox`,"profileEditor.content.receiptHint":`Shown in the preference modal when "Allow consent receipt" is enabled in Step 1.`,"profileEditor.content.receiptLabel":`Checkbox label`,"profileEditor.content.receiptDescription":`Description`,"profileEditor.error.missingRequiredContent":`ロケール「{{locale}}」の必須コンテンツが不足しています。ハイライトされたタブをご確認ください。`,"profileEditor.nudge.title":`任意項目が空白です`,"profileEditor.nudge.headingBlank":`見出しが空白のままです。訪問者には見出しなしでバナーが表示されます。`,"profileEditor.nudge.introBlank":`導入テキストが空白のままです。訪問者には説明なしで設定パネルが表示されます。`,"profileEditor.nudge.addNow":`今追加する`,"profileEditor.nudge.ignore":`無視する`};export{e as default};
@@ -0,0 +1 @@
1
+ import{i as e}from"./client-ymc9nwWr.js";var t={list:()=>e(`/profiles`),listSummary:()=>e(`/profiles?summary=1`),get:t=>e(`/profiles/${t}`),create:t=>e(`/profiles`,{method:`POST`,body:JSON.stringify(t)}),update:(t,n)=>e(`/profiles/${t}`,{method:`PUT`,body:JSON.stringify(n)}),validateCompliance:t=>e(`/profiles/validate`,{method:`POST`,body:JSON.stringify(t)}),delete:t=>e(`/profiles/${t}`,{method:`DELETE`}),copy:(t,n)=>e(`/profiles/${t}/copy`,{method:`POST`,...n?{body:JSON.stringify({name:n})}:{}}),activate:(t,n)=>e(`/profiles/${t}/activate`,{method:`POST`,...n?{body:JSON.stringify(n)}:{}}),deactivate:t=>e(`/profiles/${t}/deactivate`,{method:`POST`}),listVersions:t=>e(`/profiles/${t}/versions`),listArchived:()=>e(`/profiles/archived`),getVersion:(t,n,r=`default`)=>e(`/profiles/${t}/versions/${n}?locale=${encodeURIComponent(r)}`),previewUrl:e=>`/consenti/api/profiles/preview?draft=${encodeURIComponent(JSON.stringify(e))}`};export{t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./client-ymc9nwWr.js";var t={list:()=>e(`/roles`),permissions:t=>e(`/roles/${t}/permissions`),allPermissions:()=>e(`/permissions`),create:t=>e(`/roles`,{method:`POST`,body:JSON.stringify(t)}),update:(t,n)=>e(`/roles/${t}`,{method:`PUT`,body:JSON.stringify(n)}),delete:t=>e(`/roles/${t}`,{method:`DELETE`}),assignPermission:(t,n)=>e(`/roles/${t}/permissions`,{method:`POST`,body:JSON.stringify({permissionId:n})}),revokePermission:(t,n)=>e(`/roles/${t}/permissions/${n}`,{method:`DELETE`})};export{t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-MdjI3m3u.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./client-ymc9nwWr.js";var t={list:()=>e(`/consent-templates`),get:t=>e(`/consent-templates/${t}`),create:t=>e(`/consent-templates`,{method:`POST`,body:JSON.stringify(t)}),update:(t,n)=>e(`/consent-templates/${t}`,{method:`PUT`,body:JSON.stringify(n)}),delete:t=>e(`/consent-templates/${t}`,{method:`DELETE`}),copy:(t,n)=>e(`/consent-templates/${t}/copy`,{method:`POST`,body:JSON.stringify({name:n})}),profileUsage:t=>e(`/consent-templates/${t}/profile-usage`)},n={list:()=>e(`/ui-templates`),get:t=>e(`/ui-templates/${t}`),create:t=>e(`/ui-templates`,{method:`POST`,body:JSON.stringify(t)}),update:(t,n)=>e(`/ui-templates/${t}`,{method:`PUT`,body:JSON.stringify(n)}),delete:t=>e(`/ui-templates/${t}`,{method:`DELETE`}),copy:(t,n)=>e(`/ui-templates/${t}/copy`,{method:`POST`,body:JSON.stringify({name:n})}),profileUsage:t=>e(`/ui-templates/${t}/profile-usage`)};export{n,t};
@@ -0,0 +1 @@
1
+ function e(e){let t={};for(let n of e)t[n.id]={...n.purpose===void 0?{}:{purpose:n.purpose},listenGpc:n.listenGpc,...n.preGrant===void 0?{}:{preGrant:n.preGrant},...n.tcfVendorId===void 0?{}:{tcfVendorId:n.tcfVendorId},...n.tcfPurposes===void 0?{}:{tcfPurposes:n.tcfPurposes},...n.cpraCategory===void 0?{}:{cpraCategory:n.cpraCategory}};return t}function t(e){return Object.entries(e).map(([e,t])=>({id:e,listenGpc:!1,...t}))}function n(e){let t={};for(let{id:n,headingTag:r,legalBasis:i,cookies:a}of e)t[n]={heading:n,htmlText:``,headingTag:r,legalBasis:i,cookies:a};return t}function r(e){return Object.entries(e).map(([e,t])=>({id:e,headingTag:t.headingTag??`h3`,legalBasis:t.legalBasis,cookies:t.cookies}))}function i(e){let t={};for(let{id:n,type:r,action:i,cookies:a,url:o}of e)t[n]={type:r,action:i,...a===void 0?{}:{cookies:a},...o===void 0?{}:{url:o}};return t}function a(e){return Object.entries(e).map(([e,t])=>({id:e,type:t.type??`primary`,action:t.action,...t.cookies===void 0?{}:{cookies:t.cookies},...t.url===void 0?{}:{url:t.url}}))}function o(){return[{id:`security_storage`,purpose:`necessary`,listenGpc:!1},{id:`functionality_storage`,purpose:`functional`,listenGpc:!1},{id:`personalization_storage`,purpose:`preferences`,listenGpc:!1},{id:`analytics_storage`,purpose:`analytics`,listenGpc:!0},{id:`ad_storage`,purpose:`marketing`,listenGpc:!0,cpraCategory:`sharing`},{id:`ad_user_data`,purpose:`marketing`,listenGpc:!0,cpraCategory:`sale`},{id:`ad_personalization`,purpose:`marketing`,listenGpc:!0,cpraCategory:`sharing`}]}function s(){return[{id:`necessary`,headingTag:`h3`,legalBasis:`mandatory`,cookies:[`security_storage`]},{id:`functional`,headingTag:`h3`,legalBasis:`legitimate_interest`,cookies:[`functionality_storage`,`personalization_storage`]},{id:`analytics`,headingTag:`h3`,legalBasis:`consent`,cookies:[`analytics_storage`]},{id:`marketing`,headingTag:`h3`,legalBasis:`consent`,cookies:[`ad_storage`,`ad_user_data`,`ad_personalization`]}]}function c(){return{mainBanner:{position:`bottom`,overlayOpacity:0,showClose:!1,headingTag:`h2`,buttons:[{id:`accept-all`,type:`primary`,action:`custom`,cookies:`*`},{id:`reject-optional`,type:`accent`,action:`custom`,cookies:`!`},{id:`customize`,type:`secondary`,action:`manage`}]},gpcBanner:{position:`bottom`,overlayOpacity:0,showClose:!1,headingTag:`h2`,buttons:[{id:`accept-all`,type:`primary`,action:`custom`,cookies:`*`},{id:`continue-with-gpc`,type:`accent`,action:`custom`,cookies:`!`}]},preferenceModal:{position:`right`,overlayOpacity:50,showClose:!0,persistent:!1,headingTag:`h2`,hasSubheading:!0,buttons:[{id:`save-preferences`,type:`primary`,action:`submit`},{id:`accept-all`,type:`secondary`,action:`custom`,cookies:`*`}]}}}var l={"accept-all":`Accept All`,"reject-optional":`Reject Optional`,customize:`Customize`,"continue-with-gpc":`Continue with GPC`,"save-preferences":`Save Preferences`};function u(e){return l[e]??e.split(`-`).filter(Boolean).map(e=>e[0].toUpperCase()+e.slice(1)).join(` `)}function d(e){let t={};for(let n of e)t[n.id]=u(n.id);return t}function f(e,t){let n={necessary:{heading:`Necessary`,htmlText:`Essential cookies required for the website to function properly. These cannot be disabled.`},functional:{heading:`Functional`,htmlText:`Cookies for optional features and remembering your preferences. The site works without them.`},analytics:{heading:`Analytics`,htmlText:`Cookies that help us understand how visitors interact with our website.`},marketing:{heading:`Marketing`,htmlText:`Cookies used for advertising and tracking across websites.`}};return{mainBanner:{heading:`We value your privacy`,htmlText:`We use cookies to improve your experience, analyze site usage, and for marketing. Please accept or manage your preferences.`,buttonLabels:t?d(t.mainBanner.buttons):{}},gpcBanner:{heading:`Global Privacy Control Detected`,htmlText:`We detected a GPC signal from your browser. Your preferences have been automatically adjusted.`,buttonLabels:t?d(t.gpcBanner.buttons):{}},preferenceModal:{heading:`Privacy Preferences`,subheading:`Manage your cookie preferences below.`,htmlText:``,buttonLabels:t?d(t.preferenceModal.buttons):{},categories:e.map(e=>({id:e.id,heading:n[e.id]?.heading??e.id,htmlText:n[e.id]?.htmlText??``})),receiptLabel:`Get a copy of my consent choices (JSON)`,receiptDescription:`A JSON file will be downloaded to your device when you save your preferences.`}}}function p(e,t){let n={};for(let r of e)n[r.id]={text:t[r.id]||``,style:r.type,action:r.action,...r.cookies===void 0?{}:{cookies:r.cookies},...r.url===void 0?{}:{url:r.url}};return n}function m(t,n,r,i,a,o,s,c,l,u){let d={};for(let[e,t]of Object.entries(a))d[e]={mainBanner:{position:r.mainBanner.position,overlayOpacity:r.mainBanner.overlayOpacity,showClose:r.mainBanner.showClose,...r.mainBanner.showLocaleSwitcher?{showLocaleSwitcher:!0}:{},headingTag:r.mainBanner.headingTag,heading:t.mainBanner.heading,htmlText:t.mainBanner.htmlText,buttons:p(r.mainBanner.buttons,t.mainBanner.buttonLabels)},gpcBanner:{position:r.gpcBanner.position,overlayOpacity:r.gpcBanner.overlayOpacity,showClose:r.gpcBanner.showClose,...r.gpcBanner.showLocaleSwitcher?{showLocaleSwitcher:!0}:{},headingTag:r.gpcBanner.headingTag,heading:t.gpcBanner.heading,htmlText:t.gpcBanner.htmlText,buttons:p(r.gpcBanner.buttons,t.gpcBanner.buttonLabels)},preferenceModal:{position:r.preferenceModal.position,overlayOpacity:r.preferenceModal.overlayOpacity,showClose:r.preferenceModal.showClose,...r.preferenceModal.showLocaleSwitcher?{showLocaleSwitcher:!0}:{},persistent:r.preferenceModal.persistent,headingTag:r.preferenceModal.headingTag,heading:t.preferenceModal.heading,...r.preferenceModal.hasSubheading&&t.preferenceModal.subheading?{subheading:t.preferenceModal.subheading}:{},...t.preferenceModal.htmlText?{htmlText:t.preferenceModal.htmlText}:{},...t.preferenceModal.receiptLabel?{receiptLabel:t.preferenceModal.receiptLabel}:{},...t.preferenceModal.receiptDescription?{receiptDescription:t.preferenceModal.receiptDescription}:{},buttons:p(r.preferenceModal.buttons,t.preferenceModal.buttonLabels),categories:Object.fromEntries(n.map(e=>{let n=t.preferenceModal.categories.find(t=>t.id===e.id);return[e.id,{heading:n?.heading??e.id,headingTag:e.headingTag,htmlText:n?.htmlText??``,legalBasis:e.legalBasis,...e.legalBasis===`legitimate_interest`&&n?.legitimateInterestDescription?{legitimateInterestDescription:n.legitimateInterestDescription}:{},cookies:e.cookies}]}))}};return{_meta:o,cookies:e(t),defaultLocale:i,...s===void 0?{}:{expiryDays:s},translations:d,...c&&c.length>0?{allowedOrigins:c}:{},...l&&l.length>0?{regulations:l}:{},...u?{dpdpa:u}:{}}}export{s as a,c,t as d,e as i,a as l,n,o,m as r,f as s,i as t,r as u};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-MdjI3m3u.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-MdjI3m3u.js";var t=e(`square-pen`,[[`path`,{d:`M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7`,key:`1m0v6g`}],[`path`,{d:`M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z`,key:`ohrbg2`}]]),n=e(`trash`,[[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t as n,n as t};
@@ -0,0 +1 @@
1
+ import{a as e,c as t,l as n,u as r}from"./createLucideIcon-MdjI3m3u.js";import{t as i}from"./search-Bd2RdDRh.js";import{f as a,p as o,s}from"./index-H_Zm0X-u.js";import{t as c}from"./Table-DH_jh8_N.js";var l=[10,25,50,100],u=5;function d({page:r,totalPages:i,onPage:a}){let o=s(),[c,l]=t(String(r));return n(()=>{l(String(r))},[r]),e(`input`,{type:`number`,inputMode:`numeric`,min:1,max:i,value:c,"aria-label":o(`common.goToPage`),title:o(`common.goToPage`),onInput:e=>l(e.target.value),onBlur:()=>{let e=Number.parseInt(c,10),t=Number.isFinite(e)?Math.min(Math.max(e,1),i):r;l(String(t)),t!==r&&a(t)},onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},class:`w-14 px-1.5 py-1 text-sm text-center rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200`})}function f({page:t,total:n,pageSize:r,onPage:i,onPageSize:c}){let f=s(),p=Math.max(1,Math.ceil(n/r)),m=Math.min(u,p),h=Array.from({length:m},(e,t)=>t+1),g=p>u;return e(`nav`,{"aria-label":`Pagination`,class:`flex items-center justify-between gap-2 mt-4 flex-wrap`,children:[e(`div`,{class:`flex items-center gap-1`,children:[e(`button`,{onClick:()=>i(t-1),disabled:t<=1,"aria-label":f(`common.prev`),class:`px-3 py-1.5 text-sm rounded border border-gray-300 dark:border-gray-600 disabled:opacity-40 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors flex items-center gap-1`,children:[e(o,{size:14,"aria-hidden":`true`}),` `,f(`common.prev`)]}),h.map(n=>e(`button`,{onClick:()=>i(n),"aria-current":n===t?`page`:void 0,class:`px-2.5 py-1.5 text-sm rounded border transition-colors ${n===t?`border-blue-500 bg-blue-50 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400 font-medium`:`border-gray-300 dark:border-gray-600 hover:bg-gray-50 dark:hover:bg-gray-700`}`,children:n},n)),g&&e(d,{page:t,totalPages:p,onPage:i}),e(`button`,{onClick:()=>i(t+1),disabled:t>=p,"aria-label":f(`common.next`),class:`px-3 py-1.5 text-sm rounded border border-gray-300 dark:border-gray-600 disabled:opacity-40 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors flex items-center gap-1`,children:[f(`common.next`),` `,e(a,{size:14,"aria-hidden":`true`})]}),e(`span`,{class:`ml-2 text-sm text-gray-500 dark:text-gray-400`,children:f(`common.pageOfTotal`,{page:t,total:p})})]}),c&&e(`label`,{class:`flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400`,children:[f(`common.perPage`),e(`select`,{value:r,onChange:e=>c(Number(e.target.value)),class:`border border-gray-300 dark:border-gray-600 rounded px-1.5 py-1 bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200`,children:l.map(t=>e(`option`,{value:t,children:t},t))})]})]})}function p({loading:t,rows:n,columns:r,keyFn:a,emptyText:o,searchValue:l,onSearchChange:u,searchPlaceholder:d,filters:p,toolbarEnd:m,total:h,page:g,pageSize:_,onPage:v,onPageSize:y}){let b=s();return e(`div`,{children:[e(`div`,{class:`flex flex-wrap items-center gap-2 mb-3`,children:[e(`div`,{class:`relative flex-1 min-w-[200px] max-w-sm`,children:[e(i,{size:14,className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-gray-400`,"aria-hidden":`true`}),e(`input`,{type:`search`,value:l,onInput:e=>u(e.target.value),placeholder:d??b(`common.search`),"aria-label":d??b(`common.search`),class:`w-full pl-8 pr-3 py-1.5 text-sm border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200`})]}),p,e(`div`,{class:`ml-auto flex items-center gap-3`,children:m})]}),e(c,{loading:t,keyFn:a,rows:n,columns:r,...o===void 0?{}:{emptyText:o}}),e(f,{page:g,total:h,pageSize:_,onPage:v,onPageSize:y})]})}function m(){return new URLSearchParams(window.location.hash.split(`?`)[1]??``)}function h(e){let[n,i]=t(m);return{params:n,setParams:r(t=>{let n=m();for(let[e,r]of Object.entries(t))r===void 0||r===``?n.delete(e):n.set(e,String(r));let r=n.toString(),a=r?`${e}?${r}`:e;window.location.hash!==a&&(window.location.hash=a),i(n)},[e])}}export{p as n,h as t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./client-ymc9nwWr.js";var t={list:()=>e(`/users`),get:t=>e(`/users/${t}`),create:t=>e(`/users`,{method:`POST`,body:JSON.stringify(t)}),update:(t,n)=>e(`/users/${t}`,{method:`PUT`,body:JSON.stringify(n)}),delete:t=>e(`/users/${t}`,{method:`DELETE`}),assignRole:(t,n)=>e(`/users/${t}/roles`,{method:`POST`,body:JSON.stringify({roleId:n})}),revokeRole:(t,n)=>e(`/users/${t}/roles/${n}`,{method:`DELETE`})};export{t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./createLucideIcon-MdjI3m3u.js";var t=e(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};
@@ -0,0 +1,5 @@
1
+ var e={_section_nav:`── 导航 ──────────────────────────────────────────`,"nav.dashboard":`仪表盘`,"nav.consentBanners":`同意横幅`,"nav.consentTemplates":`Cookie 模板`,"nav.uiTemplates":`UI 模板`,"nav.profiles":`配置文件`,"nav.consents":`同意记录`,"nav.visitors":`访客`,"nav.users":`用户`,"nav.roles":`角色`,"nav.sites":`站点`,"nav.vendors":`TCF 供应商`,"nav.reports":`报告`,"nav.audit":`审计日志`,"nav.api":`API`,"nav.settings":`设置`,"nav.adminDashboard":`管理仪表盘`,_section_layout:`── 布局 ───────────────────────────────────────────`,"layout.expandSidebar":`展开侧边栏`,"layout.collapseSidebar":`收起侧边栏`,"layout.signOut":`退出登录`,"layout.toggleDark":`切换到深色模式`,"layout.toggleLight":`切换到浅色模式`,"layout.poweredBy":`技术支持`,_section_common:`── 通用 ───────────────────────────────────────────`,"common.loading":`加载中…`,"common.searching":`搜索中…`,"common.save":`保存`,"common.saving":`保存中…`,"common.cancel":`取消`,"common.close":`关闭`,"common.delete":`删除`,"common.edit":`编辑`,"common.create":`创建`,"common.confirm":`确认`,"common.noData":`暂无数据`,"common.search":`Search…`,"common.perPage":`每页`,"common.goToPage":`跳转到页面`,"common.pageOfTotal":`第 {{page}} 页,共 {{total}} 页`,"common.noResults":`No results match your search.`,"common.exportCsv":`导出 CSV`,"common.duplicate":`复制`,"common.active":`启用`,"common.inactive":`停用`,"common.name":`名称`,"common.email":`邮箱`,"common.status":`状态`,"common.created":`创建时间`,"common.id":`ID`,"common.add":`添加`,"common.remove":`移除`,"common.revoke":`撤销`,"common.required":`必填`,"common.version":`版本`,"common.locale":`语言区域`,"common.country":`国家`,"common.source":`来源`,"common.grantAll":`全部允许`,"common.revokeAll":`全部撤销`,"common.granted":`已允许`,"common.page":`第 {{n}} 页`,"common.prev":`上一页`,"common.next":`下一页`,"common.you":`你`,"common.default":`默认`,"common.hide":`隐藏`,"common.show":`显示`,"common.activate":`启用`,"common.deactivate":`停用`,"common.newRole":`新角色`,"common.copyToClipboard":`复制到剪贴板`,"common.back":`返回`,"common.copyId":`复制 ID`,"common.mandatory":`必需`,"common.optional":`可选`,"common.roles":`角色`,"common.showPassword":`显示密码`,"common.hidePassword":`隐藏密码`,"common.updated":`已更新`,_section_locale:`── 语言切换 ───────────────────────────────────────`,"locale.en":`英语`,"locale.switcherAria":`切换语言`,_section_login:`── 登录 ───────────────────────────────────────────`,"login.title":`{{appName}} 管理后台`,"login.subtitle":`登录到您的账户`,"login.email":`邮箱`,"login.emailPlaceholder":`admin@example.com`,"login.password":`密码`,"login.submit":`登录`,"login.submitting":`正在登录…`,"login.error.invalid":`邮箱或密码无效`,"login.devSignIn":`⚡ 开发:以 user@consenti.dev 身份登录`,_section_setupWizard:`── 设置向导 ─────────────────────────────────────`,"setupWizard.welcome.title":`欢迎使用 {{appName}}`,"setupWizard.welcome.body":`我们来设置您的同意管理。只需一分钟——我们会展示当前的配置,并帮助您安装一套初始的合规配置文件。`,"setupWizard.welcome.docsLink":`查看文档`,"setupWizard.welcome.howItWorksLink":`了解 Consenti 的工作原理`,"setupWizard.welcome.getStarted":`开始设置`,"setupWizard.welcome.skip":`跳过设置`,"setupWizard.config.title":`您的配置`,"setupWizard.config.subtitle":`以下是 Consenti 根据您的配置和环境变量解析出的结果,并与合理的默认值合并。敏感信息已隐藏。`,"setupWizard.back":`上一步`,"setupWizard.continue":`继续`,"setupWizard.profiles.title":`默认合规配置文件`,"setupWizard.profiles.subtitle":`Consenti 提供 8 个预置的合规配置文件,覆盖主要的全球隐私法规。请选择现在要安装的配置文件——之后也可以随时添加。`,"setupWizard.profiles.selectAll":`安装全部 8 个默认配置文件`,"setupWizard.profiles.installAndContinue":`安装并继续`,"setupWizard.profiles.skipAndContinue":`跳过并继续`,"setupWizard.profiles.error":`无法安装所选的配置文件。您可以稍后在“配置文件”页面重试。`,"setupWizard.confirmation.title":`一切就绪`,"setupWizard.confirmation.seededSummary":`已安装 {{count}} 个合规配置文件。`,"setupWizard.confirmation.noneSeeded":`未安装任何配置文件——您可以随时在“配置文件”页面创建。`,"setupWizard.confirmation.readinessTitle":`上线前须知`,"setupWizard.confirmation.readinessJsonStorage":`您目前使用的是 JSON 文件存储驱动——适合开发环境,但生产环境请切换为数据库驱动(node:sqlite、PostgreSQL、MySQL、MongoDB)。`,"setupWizard.confirmation.readinessDefaultCredentials":`未配置管理员凭据——Consenti 正在使用演示凭据。请在上线前设置 CONSENTI_ADMIN_EMAIL 和 CONSENTI_ADMIN_PASSWORD。`,"setupWizard.confirmation.howItWorks":`了解 Consenti 的工作原理`,"setupWizard.confirmation.goToDashboard":`前往仪表盘`,_section_dashboard:`── 仪表盘 ───────────────────────────────────────`,"dashboard.title":`仪表盘`,"dashboard.stats.totalConsents":`同意总数`,"dashboard.stats.totalVisitors":`访客总数`,"dashboard.stats.accepted":`已接受`,"dashboard.stats.acceptedSub":`≥80% 的 cookies 已授权`,"dashboard.stats.rejected":`已拒绝`,"dashboard.stats.rejectedSub":`≤20% 的 cookies 已授权`,"dashboard.chart.timeline":`同意趋势(最近 30 天)`,"dashboard.chart.timelineAria":`同意趋势图表`,"dashboard.chart.countries":`热门国家`,"dashboard.chart.noData":`暂无数据。`,"dashboard.chart.noCountryData":`暂无国家数据。`,"dashboard.gpc.label":`GPC 检测率`,"dashboard.gpc.sub":`{{detected}} / {{total}} 条同意记录`,"dashboard.viewReports":`查看完整报告 →`,_section_reports:`── 报告 ──────────────────────────────────────────`,"reports.title":`报告`,"reports.filters.from":`起始日期`,"reports.filters.to":`结束日期`,"reports.filters.apply":`应用`,"reports.optin.total":`决定总数`,"reports.optin.granted":`已同意`,"reports.optin.denied":`已拒绝`,"reports.optin.managed":`部分管理`,"reports.optin.byDate":`同意趋势`,"reports.optin.byDateAria":`一段时间内的同意决定`,"reports.optin.byLocale":`按语言`,"reports.category.title":`按类别`,"reports.legend.granted":`已同意`,"reports.legend.denied":`已拒绝`,"reports.legend.objected":`已反对`,"reports.legend.managed":`已管理`,_section_consents:`── 同意记录 ───────────────────────────────────────`,"consents.title":`同意记录`,"consents.filterFrom":`开始`,"consents.filterTo":`结束`,"consents.filterGpc":`仅 GPC`,"consents.records":`{{n}} 条记录`,"consents.empty":`目前还没有同意记录。`,"consents.col.visitorId":`访客 ID`,"consents.col.profile":`配置文件`,"consents.col.locale":`语言区域`,"consents.col.gpc":`GPC`,"consents.col.age":`年龄`,"consents.col.source":`来源`,"consents.col.created":`创建时间`,"consents.gpcYes":`是`,"consents.ageVerified":`已验证`,"consents.searchPlaceholder":`搜索访客、配置、语言、来源…`,"consents.detail.title":`同意记录`,"consents.detail.updated":`更新时间`,"consents.detail.consentJson":`同意数据`,"consents.detail.signature":`签名`,"consents.detail.signed":`已签名`,"consents.detail.unsigned":`未签名`,_section_visitors:`── 访客 ───────────────────────────────────────────`,"visitors.title":`访客`,"visitors.empty":`目前还没有访客记录。`,"visitors.col.visitorId":`访客 ID`,"visitors.col.country":`国家`,"visitors.col.firstSeen":`首次访问`,"visitors.col.lastSeen":`最近访问`,"visitors.searchPlaceholder":`搜索访客ID、国家…`,"visitors.detail.title":`访客`,"visitors.detail.region":`地区`,"visitors.detail.city":`城市`,_section_users:`── 用户 ──────────────────────────────────────────`,"users.title":`用户`,"users.count":`{{n}} 位用户`,"users.newUser":`+ 新建用户`,"users.createForm.title":`创建用户`,"users.createForm.namePlaceholder":`姓名`,"users.createForm.emailPlaceholder":`邮箱`,"users.createForm.passwordPlaceholder":`密码`,"users.createForm.confirmPasswordPlaceholder":`确认密码`,"users.createForm.selectRole":`选择角色…`,"users.createForm.passwordMismatch":`两次密码不一致`,"users.createForm.error":`创建用户失败`,"users.col.status":`状态`,"users.status.active":`启用`,"users.status.inactive":`停用`,"users.action.activate":`启用`,"users.action.deactivate":`停用`,"users.dialog.delete.title":`删除用户“{{name}}”吗?`,"users.dialog.delete.message":`此用户账户将被永久移除。`,_section_roles:`── 角色与权限 ───────────────────────────────────`,"roles.title":`角色与权限`,"roles.list.heading":`角色`,"roles.list.empty":`目前还没有角色。创建一个开始使用。`,"roles.form.roleNameLabel":`角色名称`,"roles.form.roleNamePlaceholder":`例如:编辑`,"roles.form.descriptionLabel":`描述`,"roles.form.descriptionPlaceholder":`可选描述`,"roles.perms.heading":`权限 — {{name}}`,"roles.perms.selectPrompt":`选择一个角色来管理权限`,"roles.perms.clickPrompt":`点击左侧角色以查看和管理其权限。`,"roles.perms.noPerms":`系统中尚未定义任何权限。`,"roles.error.load":`加载角色失败。`,"roles.error.create":`创建角色失败。`,"roles.error.update":`更新角色失败。`,"roles.error.delete":`删除角色失败。`,"roles.error.perm":`更新权限失败。`,"roles.dialog.delete.title":`删除角色“{{name}}”吗?`,"roles.dialog.delete.message":`分配了此角色的用户将立即失去其权限。`,"roles.aria.editRole":`编辑角色`,"roles.aria.deleteRole":`删除角色`,_section_profiles:`── 配置文件 ───────────────────────────────────────`,"profiles.title":`配置文件`,"profiles.count":`{{n}} 个配置文件`,"profiles.countSingular":`{{n}} 个配置文件`,"profiles.newProfile":`+ 新建配置文件`,"profiles.empty":`目前还没有配置文件。创建一个开始使用。`,"profiles.search.placeholder":`Search profiles…`,"profiles.filter.status":`Status`,"profiles.filter.active":`Active`,"profiles.filter.inactive":`Inactive`,"profiles.archived.cta":`Archived Profiles`,"profiles.archived.title":`Archived Profiles`,"profiles.archived.back":`Back to profiles`,"profiles.archived.hint":`Profile-id directories found on disk with no matching database entry — deleted profiles whose version snapshots weren't. Click one to browse its version history.`,"profiles.archived.empty":`No archived profiles found.`,"profiles.archived.searchPlaceholder":`Search by profile ID…`,"profiles.archived.col.id":`Profile ID`,"profiles.archived.col.versions":`Versions`,"profiles.archived.col.lastModified":`Last Modified`,"profiles.archived.viewHistory":`View history`,"profiles.col.name":`名称`,"profiles.col.defaultLocale":`默认语言区域`,"profiles.col.templates":`模板`,"profiles.col.created":`创建时间`,"profiles.template.cookie":`Cookie:`,"profiles.template.ui":`UI:`,"profiles.action.copyId":`复制配置文件 ID`,"profiles.action.copySlug":`Copy compliance group slug`,"profiles.action.copying":`正在复制…`,"profiles.dialog.delete.title":`删除“{{name}}”吗?`,"profiles.dialog.delete.message":`此配置文件及其所有语言内容将被永久移除。`,"profiles.dialog.copy.title":`复制“{{name}}”吗?`,"profiles.dialog.copy.message":`此配置文件及其所有语言内容将被复制。`,_section_profileEditor:`── 配置文件编辑器 ───────────────────────────────`,"profileEditor.title.new":`新建配置文件`,"profileEditor.title.edit":`编辑配置文件`,"profileEditor.title.loading":`配置文件编辑器`,"profileEditor.step.config":`配置文件设置`,"profileEditor.step.templates":`模板`,"profileEditor.step.content":`内容`,"profileEditor.step.mainBanner":`主横幅`,"profileEditor.step.gpcBanner":`GPC 横幅`,"profileEditor.step.prefModal":`偏好设置模态`,"profileEditor.config.profileName":`配置文件名称`,"profileEditor.config.profileNamePlaceholder":`我的网站`,"profileEditor.config.defaultLocale":`默认语言区域`,"profileEditor.config.allowedDomains":`允许的域名`,"profileEditor.config.allowedDomainsHint":`支持通配符(*.example.com)。留空表示允许全部。`,"profileEditor.config.regulations":`合规法规`,"profileEditor.config.reg.gdprLabel":`GDPR`,"profileEditor.config.reg.gdprDesc":`欧盟/欧洲经济区选择加入。在获得同意前不会跟踪。首次访问时显示横幅。`,"profileEditor.config.reg.ccpaLabel":`CCPA`,"profileEditor.config.reg.ccpaDesc":`加州选择退出。Cookie 默认已授权。提供“请勿出售”触发器。`,"profileEditor.config.reg.cpraLabel":`CPRA`,"profileEditor.config.reg.cpraDesc":`加州 2023。销售/共享默认选择退出;敏感数据选择加入。支持 GPC。`,"profileEditor.config.reg.dpdpaLabel":`DPDPA`,"profileEditor.config.reg.dpdpaDesc":`印度 2023。类似 GDPR 的选择加入。GPC 不被识别。需要数据受托人通知。`,"profileEditor.config.darkMode":`启用深色模式`,"profileEditor.config.darkModeHint":`为使用深色主题的网站同意组件应用深色颜色令牌。`,"profileEditor.config.dpdpa.heading":`DPDPA — 同意通知所需字段`,"profileEditor.config.dpdpa.fiduciary":`数据受托人名称`,"profileEditor.config.dpdpa.fiduciaryPlaceholder":`Acme Corp Pvt Ltd`,"profileEditor.config.dpdpa.grievanceEmail":`申诉官邮箱`,"profileEditor.config.dpdpa.grievanceEmailPlaceholder":`grievance@acme.com`,"profileEditor.config.dpdpa.purpose":`用途说明`,"profileEditor.config.dpdpa.purposePlaceholder":`我们收集您的数据以个性化您的体验…`,"profileEditor.templates.cookieTemplate":`Cookie 模板`,"profileEditor.templates.cookieTemplateHint":`定义偏好弹窗中显示哪些 cookie/用途。所有字段均来自模板——在配置文件中只读。`,"profileEditor.templates.selectCookie":`— 选择一个 Cookie 模板 —`,"profileEditor.templates.uiTemplate":`UI 模板`,"profileEditor.templates.uiTemplateHint":`定义横幅/弹窗布局、按钮数量和分类结构。在第 3–5 步中添加文本内容。`,"profileEditor.templates.selectUi":`— 选择一个 UI 模板 —`,"profileEditor.templates.noTemplate":`未选择模板。`,"profileEditor.templates.previewPrompt":`请选择一个 Cookie 模板和一个 UI 模板以查看实时预览。`,"profileEditor.templates.categoriesCount":`个类别`,"profileEditor.templates.buttonsTotal":`个按钮总数`,"profileEditor.content.loadDefaults":`加载默认值`,"profileEditor.content.loadDefaultsTitle":`使用符合合规要求的英文默认值填充此部分`,"profileEditor.content.loadDefaultsNotice":`默认值仅为英文 — 请使用上方的语言标签进行翻译。`,"profileEditor.content.importError":`无法解析上传的文件。请确保其符合 Consenti 语言模板格式。`,"profileEditor.content.mainBanner":`主横幅`,"profileEditor.content.gpcBanner":`GPC 横幅`,"profileEditor.content.prefModal":`偏好设置弹窗`,"profileEditor.content.heading":`标题`,"profileEditor.content.subheading":`副标题`,"profileEditor.content.bodyText":`正文`,"profileEditor.content.introText":`引言文本(可选)`,"profileEditor.content.buttonLabels":`按钮标签`,"profileEditor.content.categoryHeading":`类别标题`,"profileEditor.content.categoryDesc":`类别描述`,"profileEditor.content.categoryFallback":`类别 {{n}}`,"profileEditor.content.buttonLabelPlaceholder":`按钮文本…`,"profileEditor.content.categoryDescPlaceholder":`此 Cookie 类别的描述…`,"profileEditor.content.liDescription":`正当利益说明(可选)`,"profileEditor.content.liDescriptionPlaceholder":`我们依据正当利益,因为…`,"profileEditor.content.liDescriptionHint":`向访问者展示的、说明依据正当利益处理数据的 GDPR 利益权衡测试依据。可选 — 您也可以在上方的类别描述中说明。`,"profileEditor.content.mainBannerHeadingPlaceholder":`我们重视您的隐私`,"profileEditor.content.mainBannerBodyPlaceholder":`我们使用 Cookie 来改善您的体验…`,"profileEditor.content.gpcHeadingPlaceholder":`检测到 Global Privacy Control`,"profileEditor.content.prefHeadingPlaceholder":`隐私偏好`,"profileEditor.content.prefSubheadingPlaceholder":`在下方管理您的 Cookie 偏好。`,"profileEditor.content.prefIntroPlaceholder":`类别上方的可选引言…`,"profileEditor.content.noContent":`请在第 2 步选择一个 UI 模板以开始编辑内容。`,"profileEditor.content.loadingTemplate":`正在加载模板…`,"profileEditor.nav.nextTemplates":`下一步:模板`,"profileEditor.nav.nextContent":`下一步:内容`,"profileEditor.nav.nextMainBanner":`下一步:主横幅`,"profileEditor.nav.nextGpcBanner":`下一步:GPC 横幅`,"profileEditor.nav.nextPrefModal":`下一步:偏好设置模态`,"profileEditor.action.create":`创建配置文件`,"profileEditor.action.save":`保存配置文件`,"profileEditor.error.nameRequired":`配置文件名称为必填项。`,"profileEditor.error.nameRequiredContinue":`继续之前必须填写配置文件名称。`,"profileEditor.error.cookieRequired":`请选择一个 Cookie 模板。`,"profileEditor.error.cookieContinue":`请选择一个 Cookie 模板以继续。`,"profileEditor.error.uiRequired":`请选择一个 UI 模板。`,"profileEditor.error.uiContinue":`请选择一个 UI 模板以继续。`,"profileEditor.error.failed":`保存配置文件失败。`,"profileEditor.error.load":`加载配置文件失败。`,"profileEditor.table.noNoCookies":`此模板中未定义任何 cookie。`,"profileEditor.table.id":`ID`,"profileEditor.table.legalBasis":`法律依据`,"profileEditor.table.mandatory":`必需`,"profileEditor.table.gpc":`GPC`,"profileEditor.table.tcfVendor":`TCF 供应商`,"profileEditor.table.cpraCategory":`CPRA 类别`,"profileEditor.table.cookies":`Cookie`,"profileEditor.export.json":`JSON`,"profileEditor.export.csv":`CSV`,"profileEditor.export.import":`导入`,"profileEditor.export.jsonTitle":`将语言内容下载为 JSON`,"profileEditor.export.csvTitle":`将语言内容下载为 CSV 以便翻译`,"profileEditor.export.importTitle":`上传翻译后的 JSON 或 CSV`,"profileEditor.newLink":`+ 新建 ↗`,_section_consentTemplates:`── Cookie 模板 ─────────────────────────`,"consentTemplates.title":`Cookie 模板`,"consentTemplates.count":`{{n}} 个模板`,"consentTemplates.countSingular":`{{n}} 个模板`,"consentTemplates.new":`+ 新建 Cookie 模板`,"consentTemplates.empty.title":`目前还没有 Cookie 模板。`,"consentTemplates.empty.hint":`Cookie 模板定义了同意配置文件中的 Cookie/用途列表。创建一个后可在多个配置文件中复用。`,"consentTemplates.search.placeholder":`Search consent templates…`,"consentTemplates.col.name":`Name`,"consentTemplates.col.cookies":`Cookies`,"consentTemplates.required":`必需`,"consentTemplates.dialog.delete.title":`删除“{{name}}”吗?`,"consentTemplates.dialog.delete.message":`此 Cookie 模板将被永久移除。关联的配置文件将失去其 Cookie 定义。`,"consentTemplates.editor.title.new":`新建 Cookie 模板`,"consentTemplates.editor.title.edit":`编辑 Cookie 模板`,"consentTemplates.editor.name":`模板名称`,"consentTemplates.editor.namePlaceholder":`例如:Google Analytics + Ads`,"consentTemplates.editor.nameRequired":`模板名称为必填项。`,"consentTemplates.editor.definitions":`Cookie 定义`,"consentTemplates.editor.empty":`目前还没有定义 Cookie。请在上方添加一个。`,"consentTemplates.editor.addCookie":`+ 添加 Cookie`,"consentTemplates.editor.idNoMatches":`没有匹配的已知键 — 你仍然可以输入自定义 ID`,"consentTemplates.editor.error.allIds":`所有 Cookie 都必须有 ID。`,"consentTemplates.editor.error.uniqueIds":`Cookie ID 必须唯一。`,"consentTemplates.editor.error.failed":`保存模板失败。`,"consentTemplates.editor.error.notFound":`未找到模板。`,"consentTemplates.editor.action.create":`创建模板`,"consentTemplates.editor.action.save":`保存模板`,"consentTemplates.editor.showTcf":`TCF 供应商`,"consentTemplates.editor.showCpra":`CPRA 类别`,"consentTemplates.editor.infoHint":`点击列标题了解更多`,"consentTemplates.editor.infoUsage":`用途`,"consentTemplates.editor.infoLaws":`监管指导`,"consentTemplates.editor.infoExamples":`示例`,"consentTemplates.col.id":`Cookie ID`,"consentTemplates.col.idShort":`ID / 名称`,"consentTemplates.col.gpc":`尊重 GPC 信号`,"consentTemplates.col.gpcShort":`GPC`,"consentTemplates.col.tcfVendor":`TCF 供应商 ID`,"consentTemplates.col.cpraCategory":`CPRA 数据类别`,"consentTemplates.col.tcfVendorShort":`TCF 供应商`,"consentTemplates.col.cpraCategoryShort":`CPRA 类别`,"consentTemplates.col.purpose":`Cookie 用途`,"consentTemplates.col.purposeShort":`用途`,"consentTemplates.purpose.necessary":`必要`,"consentTemplates.purpose.functional":`功能`,"consentTemplates.purpose.preferences":`偏好`,"consentTemplates.purpose.analytics":`分析`,"consentTemplates.purpose.marketing":`营销`,"consentTemplates.editor.purposePlaceholder":`选择用途…`,"consentTemplates.editor.error.purpose":`每个 Cookie 都必须设置用途。`,_section_uiTemplates:`── UI 模板 ─────────────────────────`,"uiTemplates.title":`UI 模板`,"uiTemplates.count":`{{n}} 个模板`,"uiTemplates.countSingular":`{{n}} 个模板`,"uiTemplates.new":`+ 新建 UI 模板`,"uiTemplates.empty.title":`目前还没有 UI 模板。`,"uiTemplates.empty.hint":`UI 模板定义同意横幅和弹窗的视觉配置——位置、按钮、类别。`,"uiTemplates.search.placeholder":`Search UI templates…`,"uiTemplates.col.name":`Name`,"uiTemplates.col.positions":`Positions`,"uiTemplates.col.buttons":`Buttons`,"uiTemplates.mainBanner":`主横幅:`,"uiTemplates.gpcBanner":`GPC 横幅:`,"uiTemplates.modal":`弹窗:`,"uiTemplates.categories":`{{n}} 个类别`,"uiTemplates.dialog.delete.title":`删除“{{name}}”吗?`,"uiTemplates.dialog.delete.message":`此 UI 模板将被永久移除。关联的配置文件将失去其 UI 设置。`,"uiTemplates.editor.title.new":`新建 UI 模板`,"uiTemplates.editor.title.edit":`编辑 UI 模板`,"uiTemplates.editor.name":`模板名称`,"uiTemplates.editor.nameRequired":`模板名称为必填项。`,"uiTemplates.editor.namePlaceholder":`例如:标准 GDPR 布局`,"uiTemplates.editor.loading":`正在加载模板…`,"uiTemplates.editor.tabMain":`主横幅`,"uiTemplates.editor.tabGpc":`GPC 横幅`,"uiTemplates.editor.tabModal":`偏好设置弹窗`,"uiTemplates.editor.mainBannerHint":`首次访问且尚未记录同意时显示。`,"uiTemplates.editor.gpcBannerHint":`检测到 GPC 信号时显示,替代主横幅(启用 autoHonorGPC)。`,"uiTemplates.editor.error.notFound":`未找到模板。`,"uiTemplates.editor.error.buttons":`所有按钮都必须有 ID。`,"uiTemplates.editor.error.uniqueButtonIds":`Button IDs must be unique.`,"uiTemplates.editor.error.customButtons":`所有“custom”操作按钮都必须选择 cookie。`,"uiTemplates.editor.error.catIds":`所有类别 ID 均为必填项。`,"uiTemplates.editor.error.uniqueCatIds":`类别 ID 必须唯一。`,"uiTemplates.editor.error.catCookies":`每个类别至少必须包含一个 cookie。`,"uiTemplates.editor.error.failed":`保存模板失败。`,"uiTemplates.editor.action.create":`创建模板`,"uiTemplates.editor.action.save":`保存模板`,_section_sites:`── 站点 / 租户 ───────────────────────────────`,"sites.title":`站点 / 租户`,"sites.createNew":`创建新站点`,"sites.namePlaceholder":`站点名称`,"sites.slugPlaceholder":`slug(例如:site-a)`,"sites.col.name":`名称`,"sites.col.slug":`Slug`,"sites.col.id":`ID`,"sites.col.created":`创建时间`,"sites.empty":`目前还没有站点。`,"sites.dialog.delete.title":`删除“{{name}}”吗?`,"sites.dialog.delete.message":`此站点及所有相关数据将被永久移除,且无法撤销。`,_section_vendors:`── TCF 供应商 ─────────────────────────────────`,"vendors.title":`TCF 供应商列表`,"vendors.info.title":`什么是 TCF 供应商列表?`,"vendors.searchPlaceholder":`搜索供应商…`,"vendors.gvlMeta":`GVL v{{version}} · 共 {{total}} 位供应商`,"vendors.loading":`正在加载供应商列表…`,"vendors.noResults":`未找到供应商。`,"vendors.col.id":`ID`,"vendors.col.name":`名称`,"vendors.col.purposes":`用途`,"vendors.col.liPurposes":`合法利益用途`,"vendors.col.specialPurposes":`特殊用途`,"vendors.pagination":`第 {{page}} / {{totalPages}} 页 · 共 {{total}} 位供应商`,"vendors.prev":`← 上一页`,"vendors.next":`下一页 →`,_section_audit:`── 审计日志 ─────────────────────────────────────`,"audit.title":`审计日志`,"audit.empty":`目前还没有审计事件。`,"audit.col.time":`时间`,"audit.col.action":`操作`,"audit.col.resource":`资源`,"audit.col.resourceId":`资源 ID`,"audit.col.actor":`操作者`,"audit.actor.system":`系统`,"audit.viewHistory":`比较`,"audit.searchPlaceholder":`搜索操作、资源、操作人…`,"audit.detail.title":`审计条目`,"audit.detail.oldData":`旧数据`,"audit.detail.newData":`新数据`,_section_apiConfig:`── API 配置 ───────────────────────────────────`,"apiConfig.title":`API 配置`,"apiConfig.public.heading":`公开 API`,"apiConfig.public.about.text":`供小组件提交和管理同意使用。没有身份验证令牌——下方的允许来源是其唯一的访问控制。`,"apiConfig.public.about.link":`在 consenti.dev 上打开公开 API 参考文档`,"apiConfig.admin.heading":`管理 API`,"apiConfig.admin.about.text":`使用这些令牌从脚本、CI/CD 或服务器端集成调用 Consenti 管理 API。所有路由、请求/响应格式和身份验证头都记录在 consenti.dev 上。`,"apiConfig.admin.about.link":`在 consenti.dev 上打开管理 API 参考文档`,"apiConfig.endpoint.heading":`端点`,"apiConfig.endpoint.hint":`根据您的配置解析出的此部署的基础 URL。`,"apiConfig.origins.heading":`允许的来源`,"apiConfig.origins.hint":`只有来自这些来源的请求才会被接受。使用 * 可允许全部来源(生产环境不推荐)。`,"apiConfig.origins.publicNote":`公开 API 没有身份验证令牌——此列表是其唯一的访问控制。`,"apiConfig.origins.adminNote":`在 Bearer 令牌身份验证之上增加的一层控制。请包含此仪表盘自身的来源({{origin}}),以避免将自己锁在外面。`,"apiConfig.origins.placeholder":`https://example.com`,"apiConfig.origins.empty":`尚未配置来源——当前允许所有来源。`,"apiConfig.origins.errorDuplicate":`已在列表中。`,"apiConfig.origins.errorSave":`保存失败,请重试。`,"apiConfig.origins.remove":`移除`,"apiConfig.tokens.heading":`管理员 API 令牌`,"apiConfig.tokens.hint":`用于服务器端和 CI/CD 访问 Consenti 管理 API 的 Bearer 令牌。请作为 Authorization: Bearer <token> 传递。切勿在客户端代码中暴露——它们拥有完整的管理权限。`,"apiConfig.tokens.created":`令牌已创建——请立即复制,之后不会再次显示。`,"apiConfig.tokens.placeholder":`令牌名称(例如:CI 部署)`,"apiConfig.tokens.empty":`目前还没有令牌。`,"apiConfig.tokens.errorName":`名称为必填项`,"apiConfig.tokens.errorCreate":`创建令牌失败`,"apiConfig.tokens.col.name":`名称`,"apiConfig.tokens.col.status":`状态`,"apiConfig.tokens.col.created":`创建时间`,"apiConfig.tokens.status.active":`启用`,"apiConfig.tokens.status.revoked":`已撤销`,"apiConfig.tokens.status.expired":`Expired`,"apiConfig.tokens.col.expires":`Expires`,"apiConfig.tokens.expiresLabel":`Expires (optional)`,"apiConfig.tokens.expiresNever":`Never`,"apiConfig.tokens.dialog.title":`撤销此 API 令牌?`,"apiConfig.tokens.dialog.message":`使用此令牌的任何应用将立即失去访问权限。`,"apiConfig.tokens.reactivate":`重新启用`,"apiConfig.tokens.deleteDialog.title":`永久删除此 API 令牌?`,"apiConfig.tokens.deleteDialog.message":`这将彻底删除该令牌记录,且无法撤销。之后将无法重新启用。`,_section_settings:`── 设置 ───────────────────────────────────────`,"settings.title":`设置`,"settings.account.heading":`账户`,"settings.account.email":`邮箱:`,"settings.account.roles":`角色:`,"settings.account.id":`ID:`,"settings.account.changePassword":`修改密码`,"settings.export.heading":`导出数据`,"settings.export.hint":`下载所有同意记录或审计日志。`,"settings.export.consentCsv":`同意 CSV`,"settings.export.consentXlsx":`同意 XLSX`,"settings.export.consentJson":`同意 JSON`,"settings.export.auditCsv":`审计 CSV`,"settings.about.heading":`关于`,"settings.about.text":`Consenti v0.1.0 —— 一款开源、符合 GDPR 的同意管理平台。`,"settings.about.license":`Apache 2.0 许可证。`,_section_changePassword:`── 修改密码 ───────────────────────────────────`,"changePassword.title":`修改密码`,"changePassword.hint":`请选择一个至少 12 个字符的强密码。`,"changePassword.success":`密码更新成功。`,"changePassword.newPassword":`新密码`,"changePassword.newPasswordPlaceholder":`至少 12 个字符`,"changePassword.confirmPassword":`确认新密码`,"changePassword.confirmPasswordPlaceholder":`再次输入新密码`,"changePassword.submit":`更新密码`,"changePassword.submitting":`保存中…`,"changePassword.error.minLength":`密码必须至少包含 12 个字符。`,"changePassword.error.mismatch":`两次输入的密码不一致。`,"changePassword.error.failed":`更新密码失败。`,"login.showPassword":`Show password`,"login.hidePassword":`Hide password`,"users.allowedSites":`Allowed Sites`,"users.allowedSitesHint":`(leave empty to allow all)`,"users.edit.title":`Edit User: {{name}}`,"users.edit.error.save":`Failed to save changes.`,"users.edit.resetPassword":`重置密码`,"users.edit.resetPasswordHint":`(留空以保留当前密码)`,"users.edit.newPassword":`新密码`,"users.edit.confirmNewPassword":`确认新密码`,"users.edit.passwordTooShort":`密码必须至少12个字符`,"users.detail.title":`用户`,"users.detail.allSites":`所有站点`,"profileEditor.import.imported":`Imported {{n}} locales: {{list}}`,"profileEditor.import.importedSingular":`Imported 1 locale: {{list}}`,"profileEditor.import.skipped":`Skipped {{n}} unrecognised locale keys: {{list}}`,"profileEditor.import.skippedSingular":`Skipped 1 unrecognised locale key: {{list}}`,"profileEditor.config.selectDefaultLocale":`Select default locale…`,"profileEditor.config.complianceGroup":`Compliance Group`,"profileEditor.config.complianceGroupNone":`None / Custom`,"profileEditor.config.customComplianceGroup":`Custom group name`,"profileEditor.config.customComplianceGroupPlaceholder":`e.g. internal-testing`,"profileEditor.config.customComplianceGroupHint":`Lower-kebab-case identifier. The widget's compliance.type config uses this to fetch the profile — required, since there's no other way to address it. Only one profile can be active per name at a time. No compliance-rule defaults are applied (those only exist for the built-in groups above).`,"profileEditor.config.gpcMode":`GPC Signal Mode`,"profileEditor.config.gpcModeDefault":`Default (inherit from compliance group)`,"profileEditor.config.gpcModePlaceholder":`Default`,"profileEditor.config.hidePoweredBy":`Hide "Powered by Consenti"`,"profileEditor.config.hidePoweredByHint":`Remove the branding link from the consent banner.`,"profileEditor.config.allowReceipt":`Allow consent receipt`,"profileEditor.config.allowReceiptHint":`Let visitors download a PDF receipt of their consent choices.`,"profileEditor.config.enhanceAccessibility":`增强无障碍`,"profileEditor.config.enhanceAccessibilityHint":`为同意组件应用WCAG 2.1 AA按钮尺寸(最小高度44px)、可见焦点环和屏幕阅读器标签。`,"profileEditor.config.showFooterMetadata":`显示页脚元数据`,"profileEditor.config.showFooterMetadataHint":`在横幅和弹窗中显示同意ID、日期、配置版本和隐私设置链接。`,"profileEditor.conflict.title":`Active profile conflict`,"profileEditor.conflict.message":`Profile "{{name}}" is already active for this compliance group. Only one profile can be active per group.`,"profileEditor.conflict.deactivate":`Deactivate "{{name}}" and activate this one`,"profileEditor.conflict.saveInactive":`Save this profile as inactive`,"profileEditor.compliance.errors.heading":`Compliance errors — fix before continuing:`,"profileEditor.compliance.warnings.heading":`Compliance warnings:`,"profileEditor.compliance.warnings.acknowledge":`I acknowledge these warnings and wish to continue`,"profileEditor.compliance.preGrantOverridden":`Pre-grant was overridden for these parameters — this compliance group requires an explicit opt-in, so "Pre Grant" cannot stay enabled.`,"profileEditor.content.selectLocale":`Select locale…`,"profileEditor.content.addLocale":`+ Add locale`,"profileEditor.content.defaultLocaleLabel":`(default)`,_section_readability:`── Readability Warnings ─────────────────────────`,"readability.headingTooLong":`Heading is {{n}} characters — keep it under 80 for readability.`,"readability.avgSentenceLong":`Average sentence length is {{n}} words — aim for 25 or fewer.`,"readability.totalWordsLong":`Text is {{n}} words long — consider keeping banner copy under 150 words.`,"consentTemplates.editor.gpcMandatoryTitle":`Mandatory cookies are never auto-denied by GPC`,"consentTemplates.editor.loadDefaultsBtn":`Click here to load default cookies list`,"consentTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"consentTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"consentTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
2
+
3
+ Saving will update cookie definitions for all profiles using this template. Continue?`,"uiTemplates.editor.loadDefaultsPrompt":`Start from scratch, or load a sensible default structure (buttons, categories, positions).`,"uiTemplates.editor.loadDefaultsBtn":`Load Defaults`,"uiTemplates.editor.confirmUpdate.title":`Update template used by {{n}} profiles?`,"uiTemplates.editor.confirmUpdate.titleSingular":`Update template used by 1 profile?`,"uiTemplates.editor.confirmUpdate.message":`Profiles: {{names}}.
4
+
5
+ Saving will apply UI changes to all profiles using this template. Continue?`,"uiTemplates.editor.wizard.stepOf":`第 {{step}} 步,共 {{total}} 步`,"uiTemplates.editor.wizard.next":`下一步`,"uiTemplates.editor.wizard.back":`返回`,"uiTemplates.editor.stackButtonsOnBreakpoint":`按钮折叠宽度 (px)`,"uiTemplates.editor.stackButtonsOnBreakpointHint":`在此视口宽度以下,按钮垂直堆叠。设为0则禁用。默认: 400。`,"uiTemplates.editor.trapFocus":`锁定焦点`,"uiTemplates.editor.trapFocusHint":`当此横幅或弹窗可见时,将键盘Tab焦点限制在同意根元素内。`,_section_howItWorks:`── Consenti 使用指南 ─────────────────────────────────`,"nav.howItWorks":`Consenti 使用指南`,"howItWorks.title":`Consenti 使用指南`,"howItWorks.intro":`Consenti 是一款开源、符合 GDPR 的 Cookie 同意管理平台。它负责处理网站的 Cookie 同意收集、存储和报告。本指南将引导您了解主要工作流程,并介绍仪表盘的每个功能区域。`,"howItWorks.workflow.heading":`核心工作流程`,"howItWorks.workflow.step1.title":`定义 Cookie 类别`,"howItWorks.workflow.step1.desc":`前往「同意横幅 → Cookie 模板」,创建列出您网站所有 Cookie 类别(如分析、营销)的模板,并为每个类别设置法律依据和有效期。`,"howItWorks.workflow.step2.title":`设计同意界面`,"howItWorks.workflow.step2.desc":`前往「同意横幅 → UI 模板」,配置横幅和偏好弹窗的视觉布局,包括按钮文字、颜色、布局样式和类别显示方式。`,"howItWorks.workflow.step3.title":`创建同意配置文件`,"howItWorks.workflow.step3.desc":`前往「同意横幅 → 配置文件」,将 Cookie 模板与 UI 模板组合。为每种语言添加翻译文本,启用所需法规(GDPR、CCPA、DPDPA)并发布。`,"howItWorks.workflow.step4.title":`嵌入组件`,"howItWorks.workflow.step4.desc":`从「API → 配置」复制您的 API 密钥,并将 Consenti 脚本标签添加到网站 HTML 中。组件将自动获取已发布的配置文件并显示同意横幅。`,"howItWorks.workflow.step5.title":`监控与审计`,"howItWorks.workflow.step5.desc":`使用「同意记录」和「访客」页面查看实时同意记录。使用「审计日志」获取所有管理操作的不可篡改历史记录,作为合规证明。`,"howItWorks.features.heading":`仪表盘功能`,"howItWorks.features.dashboard.title":`仪表盘`,"howItWorks.features.dashboard.desc":`主屏幕显示实时 KPI——同意总数、接受率、拒绝率和时间序列图表。用于发现趋势并评估横幅变更的影响。`,"howItWorks.features.reports.title":`报告`,"howItWorks.features.reports.desc":`指定日期范围内的同意趋势,以及按类别和语言划分的明细(已同意/已拒绝/已反对)。需要 stats:view 权限。`,"howItWorks.features.consentTemplates.title":`Cookie 模板`,"howItWorks.features.consentTemplates.desc":`可复用的 Cookie 类别列表。每个类别包含 ID、法律依据(同意、合法利益、必要)、GPC 信号处理、有效期,以及可选的 TCF 供应商或 CPRA 类别映射。`,"howItWorks.features.uiTemplates.title":`UI 模板`,"howItWorks.features.uiTemplates.desc":`控制同意横幅、GPC 通知和偏好弹窗的外观。可配置按钮组、标题标签、遮罩层透明度和类别显示顺序。`,"howItWorks.features.profiles.title":`配置文件`,"howItWorks.features.profiles.desc":`配置文件是可部署的单元。它将 Cookie 模板与 UI 模板绑定,存储多语言内容,并跟踪版本号以支持回滚。每个域名同时只能有一个配置文件处于激活状态。`,"howItWorks.features.consents.title":`同意记录`,"howItWorks.features.consents.desc":`访客提交的所有同意记录的可搜索、可筛选日志。每条记录显示访客 ID、使用的配置文件、语言、GPC 信号、同意选择和时间戳。`,"howItWorks.features.visitors.title":`访客`,"howItWorks.features.visitors.desc":`您网站中唯一访客标识符的列表,包含其国家、首次访问日期和最近访问日期。访客 ID 是不存储原始 IP 地址的假名 UUID。`,"howItWorks.features.users.title":`用户`,"howItWorks.features.users.desc":`管理可登录此仪表盘的管理员账号。分配角色、激活或停用账号,并在多租户部署中将用户限制到特定站点。`,"howItWorks.features.roles.title":`角色`,"howItWorks.features.roles.desc":`定义命名权限集(如查看者、编辑者、管理员)。为每个角色分配细粒度权限(如 consent:view、profile:edit、audit:view),然后将角色分配给用户。`,"howItWorks.features.vendors.title":`供应商`,"howItWorks.features.vendors.desc":`浏览 IAB 全球供应商列表(GVL),查找 TCF 供应商 ID、声明目的和合法利益目的。在模板中配置 Cookie 类别时使用这些 ID。`,"howItWorks.features.audit.title":`审计日志`,"howItWorks.features.audit.desc":`所有管理操作的仅追加、不可篡改日志,包括配置文件保存、用户变更、API 密钥创建等。满足 GDPR 问责义务的必要记录。`,"howItWorks.features.api.title":`API 与密钥`,"howItWorks.features.api.desc":`生成和吊销 API 令牌、配置公共同意 API 的允许 CORS 来源,并浏览交互式 OpenAPI 参考文档以了解每个接口。`,"howItWorks.features.settings.title":`设置`,"howItWorks.features.settings.desc":`查看账号详情、修改密码,并将同意或审计数据导出为 CSV、XLSX 或 JSON 格式,用于离线分析或监管申报。`,"howItWorks.docs.heading":`完整文档`,"howItWorks.docs.text":`详细指南、配置参考、集成示例和在线演练场可在 Consenti 文档网站上获取。`,"howItWorks.docs.link":`打开 consenti.dev/docs →`,"howItWorks.consentFlow.heading":`端到端同意流程`,"howItWorks.consentFlow.step1.title":`小部件初始化`,"howItWorks.consentFlow.step1.desc":`Consenti脚本在访问者浏览器中加载,读取您的配置(API密钥、compliance.type)。如果已存在有效且未过期的同意Cookie,小部件将静默退出——不显示任何横幅。`,"howItWorks.consentFlow.step2.title":`检测管辖区`,"howItWorks.consentFlow.step2.desc":`如果compliance.type为'auto',小部件会调用GET /resolve-profile,传递访问者的时区、Accept-Language请求头和IP地址。服务器使用内置的国家→合规映射,将这些信号映射到complianceGroup。`,"howItWorks.consentFlow.step3.title":`获取配置文件`,"howItWorks.consentFlow.step3.desc":`小部件获取已解析complianceGroup和访问者语言对应的活跃配置文件。响应是包含所有横幅文本、Cookie类别、界面设置和法规标志的扁平JSON对象,可直接渲染。`,"howItWorks.consentFlow.step4.title":`渲染横幅`,"howItWorks.consentFlow.step4.desc":`小部件根据配置文件的界面模板渲染横幅或偏好设置弹窗。必选类别已预先勾选且不可取消。可选类别显示其法律依据(同意或合法权益)。`,"howItWorks.consentFlow.step5.title":`提交同意`,"howItWorks.consentFlow.step5.desc":`当访问者操作(全部接受、全部拒绝或保存偏好)后,小部件向API POST同意记录,包含访问者ID、配置文件版本、每个类别的状态(已授权/已拒绝/已反对)、GPC信号、时间戳和语言。`,"howItWorks.consentFlow.step6.title":`存储与审计`,"howItWorks.consentFlow.step6.desc":`API验证有效载荷,存储同意记录,并向仅追加审计日志追加一条记录。访问者记录以国家和首次/最后访问日期更新。小部件写入同意Cookie,使后续访问跳过横幅。`,"howItWorks.profileResolution.heading":`配置文件解析算法`,"howItWorks.profileResolution.intro":`当访问者到来时,Consenti通过五个步骤解析应显示的同意配置文件。`,"howItWorks.profileResolution.step1.title":`收集地理信号`,"howItWorks.profileResolution.step1.desc":`小部件向GET /resolve-profile发送三个信号:浏览器的Intl.DateTimeFormat时区、Accept-Language请求头(或lang查询参数),以及服务器端IP地址。`,"howItWorks.profileResolution.step2.title":`确定国家`,"howItWorks.profileResolution.step2.desc":`服务器按顺序尝试:(1) 通过配置的geoDataProvider进行IP地理位置解析;(2) 时区→国家查找表;(3) 语言标签→国家启发式(例如'zh'→CN)。第一个非空结果生效。`,"howItWorks.profileResolution.step3.title":`映射合规组`,"howItWorks.profileResolution.step3.desc":`在内置的国家→合规组映射中查找ISO-3166-1 alpha-2国家代码(加可选的地区/州代码)。地区覆盖(例如US/CA→optOutCalifornia)优先于国家默认值。`,"howItWorks.profileResolution.step4.title":`定位活跃配置文件`,"howItWorks.profileResolution.step4.desc":`系统在数据库中查询complianceGroup与已解析组匹配的活跃配置文件。每个complianceGroup同时只能有一个活跃配置文件。如果不存在,则返回404,小部件可能回退至profileOverride。`,"howItWorks.profileResolution.step5.title":`解析语言`,"howItWorks.profileResolution.step5.desc":`最佳语言按以下顺序选取:(1) 与小部件请求语言完全匹配;(2) 语言前缀匹配(例如'zh-TW'→'zh');(3) 提供商解析的语言;(4) 配置文件的defaultLocale。解析后的JSON从静态文件(已发布配置文件)或直接从数据库(预览)提供。`,"howItWorks.complianceGroups.heading":`合规组`,"howItWorks.complianceGroups.intro":`世界上每个国家都映射到八个合规组之一。每个组决定小部件必须遵循的同意模型。`,"howItWorks.complianceGroups.optIn.title":`optIn — GDPR / ePrivacy 严格选择加入`,"howItWorks.complianceGroups.optIn.desc":`在设置任何非必要Cookie之前,需要事先获得同意。访问者必须获得真正的拒绝选择,撤回同意必须与给予同意一样简便,并且必须提供细粒度的类别级别选择。`,"howItWorks.complianceGroups.optIn.laws":`GDPR、ePrivacy指令、英国GDPR、PECR、revFADP(瑞士)、KVKK(土耳其)、PDPA(泰国)及其他严格国家法律`,"howItWorks.complianceGroups.optIn.countries":`所有欧盟成员国、英国、瑞士、土耳其、泰国、冰岛、列支敦士登、挪威、根西岛、直布罗陀及其他具有严格ePrivacy规则的国家`,"howItWorks.complianceGroups.optInDPDPA.title":`optInDPDPA — 印度DPDPA`,"howItWorks.complianceGroups.optInDPDPA.desc":`印度2023年数字个人数据保护法要求明确的选择加入同意。额外义务:命名数据受托人、提供专用同意通知并支持数据主体权利。请在您的配置文件中设置dpdpaDataFiduciary字段。`,"howItWorks.complianceGroups.optInDPDPA.laws":`数字个人数据保护法2023(DPDPA)`,"howItWorks.complianceGroups.optInDPDPA.countries":`印度(IN)`,"howItWorks.complianceGroups.optInChina.title":`optInChina — 中国多法律框架`,"howItWorks.complianceGroups.optInChina.desc":`中国的数据治理要求根据《个人信息保护法》(PIPL)获得明确同意,并结合《数据安全法》(DSL)和《网络安全法》(CSL)的相关义务。数据跨境传输和数据分类还需满足额外要求。`,"howItWorks.complianceGroups.optInChina.laws":`个人信息保护法(PIPL)、数据安全法(DSL)、网络安全法(CSL)`,"howItWorks.complianceGroups.optInChina.countries":`中国(CN)`,"howItWorks.complianceGroups.optOutCalifornia.title":`optOutCalifornia — 加州CCPA / CPRA`,"howItWorks.complianceGroups.optOutCalifornia.desc":`数据默认可以收集,但必须为消费者提供明确的"不出售或共享我的个人信息"选择退出选项。全局隐私控制(GPC)浏览器信号必须作为有效的选择退出予以尊重。`,"howItWorks.complianceGroups.optOutCalifornia.laws":`CCPA、CPRA(加利福尼亚州消费者隐私法 / 加利福尼亚州隐私权利法)`,"howItWorks.complianceGroups.optOutCalifornia.countries":`美国——加利福尼亚州(US/CA)`,"howItWorks.complianceGroups.optOutUSState.title":`optOutUSState — 其他美国州法律`,"howItWorks.complianceGroups.optOutUSState.desc":`以加州选择退出框架为蓝本。消费者可以选择退出定向广告和个人数据销售。数个州要求尊重GPC信号。适用企业必须提供明确的选择退出机制。`,"howItWorks.complianceGroups.optOutUSState.laws":`CDPA (VA)、CPA (CO)、CTDPA (CT)、UCPA (UT)、TDPSA (TX)、DPDPA (DE)、NJDPA (NJ)、OCPA (OR)、MCDPA (MN)、MODPA (MD)、KCDPA (KY)、TIPA (TN)、NDPA (NE)、ICDPA (IA/IN)、MCDPA (MT)、NHPA (NH)、RIDTPA (RI)`,"howItWorks.complianceGroups.optOutUSState.countries":`美国——VA、CO、CT、UT、TX、DE、NJ、OR、MN、MD、KY、TN、NE、IA、IN、MT、NH、RI`,"howItWorks.complianceGroups.generalPrivacyConsent.title":`generalPrivacyConsent — 一般隐私 / 同意`,"howItWorks.complianceGroups.generalPrivacyConsent.desc":`存在一般隐私法但不强制要求PECR/ePrivacy风格的严格Cookie横幅。最佳实践是为非必要Cookie提供同意选择和清晰的隐私声明,但法律要求低于GDPR选择加入标准。`,"howItWorks.complianceGroups.generalPrivacyConsent.laws":`PIPEDA / 25号法律(CA)、LGPD(BR——使用hybridBrazil)、POPIA(ZA)、APPI(JP)、隐私法(AU/NZ)、PDPA-SG、PDPA-MY、PIPA-KR、PDPD-VN、DPA-PH、PDP-ID及其他`,"howItWorks.complianceGroups.generalPrivacyConsent.countries":`加拿大、澳大利亚、新西兰、日本、韩国、新加坡、马来西亚、南非及众多拉丁美洲、非洲和亚洲国家`,"howItWorks.complianceGroups.hybridBrazil.title":`hybridBrazil — 巴西LGPD`,"howItWorks.complianceGroups.hybridBrazil.desc":`巴西的LGPD与GDPR大体相似,但根据数据控制者的评估,分析和广告Cookie可以以合法权益为法律依据处理。横幅会显示,但类别级别的法律依据可以比严格的GDPR选择加入更灵活。`,"howItWorks.complianceGroups.hybridBrazil.laws":`通用数据保护法(LGPD)`,"howItWorks.complianceGroups.hybridBrazil.countries":`巴西(BR)`,"howItWorks.complianceGroups.noticeOnly.title":`noticeOnly — 仅隐私声明`,"howItWorks.complianceGroups.noticeOnly.desc":`不适用专用Cookie法规,或现有法规仅要求隐私声明而非强制选择加入或选择退出横幅。出于透明度考虑,显示同意横幅仍是推荐做法,但法律上并非强制要求。`,"howItWorks.complianceGroups.noticeOnly.laws":`因地而异——无专用Cookie/ePrivacy法规的国家`,"howItWorks.complianceGroups.noticeOnly.countries":`上述组别未涵盖的非洲、中亚、加勒比海和太平洋地区众多国家`,"howItWorks.enums.heading":`关键值参考`,"howItWorks.enums.legalBasis.heading":`legalBasis(Cookie类别)`,"howItWorks.enums.legalBasis.mandatory":`mandatory — 无论同意与否,类别始终处于活跃状态(例如会话、身份验证)。不会被GPC或选择退出信号阻止。`,"howItWorks.enums.legalBasis.consent":`consent — 需要访问者的明确选择加入。默认阻止;在所有选择加入管辖区被GPC阻止。`,"howItWorks.enums.legalBasis.legitimateInterest":`legitimate_interest — 依赖控制者的合法权益。默认活跃;访问者可以反对。在某些管辖区(欧盟、英国)被GPC软阻止。`,"howItWorks.enums.consentStatus.heading":`ConsentStatus(每类别记录)`,"howItWorks.enums.consentStatus.granted":`granted — 访问者明确同意该类别。`,"howItWorks.enums.consentStatus.denied":`denied — 访问者明确拒绝该类别的同意。`,"howItWorks.enums.consentStatus.objected":`objected — 访问者对合法权益类别提出异议(选择退出,而非拒绝同意)。`,"howItWorks.enums.geoProvider.heading":`geoDataProvider选项`,"howItWorks.enums.geoProvider.default":`default / timezone — 使用浏览器时区(Intl.DateTimeFormat)推断国家,回退至Accept-Language。无需额外依赖。`,"howItWorks.enums.geoProvider.language":`language — 仅从Accept-Language请求头推导国家(例如'zh'→CN,'pt'→BR)。快速但不精确。`,"howItWorks.enums.geoProvider.geoip":`geoip — 使用带有捆绑MaxMind Lite数据库的npm包geoip-lite。需要:npm install geoip-lite。`,"howItWorks.enums.geoProvider.hostedGeoipLite":`hosted-geoip-lite — 通过内置HTTPS调用ipinfo.io(无额外依赖)。每次首次访问增加约50~200毫秒延迟。`,"howItWorks.enums.geoProvider.maxmind":`maxmind — 使用带有本地GeoLite2-City.mmdb文件的npm包maxmind。最准确。需要MAXMIND_DB_PATH环境变量和npm install maxmind。`,"howItWorks.enums.geoProvider.custom":`自定义函数 — 将CountryResolverFn传递给compliance.geoDataProvider,以集成任何Geo-IP或CDN提供商。`,"consentTemplates.editor.categories":`Consent Categories`,"consentTemplates.editor.addCategory":`+ Add Category`,"consentTemplates.editor.noCategories":`No categories defined yet. Add one above.`,"consentTemplates.editor.error.noCategories":`At least one category is required.`,"consentTemplates.editor.error.catIds":`All categories must have an ID.`,"consentTemplates.editor.error.uniqueCatIds":`Category IDs must be unique.`,"consentTemplates.editor.error.catCookies":`Every category must contain at least one parameter.`,"consentTemplates.editor.error.uncategorized":`Parameter "{{id}}" is not assigned to any category.`,"consentTemplates.editor.error.multiCategory":`Parameter "{{id}}" is assigned to more than one category.`,"consentTemplates.editor.error.purposeLegalBasisMismatch":`Parameter "{{id}}" has a non-necessary purpose but is assigned to a Mandatory category — this grants a tracking parameter with no consent gate.`,"consentTemplates.editor.warning.necessaryNotMandatory":`Parameter "{{id}}" has purpose "necessary" but is assigned to a non-Mandatory category — this may break site functionality since it can be denied.`,"cookieTemplates.editor.trackerDetected":`检测到:{{vendor}}`,"consentTemplates.col.preGrantShort":`Pre Grant`,"profileEditor.config.expiryDays":`Re-consent Interval (days)`,"profileEditor.config.expiryDaysHint":`How many days until stored consent expires and the visitor is asked again.`,"profileEditor.error.expiryDays":`Expiry (days) must be at least 1.`,"profileEditor.error.customComplianceGroupRequired":`Enter a custom group name, or pick a compliance group above.`,"profileEditor.table.preGrant":`Pre Grant`,"profileEditor.table.preGrantLocked":`Already effectively pre-granted — only editable when the category's legal basis is Consent`,"profileEditor.content.receiptHeading":`Consent Receipt Checkbox`,"profileEditor.content.receiptHint":`Shown in the preference modal when "Allow consent receipt" is enabled in Step 1.`,"profileEditor.content.receiptLabel":`Checkbox label`,"profileEditor.content.receiptDescription":`Description`,"profileEditor.error.missingRequiredContent":`区域“{{locale}}”缺少必填内容——请查看高亮显示的标签页。`,"profileEditor.nudge.title":`可选字段为空`,"profileEditor.nudge.headingBlank":`您未填写标题。访客将看到没有标题的横幅。`,"profileEditor.nudge.introBlank":`您未填写引言文字。访客将看到没有引言的偏好设置面板。`,"profileEditor.nudge.addNow":`立即添加`,"profileEditor.nudge.ignore":`忽略`};export{e as default};
@@ -6,8 +6,10 @@
6
6
  <title>Consenti Admin</title>
7
7
  <link rel="icon" type="image/x-icon" href="/consenti/favicon.ico" />
8
8
  <link rel="icon" type="image/svg+xml" href="/consenti/icon.svg" />
9
- <script type="module" crossorigin src="/consenti/assets/index-BBbhHyc_.js"></script>
10
- <link rel="stylesheet" crossorigin href="/consenti/assets/index-DYK73WL5.css">
9
+ <script type="module" crossorigin src="/consenti/assets/index-H_Zm0X-u.js"></script>
10
+ <link rel="modulepreload" crossorigin href="/consenti/assets/createLucideIcon-MdjI3m3u.js">
11
+ <link rel="modulepreload" crossorigin href="/consenti/assets/client-ymc9nwWr.js">
12
+ <link rel="stylesheet" crossorigin href="/consenti/assets/index-DW3qOrry.css">
11
13
  </head>
12
14
  <body>
13
15
  <div id="app"></div>
@@ -0,0 +1,2 @@
1
+ import{A as B,B as C,C as D,D as E,E as F,a as b,b as c,c as d,d as e,e as f,f as g,g as h,h as i,i as j,j as k,k as l,l as m,m as n,n as o,o as p,p as q,q as r,r as s,s as t,t as u,u as v,v as w,w as x,x as y,y as z,z as A}from"./chunk-IY4L6MNB.js";import{i as a}from"./chunk-O5UG4OYI.js";export{f as COMPLIANCE_GROUPS,e as COMPLIANCE_GROUP_IDS,d as COMPLIANCE_REGULATION_IDS,u as COMPLIANCE_VALIDATION_RULES,k as COOKIE_PURPOSES,l as COOKIE_PURPOSE_DEFAULTS,j as COOKIE_PURPOSE_IDS,w as COUNTRY_CODES,i as CPRA_CATEGORIES,a as DEFAULT_PROFILES,v as EMBEDDED_COMPLIANCE_MAP,g as GPC_OPTIONS,m as KNOWN_COOKIE_PURPOSES,h as LEGAL_BASIS_OPTIONS,x as LOCALES,o as TCF_PURPOSES,p as TCF_SPECIAL_FEATURES,y as TRACKER_KNOWLEDGE_BASE,r as buildCookieCategoryIndex,b as debounce,E as decodeTcString,D as encodeTcString,q as findCategoryForCookie,s as getCookieLegalBasis,C as hasVisibleText,n as inferCookiePurpose,t as isMandatoryCookie,A as jsonToHtml,z as matchTrackerKnowledge,B as renderContentText,F as resolveTextDirection,c as throttle};
2
+ //# sourceMappingURL=dist-Z5RVTVBT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}