@knkcs/contenthub-ui 0.4.0 → 0.6.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.
@@ -1,134 +1,139 @@
1
- import { T as e, h as t, w as n, y as r } from "./heads-DqHmAW0n.js";
1
+ import { E as e, T as t, b as n, g as r } from "./heads-BT8RZ-Gs.js";
2
2
  import { useCallback as i, useEffect as a, useMemo as o, useRef as s, useState as c } from "react";
3
3
  import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
4
4
  import { Button as f, EmptyState as p } from "@knkcs/anker/atoms";
5
- import { DataTable as m, DateCell as h, Modal as g, Toolbar as _, TreeViewBranchControl as v, TreeViewBranchIndicator as y, TreeViewBranchText as b, TreeViewItem as x, TreeViewItemText as S, TreeViewLabel as ee, TreeViewNode as C, TreeViewRoot as w, TreeViewTree as T, TruncatedTextCell as te, createTreeCollection as E } from "@knkcs/anker/components";
6
- import { Alert as D, HStack as O, NativeSelect as k, Spinner as A, Stack as j, Text as M } from "@knkcs/anker/primitives";
7
- import { IndexPageTemplate as ne, SubNavLayout as N } from "@knkcs/anker/templates";
8
- import { keepPreviousData as re, useInfiniteQuery as ie, useQuery as P, useQueryClient as ae } from "@tanstack/react-query";
9
- import { ChevronRight as F, FileText as oe, Lock as se, Plus as ce } from "lucide-react";
10
- import { useTranslation as I } from "react-i18next";
11
- import { zodResolver as L } from "@hookform/resolvers/zod";
12
- import { BaseSelectField as R, InputField as z, LookupSelectField as B } from "@knkcs/anker/forms";
13
- import { FormProvider as V, useForm as le, useWatch as H } from "react-hook-form";
14
- import { z as U } from "zod";
15
- import { useHostIdentity as ue } from "@knkcs/anker/host";
16
- import { useSearchParams as de } from "react-router";
5
+ import { DataTable as m, DateCell as ee, Modal as h, Toolbar as g, TreeViewBranchControl as te, TreeViewBranchIndicator as _, TreeViewBranchText as v, TreeViewItem as y, TreeViewItemText as ne, TreeViewLabel as b, TreeViewNode as re, TreeViewRoot as x, TreeViewTree as S, TruncatedTextCell as C, createTreeCollection as w } from "@knkcs/anker/components";
6
+ import { Alert as T, HStack as E, NativeSelect as D, Spinner as ie, Stack as O, Text as k } from "@knkcs/anker/primitives";
7
+ import { IndexPageTemplate as ae, SubNavLayout as A } from "@knkcs/anker/templates";
8
+ import { keepPreviousData as j, useInfiniteQuery as oe, useQuery as M, useQueryClient as se } from "@tanstack/react-query";
9
+ import { ChevronRight as N, FileText as ce, Lock as le, Plus as ue } from "lucide-react";
10
+ import { useTranslation as P } from "react-i18next";
11
+ import { zodResolver as F } from "@hookform/resolvers/zod";
12
+ import { BaseSelectField as de, InputField as I, LookupSelectField as L } from "@knkcs/anker/forms";
13
+ import { FormProvider as R, useForm as fe, useWatch as z } from "react-hook-form";
14
+ import { z as B } from "zod";
15
+ import { useHostIdentity as pe } from "@knkcs/anker/host";
16
+ import { useSearchParams as me } from "react-router";
17
17
  //#region src/common/query-keys.ts
18
- var W = {
18
+ var V = {
19
19
  all: ["contenthub"],
20
- blockReasons: () => [...W.all, "block-reasons"],
21
- changeSets: () => [...W.all, "change-sets"],
22
- changeSetLists: () => [...W.changeSets(), "list"],
23
- changeSetList: (e) => [...W.changeSetLists(), e],
24
- openChangeSets: () => [...W.changeSetLists(), "open-picker"],
20
+ blockReasons: () => [...V.all, "block-reasons"],
21
+ changeSets: () => [...V.all, "change-sets"],
22
+ changeSetLists: () => [...V.changeSets(), "list"],
23
+ changeSetList: (e) => [...V.changeSetLists(), e],
24
+ openChangeSets: () => [...V.changeSetLists(), "open-picker"],
25
25
  changeSet: (e) => [
26
- ...W.changeSets(),
26
+ ...V.changeSets(),
27
27
  "detail",
28
28
  e
29
29
  ],
30
30
  publishReadiness: (e) => [
31
- ...W.changeSets(),
31
+ ...V.changeSets(),
32
32
  "readiness",
33
33
  e
34
34
  ],
35
- publishReadinessAt: (e, t) => [...W.publishReadiness(e), t],
35
+ publishReadinessAt: (e, t) => [...V.publishReadiness(e), t],
36
36
  checkStandings: (e) => [
37
- ...W.changeSets(),
37
+ ...V.changeSets(),
38
38
  "checks",
39
39
  e
40
40
  ],
41
- changeSetStatuses: () => [...W.all, "change-set-statuses"],
42
- requiredChecks: () => [...W.all, "required-checks"],
41
+ changeSetStatuses: () => [...V.all, "change-set-statuses"],
42
+ requiredChecks: () => [...V.all, "required-checks"],
43
43
  requiredCheckRecorders: (e) => [
44
- ...W.requiredChecks(),
44
+ ...V.requiredChecks(),
45
45
  "recorders",
46
46
  e
47
47
  ],
48
- editingSettings: () => [...W.all, "editing-settings"],
48
+ editingSettings: () => [...V.all, "editing-settings"],
49
49
  effectiveEditingSettings: (e) => [
50
- ...W.editingSettings(),
50
+ ...V.editingSettings(),
51
51
  "effective",
52
52
  e
53
53
  ],
54
- collections: () => [...W.all, "collections"],
54
+ collections: () => [...V.all, "collections"],
55
55
  collectionGrants: (e) => [
56
- ...W.collections(),
56
+ ...V.collections(),
57
57
  "grants",
58
58
  e
59
59
  ],
60
- contents: () => [...W.all, "contents"],
61
- contentLists: () => [...W.contents(), "list"],
62
- contentList: (e) => [...W.contentLists(), e],
60
+ contents: () => [...V.all, "contents"],
61
+ contentLists: () => [...V.contents(), "list"],
62
+ contentList: (e) => [...V.contentLists(), e],
63
63
  content: (e) => [
64
- ...W.contents(),
64
+ ...V.contents(),
65
65
  "detail",
66
66
  e
67
67
  ],
68
68
  contentRead: (e, t) => [
69
- ...W.content(e),
69
+ ...V.content(e),
70
70
  "read",
71
71
  t
72
72
  ],
73
73
  contentBranchRead: (e, t, n) => [
74
- ...W.contentRead(e, t),
74
+ ...V.contentRead(e, t),
75
75
  "branch",
76
76
  n
77
77
  ],
78
- contentTimeline: (e) => [...W.content(e), "timeline"],
78
+ contentTimeline: (e) => [...V.content(e), "timeline"],
79
79
  contentRevisions: (e, t) => [
80
- ...W.content(e),
80
+ ...V.content(e),
81
81
  "revisions",
82
82
  t
83
83
  ],
84
84
  contentCompare: (e, t, n) => [
85
- ...W.content(e),
85
+ ...V.content(e),
86
86
  "compare",
87
87
  t,
88
88
  n
89
89
  ],
90
90
  contentReferences: (e, t) => [
91
- ...W.content(e),
91
+ ...V.content(e),
92
92
  "references",
93
93
  t
94
94
  ],
95
- contentReferrers: (e) => [...W.content(e), "referrers"],
95
+ contentReferrers: (e) => [...V.content(e), "referrers"],
96
96
  contentOutdatedPins: (e, t) => [
97
- ...W.content(e),
97
+ ...V.content(e),
98
98
  "outdated-pins",
99
99
  t
100
100
  ],
101
- contentChangeSets: (e) => [...W.content(e), "change-sets"],
101
+ contentChangeSets: (e) => [...V.content(e), "change-sets"],
102
102
  chainPreview: (e, t, ...n) => [
103
- ...W.content(e),
103
+ ...V.content(e),
104
104
  "preview",
105
105
  t,
106
106
  ...n
107
107
  ],
108
108
  previewInForce: (e, t, n) => [
109
- ...W.content(e),
109
+ ...V.content(e),
110
110
  "preview-in-force",
111
111
  t,
112
112
  n
113
113
  ],
114
114
  pendingMerge: (e) => [
115
- ...W.all,
115
+ ...V.all,
116
116
  "pending-merge",
117
117
  e
118
118
  ],
119
- blueprints: () => [...W.all, "blueprints"],
119
+ blueprints: () => [...V.all, "blueprints"],
120
120
  blueprintNames: (e) => [
121
- ...W.blueprints(),
121
+ ...V.blueprints(),
122
122
  "names",
123
123
  e
124
124
  ],
125
- blueprintFilterOptions: () => [...W.blueprints(), "filter-options"],
125
+ blueprintNamesByAccessor: (e) => [
126
+ ...V.blueprints(),
127
+ "names-by-accessor",
128
+ e
129
+ ],
130
+ blueprintFilterOptions: () => [...V.blueprints(), "filter-options"],
126
131
  blueprintReleases: (e) => [
127
- ...W.blueprints(),
132
+ ...V.blueprints(),
128
133
  "releases",
129
134
  e
130
135
  ]
131
- }, G = {
136
+ }, H = {
132
137
  common: { cancel: "Abbrechen" },
133
138
  settings: {
134
139
  section: "Einstellungen",
@@ -188,14 +193,15 @@ var W = {
188
193
  },
189
194
  workspace: {
190
195
  title: "Vorgaben des Arbeitsbereichs",
191
- description: "Wie Inhalte geändert werden dürfen: in einer Direktbearbeitung, vom Inhalt aus geöffnet, in einem Change Set oder beides, und ob eine Direktbearbeitung andere Direktbearbeitungen mit einer Bearbeitungssperre fernhält. Jeder Blueprint ohne Abweichung folgt diesen Vorgaben. Eine Änderung gilt sofort und lässt offene Arbeit, wie sie ist.",
196
+ description: "Wie Inhalte geändert werden dürfen: in einer Direktbearbeitung, vom Inhalt aus geöffnet, in einem Change Set oder beides; ob eine Direktbearbeitung andere Direktbearbeitungen mit einer Bearbeitungssperre fernhält; und wer eine Bearbeitungssperre übernehmen darf, die Force-Gruppe. Jeder Blueprint ohne Abweichung folgt diesen Vorgaben. Eine Änderung gilt sofort und lässt offene Arbeit, wie sie ist.",
192
197
  edit: "Vorgaben ändern"
193
198
  },
194
199
  columns: {
195
200
  blueprint: "Blueprint",
196
201
  mode: "Bearbeitungsmodus",
197
202
  block: "Bearbeitungssperre",
198
- actions: "Aktionen"
203
+ actions: "Aktionen",
204
+ force: "Force-Gruppe"
199
205
  },
200
206
  fromWorkspace: "{{value}} (Vorgabe des Arbeitsbereichs)",
201
207
  createOverride: "Neue Abweichung",
@@ -210,27 +216,35 @@ var W = {
210
216
  workspaceTitle: "Vorgaben des Arbeitsbereichs",
211
217
  createOverrideTitle: "Neue Blueprint-Abweichung",
212
218
  editOverrideTitle: "Blueprint-Abweichung bearbeiten",
213
- accessor: "Blueprint-Accessor",
214
- accessorHelp: "Der Blueprint, für dessen Inhalte dies gilt, als Accessor.",
215
- accessorRequired: "Geben Sie einen Blueprint-Accessor ein.",
216
- accessorTooLong: "Höchstens {{max}} Zeichen.",
217
- accessorTaken: "Für „{{name}}“ gibt es bereits eine Abweichung: Bearbeiten Sie diese.",
219
+ blueprint: "Blueprint",
220
+ blueprintHelp: "Der Blueprint, für dessen Inhalte dies gilt.",
221
+ blueprintPlaceholder: "Blueprint wählen",
222
+ blueprintRequired: "Wählen Sie einen Blueprint.",
218
223
  mode: "Bearbeitungsmodus",
219
224
  modeHelp: "Nur „Nur Change Sets“ wird durchgesetzt: Eine Direktbearbeitung solcher Inhalte wird abgelehnt. Importe, Abläufe und Blueprint-Upgrades nutzen immer Change Sets.",
220
225
  modeRequired: "Wählen Sie einen Bearbeitungsmodus.",
221
226
  block: "Bearbeitungssperre",
222
227
  blockHelp: "Ob das Öffnen einer Direktbearbeitung die Direktbearbeitungen anderer fernhält, bis sie veröffentlicht oder verworfen ist. Change Sets kommen weiter durch.",
223
228
  follow: "Vorgabe des Arbeitsbereichs ({{value}})",
224
- overridesNothing: "Weichen Sie beim Bearbeitungsmodus, bei der Bearbeitungssperre oder bei beidem ab. Um in beidem dem Arbeitsbereich zu folgen, entfernen Sie die Abweichung.",
229
+ overridesNothing: "Weichen Sie beim Bearbeitungsmodus, bei der Bearbeitungssperre, bei der Force-Gruppe oder bei mehrerem ab. Um überall den Vorgaben des Arbeitsbereichs zu folgen, entfernen Sie die Abweichung.",
225
230
  save: "Speichern",
226
231
  denied: "Nur ein Admin des Arbeitsbereichs ändert die Bearbeitungseinstellungen.",
227
- failed: "Die Bearbeitungseinstellungen konnten nicht gespeichert werden. Versuchen Sie es erneut."
232
+ failed: "Die Bearbeitungseinstellungen konnten nicht gespeichert werden. Versuchen Sie es erneut.",
233
+ force: "Force-Gruppe",
234
+ forceHelp: "Wer eine Bearbeitungssperre aufheben und die Direktbearbeitung dahinter mit ihrer Arbeit übernehmen darf. Die Admins des Arbeitsbereichs dürfen das immer; nennen Sie alle, die es außerdem dürfen.",
235
+ forcePeople: "Personen neben den Admins",
236
+ forceNobody: "Nur Admins",
237
+ forceOwn: "Eigene Force-Gruppe"
228
238
  },
229
239
  removeDialog: {
230
240
  title: "Abweichung entfernen",
231
241
  message: "Die Abweichung für „{{name}}“ entfernen? Ihre Inhalte folgen dann wieder den Vorgaben des Arbeitsbereichs.",
232
242
  confirm: "Entfernen",
233
243
  failed: "Die Abweichung konnte nicht entfernt werden. Versuchen Sie es erneut."
244
+ },
245
+ force: {
246
+ adminsOnly: "Admins",
247
+ adminsAnd: "Admins und {{names}}"
234
248
  }
235
249
  },
236
250
  requiredChecks: {
@@ -299,17 +313,17 @@ var W = {
299
313
  scopeHelp: "Jeder Branch braucht ein Ergebnis je erfasstem Inhalt; das Change Set einmal braucht ein Ergebnis für das ganze Change Set.",
300
314
  scopeRequired: "Wählen Sie einen Umfang.",
301
315
  everyBlueprint: "Gilt für Inhalte jedes Blueprints",
302
- accessors: "Blueprint-Accessoren",
303
- accessorsHelp: "Ein Accessor je Zeile: Die Prüfung gilt nur für Inhalte dieser Blueprints.",
304
- accessorsRequired: "Nennen Sie mindestens einen Blueprint oder lassen Sie sie für alle gelten.",
305
- accessorTooLong: "Ein Accessor hat höchstens {{max}} Zeichen.",
316
+ accessors: "Blueprints",
317
+ accessorsHelp: "Die Prüfung gilt nur für Inhalte dieser Blueprints.",
318
+ accessorsRequired: "Wählen Sie mindestens einen Blueprint oder lassen Sie sie für alle gelten.",
306
319
  independentLabel: "Unabhängig",
307
320
  independentHelp: "Bestanden und erlassen werden abgelehnt, wenn sie von jemandem kommen, der eine Revision am Geprüften geschrieben hat.",
308
321
  recorders: "Wer sie erfasst",
309
322
  recordersHelp: "Die Ergebnisse einer neuen Prüfung erfasst jedes Mitglied des Arbeitsbereichs. Auf benannte Personen einschränken lässt es sich in der Zeile der Prüfung unter „Wer sie erfasst“.",
310
323
  failed: "Die Pflichtprüfung konnte nicht gespeichert werden. Versuchen Sie es erneut.",
311
324
  createSubmit: "Anlegen",
312
- editSubmit: "Speichern"
325
+ editSubmit: "Speichern",
326
+ accessorsPlaceholder: "Blueprints wählen"
313
327
  },
314
328
  removeDialog: {
315
329
  title: "Pflichtprüfung entfernen",
@@ -916,6 +930,18 @@ var W = {
916
930
  message: "Archivierter Content verschwindet aus der Bibliothek, jeder Auswahl und der Bearbeitung. Seine Releases bleiben lesbar, und „Aus dem Archiv holen“ bringt ihn zurück.",
917
931
  confirm: "Archivieren"
918
932
  },
933
+ editingBlock: {
934
+ beingEdited: "Wird bearbeitet von {{who}}, seit {{since}}",
935
+ force: "Übernehmen",
936
+ forceConfirm: {
937
+ title: "Direktbearbeitung übernehmen",
938
+ message: "Die Direktbearbeitung von „{{content}}“ durch {{who}} übernehmen? Die unveröffentlichten Änderungen gehören dann Ihnen zum Veröffentlichen oder Verwerfen, und {{who}} kann sie nicht mehr speichern. {{who}} erfährt, dass Sie übernommen haben.",
939
+ confirm: "Übernehmen",
940
+ failed: "Die Direktbearbeitung konnte nicht übernommen werden. Versuchen Sie es erneut.",
941
+ denied: "Nur die Force-Gruppe dieses Blueprints darf eine Direktbearbeitung übernehmen: seine Admins und die Personen, die sie nennt."
942
+ },
943
+ forced: "Sie haben die Direktbearbeitung von {{who}} übernommen. Die Änderungen gehören jetzt Ihnen."
944
+ },
919
945
  directEdit: {
920
946
  unpublished: "Sie haben unveröffentlichte Änderungen",
921
947
  continue: "Weiter bearbeiten"
@@ -960,15 +986,79 @@ var W = {
960
986
  refused_one: "Veröffentlichen wurde aus {{count}} Grund abgelehnt",
961
987
  refused_other: "Veröffentlichen wurde aus {{count}} Gründen abgelehnt",
962
988
  refusedBecause: {
963
- dated_content: "Dieser Inhalt ist datiert: ändern Sie ihn in einem Change Set, das sagt, ab wann die Änderung gilt.",
964
989
  one_branch: "Eine Direktbearbeitung ändert nur einen Inhalt: verwenden Sie ein Change Set.",
965
990
  not_a_direct_edit: "Dieses Change Set ist keine Direktbearbeitung.",
991
+ editing_blocked: "Jemand anderes bearbeitet diesen Inhalt direkt: warten Sie, bis die Änderungen veröffentlicht oder verworfen sind.",
992
+ not_the_editor: "Diese Direktbearbeitung gehört inzwischen jemand anderem: Nur ihre Bearbeiterin oder ihr Bearbeiter speichert, veröffentlicht oder verwirft sie.",
993
+ own_direct_edit: "Sie haben selbst eine Direktbearbeitung dieses Inhalts: Veröffentlichen oder verwerfen Sie sie, bevor Sie eine andere übernehmen.",
994
+ no_editing_block: "Diese Direktbearbeitung wurde inzwischen veröffentlicht oder verworfen: Es gibt nichts zu übernehmen.",
966
995
  unknown: "Die Direktbearbeitung wurde abgelehnt."
967
996
  },
997
+ updateFromMain: "Aus Main aktualisieren",
998
+ resolveMerge: "Zusammenführung lösen",
999
+ behind: {
1000
+ title: "Main ist weiter: Ein Change Set hat diesen Inhalt geändert, nachdem Sie begonnen haben.",
1001
+ message: "Veröffentlichen wartet, bis Sie aus Main aktualisieren. Ihre und die veröffentlichten Änderungen werden Feld für Feld zusammengeführt; wo beide ein Feld geändert haben, entscheiden Sie."
1002
+ },
1003
+ pendingMerge: {
1004
+ title: "Ihre Änderungen und die aus Main betreffen dieselben Felder.",
1005
+ message: "Veröffentlichen wartet, bis Sie die Zusammenführung Feld für Feld lösen oder verwerfen; Verwerfen lässt diese Bearbeitung hinter Main zurück. Auch Speichern wartet."
1006
+ },
968
1007
  saveFirst: "Speichern Sie Ihre Änderungen zuerst: Veröffentlicht wird, was gespeichert ist.",
969
- changeSetsOnly: "Dieser Inhalt wird nur über Change Sets geändert: bearbeiten Sie ihn in einem Change Set."
1008
+ changeSetsOnly: "Dieser Inhalt wird nur über Change Sets geändert: bearbeiten Sie ihn in einem Change Set.",
1009
+ saveAndPublish: "Speichern & veröffentlichen",
1010
+ publishDialog: {
1011
+ title: "Direktbearbeitung veröffentlichen",
1012
+ publishHint: "Veröffentlicht das Gespeicherte als neues Release, in Kraft ab jetzt.",
1013
+ saveAndPublishHint: "Speichert Ihre Änderungen und veröffentlicht sie in einem Schritt als neues Release, in Kraft ab jetzt. Wird das Veröffentlichen abgelehnt, wird nichts gespeichert.",
1014
+ specHint: "Die Werte, die dieses Release trägt, wie sein Blueprint sie festlegt. Werte, die der Blueprint vorbelegt, sind schon ausgefüllt.",
1015
+ refusedValues_one: "{{count}} Wert wurde abgelehnt",
1016
+ refusedValues_other: "{{count}} Werte wurden abgelehnt",
1017
+ datedPublishHint: "Veröffentlicht das Gespeicherte als neues Release für den Gültigkeitszeitraum unten.",
1018
+ datedSaveAndPublishHint: "Speichert Ihre Änderungen und veröffentlicht sie in einem Schritt als neues Release für den Gültigkeitszeitraum unten. Wird das Veröffentlichen abgelehnt, wird nichts gespeichert.",
1019
+ period: "Gültigkeitszeitraum",
1020
+ correction: "Eine Berichtigung der geltenden Fassung: ihr Release behält deren Gültigkeitszeitraum und ersetzt sie.",
1021
+ newWording: "Eine neue Fassung ab {{firstDay}}: sie schneidet in die vorher geltende Fassung.",
1022
+ firstDay: "Erster Tag",
1023
+ lastDay: "Letzter Tag",
1024
+ lastDayHelp: "Leer lassen für ein offenes Ende: es endet dann am Tag vor der nächsten späteren Fassung.",
1025
+ computed: "Releases nur mit Daten, die contenthub erzeugt",
1026
+ computedHint: "Aus dem Zeitraum berechnet, nicht änderbar: jedes beendet oder setzt eine Fassung fort, in die der Zeitraum schneidet.",
1027
+ computedRow: "Fassung {{release}}",
1028
+ noComputed: "Keine: der Zeitraum schneidet in keine andere Fassung.",
1029
+ carryForward: "Spätere Fassungen",
1030
+ carryForwardHint: "Fassungen, die für spätere Tage schon veröffentlicht sind. Geben Sie für jede an, ob Ihre Änderung auch für sie gilt.",
1031
+ wording: "Fassung ab {{firstDay}}",
1032
+ wordingUntil: "Fassung vom {{firstDay}} bis {{lastDay}}",
1033
+ carryYes: "Ja, Änderung auch hier übernehmen",
1034
+ carryNo: "Nein, wie veröffentlicht lassen",
1035
+ unanswered: "Beantworten Sie vor dem Veröffentlichen jede spätere Fassung.",
1036
+ previewFailed: "Was diese Veröffentlichung plant, konnte nicht gelesen werden.",
1037
+ covers: "Dieser Zeitraum würde {{releases}} vollständig überdecken. Ob es ersetzt oder die Daten geändert werden, wird in einem Change Set entschieden: verkürzen Sie den Zeitraum oder ändern Sie in einem Change Set."
1038
+ },
1039
+ effective: {
1040
+ title: "Bearbeiten: gilt ab",
1041
+ hint: "Sie bearbeiten die Fassung, die an diesem Tag gilt. Heute berichtigt die jetzt geltende Fassung; ein späterer Tag ergibt eine neue Fassung ab diesem Tag.",
1042
+ label: "Gilt ab",
1043
+ help: "Heute, außer die Änderung beginnt später.",
1044
+ required: "Wählen Sie den Tag, ab dem die Änderung gilt.",
1045
+ submit: "Bearbeiten"
1046
+ }
1047
+ },
1048
+ blueprintSelect: {
1049
+ archived: "{{name}} (archiviert)",
1050
+ unknown: "{{value}} (unbekannt)",
1051
+ empty: "Kein Blueprint passt",
1052
+ failed: "Die Blueprints konnten nicht geladen werden.",
1053
+ loading: "Wird geladen …",
1054
+ refused: "{{list}}.",
1055
+ refusal: {
1056
+ unknown: "„{{accessor}}“ benennt keinen Blueprint",
1057
+ archived: "„{{accessor}}“ ist archiviert",
1058
+ not_content: "„{{accessor}}“ ist kein Content-Blueprint"
1059
+ }
970
1060
  }
971
- }, fe = {
1061
+ }, he = {
972
1062
  common: { cancel: "Cancel" },
973
1063
  settings: {
974
1064
  section: "Settings",
@@ -1028,14 +1118,15 @@ var W = {
1028
1118
  },
1029
1119
  workspace: {
1030
1120
  title: "Workspace defaults",
1031
- description: "How Content may be changed: in a Direct Edit, opened from the Content, in a Change Set, or both, and whether a Direct Edit keeps other Direct Edits out with an Editing Block. Every Blueprint without an override follows these. A change takes effect at once and leaves open work as it is.",
1121
+ description: "How Content may be changed: in a Direct Edit, opened from the Content, in a Change Set, or both; whether a Direct Edit keeps other Direct Edits out with an Editing Block; and who may force one, the Force Group. Every Blueprint without an override follows these. A change takes effect at once and leaves open work as it is.",
1032
1122
  edit: "Change defaults"
1033
1123
  },
1034
1124
  columns: {
1035
1125
  blueprint: "Blueprint",
1036
1126
  mode: "Editing Mode",
1037
1127
  block: "Editing Block",
1038
- actions: "Actions"
1128
+ actions: "Actions",
1129
+ force: "Force Group"
1039
1130
  },
1040
1131
  fromWorkspace: "{{value}} (workspace default)",
1041
1132
  createOverride: "New override",
@@ -1050,27 +1141,35 @@ var W = {
1050
1141
  workspaceTitle: "Workspace defaults",
1051
1142
  createOverrideTitle: "New Blueprint override",
1052
1143
  editOverrideTitle: "Edit Blueprint override",
1053
- accessor: "Blueprint accessor",
1054
- accessorHelp: "The Blueprint whose Content this applies to, by accessor.",
1055
- accessorRequired: "Enter a Blueprint accessor.",
1056
- accessorTooLong: "At most {{max}} characters.",
1057
- accessorTaken: "“{{name}}” has an override already: edit it instead.",
1144
+ blueprint: "Blueprint",
1145
+ blueprintHelp: "The Blueprint whose Content this applies to.",
1146
+ blueprintPlaceholder: "Choose a Blueprint",
1147
+ blueprintRequired: "Choose a Blueprint.",
1058
1148
  mode: "Editing Mode",
1059
1149
  modeHelp: "Only “Change Sets only” is enforced: a Direct Edit on such Content is refused. Imports, flows and Blueprint upgrades always use Change Sets.",
1060
1150
  modeRequired: "Choose an Editing Mode.",
1061
1151
  block: "Editing Block",
1062
1152
  blockHelp: "Whether opening a Direct Edit keeps other editors' Direct Edits out until it is published or discarded. Change Sets still pass it.",
1063
1153
  follow: "Workspace default ({{value}})",
1064
- overridesNothing: "Override the Editing Mode, the Editing Block or both. To follow the workspace in both, remove the override.",
1154
+ overridesNothing: "Override the Editing Mode, the Editing Block, the Force Group or several. To follow the workspace in all, remove the override.",
1065
1155
  save: "Save",
1066
1156
  denied: "Only a workspace admin changes the editing settings.",
1067
- failed: "The editing settings could not be saved. Try again."
1157
+ failed: "The editing settings could not be saved. Try again.",
1158
+ force: "Force Group",
1159
+ forceHelp: "Who may force an Editing Block, taking over the Direct Edit holding it with its work. The workspace's admins always may; name anyone else who may too.",
1160
+ forcePeople: "People beside the admins",
1161
+ forceNobody: "Admins only",
1162
+ forceOwn: "Its own Force Group"
1068
1163
  },
1069
1164
  removeDialog: {
1070
1165
  title: "Remove override",
1071
1166
  message: "Remove the override of “{{name}}”? Its Content follows the workspace defaults again.",
1072
1167
  confirm: "Remove",
1073
1168
  failed: "The override could not be removed. Try again."
1169
+ },
1170
+ force: {
1171
+ adminsOnly: "Admins",
1172
+ adminsAnd: "Admins and {{names}}"
1074
1173
  }
1075
1174
  },
1076
1175
  requiredChecks: {
@@ -1139,17 +1238,17 @@ var W = {
1139
1238
  scopeHelp: "Each Branch needs a result per Content it covers; the Change Set once needs one result for the whole Change Set.",
1140
1239
  scopeRequired: "Choose a scope.",
1141
1240
  everyBlueprint: "Applies to Content of every Blueprint",
1142
- accessors: "Blueprint accessors",
1143
- accessorsHelp: "One accessor a line: the check applies to Content of these Blueprints only.",
1144
- accessorsRequired: "Name at least one Blueprint, or apply it to every Blueprint.",
1145
- accessorTooLong: "An accessor is at most {{max}} characters.",
1241
+ accessors: "Blueprints",
1242
+ accessorsHelp: "The check applies to Content of these Blueprints only.",
1243
+ accessorsRequired: "Choose at least one Blueprint, or apply it to every Blueprint.",
1146
1244
  independentLabel: "Independent",
1147
1245
  independentHelp: "Passed and waived are refused from anyone who wrote a Revision on what the result covers.",
1148
1246
  recorders: "Who records it",
1149
1247
  recordersHelp: "Every member of the workspace records a new check's results. Narrow it to named people from the check's row, under Who records it.",
1150
1248
  failed: "The Required Check could not be saved. Try again.",
1151
1249
  createSubmit: "Create",
1152
- editSubmit: "Save"
1250
+ editSubmit: "Save",
1251
+ accessorsPlaceholder: "Choose Blueprints"
1153
1252
  },
1154
1253
  removeDialog: {
1155
1254
  title: "Remove Required Check",
@@ -1993,6 +2092,18 @@ var W = {
1993
2092
  message: "Archived Content leaves the Library, every picker and editing. Its Releases stay readable, and Unarchive brings it back.",
1994
2093
  confirm: "Archive"
1995
2094
  },
2095
+ editingBlock: {
2096
+ beingEdited: "Being edited by {{who}}, since {{since}}",
2097
+ force: "Force",
2098
+ forceConfirm: {
2099
+ title: "Take over the Direct Edit",
2100
+ message: "Take over {{who}}'s Direct Edit of “{{content}}”? Their unpublished changes become yours to publish or discard, and they can no longer save them. They are told that you took it over.",
2101
+ confirm: "Take over",
2102
+ failed: "The Direct Edit could not be taken over. Try again.",
2103
+ denied: "Only the Force Group of this Blueprint may take over a Direct Edit: its admins and the people it names."
2104
+ },
2105
+ forced: "You took over {{who}}'s Direct Edit. Their changes are yours now."
2106
+ },
1996
2107
  directEdit: {
1997
2108
  unpublished: "You have unpublished changes",
1998
2109
  continue: "Continue editing"
@@ -2037,46 +2148,112 @@ var W = {
2037
2148
  refused_one: "Publish was refused for {{count}} reason",
2038
2149
  refused_other: "Publish was refused for {{count}} reasons",
2039
2150
  refusedBecause: {
2040
- dated_content: "This Content is Dated: change it in a Change Set, which says when the change takes effect.",
2041
2151
  one_branch: "A Direct Edit changes one Content only: use a Change Set.",
2042
2152
  not_a_direct_edit: "This Change Set is not a Direct Edit.",
2153
+ editing_blocked: "Someone else is editing this Content directly: wait until they publish or discard their changes.",
2154
+ not_the_editor: "This Direct Edit is someone else's now: only its editor saves, publishes or discards it.",
2155
+ own_direct_edit: "You have a Direct Edit of this Content yourself: publish or discard it before taking over another.",
2156
+ no_editing_block: "This Direct Edit has been published or discarded meanwhile: there is nothing to take over.",
2043
2157
  unknown: "The Direct Edit was refused."
2044
2158
  },
2159
+ updateFromMain: "Update from Main",
2160
+ resolveMerge: "Resolve merge",
2161
+ behind: {
2162
+ title: "Main has moved on: a Change Set published a change to this Content after you started.",
2163
+ message: "Publish waits until you update from Main. Your changes and the published ones are merged field by field; where both changed a field, you choose."
2164
+ },
2165
+ pendingMerge: {
2166
+ title: "Your changes and Main's changed the same fields.",
2167
+ message: "Publish waits until you resolve the merge field by field, or abort it, which leaves this edit behind Main. Saves wait too."
2168
+ },
2045
2169
  saveFirst: "Save your changes first: Publish releases what is saved.",
2046
- changeSetsOnly: "This Content is changed through Change Sets only: start editing it in a Change Set."
2170
+ changeSetsOnly: "This Content is changed through Change Sets only: start editing it in a Change Set.",
2171
+ saveAndPublish: "Save & publish",
2172
+ publishDialog: {
2173
+ title: "Publish the Direct Edit",
2174
+ publishHint: "Publishes what is saved as a new Release, In Force from now.",
2175
+ saveAndPublishHint: "Saves your changes and publishes them as a new Release, In Force from now, in one step. If Publish is refused, nothing is saved.",
2176
+ specHint: "The values this Release carries, as its Blueprint declares them. Values the Blueprint prefills are filled in already.",
2177
+ refusedValues_one: "{{count}} value was refused",
2178
+ refusedValues_other: "{{count}} values were refused",
2179
+ datedPublishHint: "Publishes what is saved as a new Release for the Validity Period below.",
2180
+ datedSaveAndPublishHint: "Saves your changes and publishes them as a new Release for the Validity Period below, in one step. If Publish is refused, nothing is saved.",
2181
+ period: "Validity Period",
2182
+ correction: "A correction of the wording in force: its Release keeps that wording's Validity Period and supersedes it.",
2183
+ newWording: "A new wording from {{firstDay}}: it cuts into the wording in force before then.",
2184
+ firstDay: "First day",
2185
+ lastDay: "Last day",
2186
+ lastDayHelp: "Leave empty for an open end: it then ends the day before the next later wording.",
2187
+ computed: "Date-only Releases contenthub cuts",
2188
+ computedHint: "Worked out from the period, not editable: each ends or resumes a wording the period cuts into.",
2189
+ computedRow: "Wording {{release}}",
2190
+ noComputed: "None: the period cuts into no other wording.",
2191
+ carryForward: "Later wordings",
2192
+ carryForwardHint: "Wordings already published for later days. Say for each whether your change applies to it too.",
2193
+ wording: "Wording from {{firstDay}}",
2194
+ wordingUntil: "Wording from {{firstDay}} to {{lastDay}}",
2195
+ carryYes: "Yes, apply my change to it too",
2196
+ carryNo: "No, keep it as published",
2197
+ unanswered: "Answer every later wording before publishing.",
2198
+ previewFailed: "What this Publish would plan could not be read.",
2199
+ covers: "This period would cover {{releases}} entirely. Whether to supersede it or change the dates is decided in a Change Set: shorten the period, or make the change in a Change Set."
2200
+ },
2201
+ effective: {
2202
+ title: "Edit: takes effect on",
2203
+ hint: "The wording in force on this day is what you edit. Today corrects the wording in force now; a later day makes a new wording from that day.",
2204
+ label: "Takes effect on",
2205
+ help: "Today, unless the change starts later.",
2206
+ required: "Choose the day the change takes effect.",
2207
+ submit: "Edit"
2208
+ }
2209
+ },
2210
+ blueprintSelect: {
2211
+ archived: "{{name}} (archived)",
2212
+ unknown: "{{value}} (unknown)",
2213
+ empty: "No Blueprint matches",
2214
+ failed: "The Blueprints could not be loaded.",
2215
+ loading: "Loading…",
2216
+ refused: "{{list}}.",
2217
+ refusal: {
2218
+ unknown: "“{{accessor}}” names no Blueprint",
2219
+ archived: "“{{accessor}}” is archived",
2220
+ not_content: "“{{accessor}}” is not a content Blueprint"
2221
+ }
2047
2222
  }
2048
- }, K = "contenthub-ui", q = {
2049
- en: { [K]: fe },
2050
- de: { [K]: G }
2051
- }, pe = {
2052
- namespace: K,
2053
- resources: q
2223
+ }, U = "contenthub-ui", W = {
2224
+ en: { [U]: he },
2225
+ de: { [U]: H }
2226
+ }, G = {
2227
+ namespace: U,
2228
+ resources: W
2054
2229
  };
2055
2230
  //#endregion
2056
2231
  //#region src/common/blueprint-source.ts
2057
- function me(t) {
2232
+ function ge(e) {
2058
2233
  return {
2059
- searchBlueprints: (e) => t.searchBlueprints(e),
2060
- async getBlueprints(n) {
2061
- let r = [...new Set(n.filter((e) => e !== ""))], i = [];
2062
- for (let t = 0; t < r.length; t += e) i.push(r.slice(t, t + e));
2063
- return (await Promise.all(i.map((e) => t.getBlueprints(e)))).flat();
2064
- },
2065
- listReleases: (e) => t.listBlueprintReleases(e)
2234
+ searchBlueprints: (t) => e.searchBlueprints(t),
2235
+ getBlueprints: (t) => K(t, (t) => e.getBlueprints(t)),
2236
+ getBlueprintsByAccessor: (t) => K(t, (t) => e.getBlueprintsByAccessor(t)),
2237
+ listReleases: (t) => e.listBlueprintReleases(t)
2066
2238
  };
2067
2239
  }
2068
- function he(e, t) {
2069
- return o(() => t ?? me(e), [e, t]);
2240
+ async function K(t, n) {
2241
+ let r = [...new Set(t.filter((e) => e !== ""))], i = [];
2242
+ for (let t = 0; t < r.length; t += e) i.push(r.slice(t, t + e));
2243
+ return (await Promise.all(i.map(n))).flat();
2244
+ }
2245
+ function _e(e, t) {
2246
+ return o(() => t ?? ge(e), [e, t]);
2070
2247
  }
2071
2248
  //#endregion
2072
2249
  //#region src/common/use-open-change-sets.ts
2073
- var J = 200;
2074
- function ge(e, t = !0) {
2075
- return P({
2076
- queryKey: W.openChangeSets(),
2250
+ var q = 200;
2251
+ function J(e, t = !0) {
2252
+ return M({
2253
+ queryKey: V.openChangeSets(),
2077
2254
  queryFn: () => e.listChangeSets({
2078
2255
  state: "open",
2079
- pageSize: J
2256
+ pageSize: q
2080
2257
  }),
2081
2258
  enabled: t
2082
2259
  });
@@ -2084,20 +2261,20 @@ function ge(e, t = !0) {
2084
2261
  //#endregion
2085
2262
  //#region src/screens/collection-tree.tsx
2086
2263
  var Y = "__all__";
2087
- function _e(e, t) {
2264
+ function ve(e, t) {
2088
2265
  let n = new Map(t.map((e) => [e.id, e])), r = [], i = /* @__PURE__ */ new Set(), a = n.get(e);
2089
2266
  for (; a && !i.has(a.id);) i.add(a.id), r.unshift(a), a = n.get(a.parentId);
2090
2267
  return r;
2091
2268
  }
2092
2269
  function X() {
2093
- let { t: e } = I(K);
2094
- return /* @__PURE__ */ u(se, {
2270
+ let { t: e } = P(U);
2271
+ return /* @__PURE__ */ u(le, {
2095
2272
  size: 12,
2096
2273
  "aria-label": e("library.restricted")
2097
2274
  });
2098
2275
  }
2099
- function ve({ collections: e, activeId: t, onSelect: n }) {
2100
- let { t: r } = I(K), i = o(() => new Map(e.map((e) => [e.id, e])), [e]), a = o(() => {
2276
+ function ye({ collections: e, activeId: t, onSelect: n }) {
2277
+ let { t: r } = P(U), i = o(() => new Map(e.map((e) => [e.id, e])), [e]), a = o(() => {
2101
2278
  let t = /* @__PURE__ */ new Map();
2102
2279
  for (let n of e) {
2103
2280
  let e = n.parentId !== "" && i.has(n.parentId) ? n.parentId : "", r = t.get(e) ?? [];
@@ -2116,7 +2293,7 @@ function ve({ collections: e, activeId: t, onSelect: n }) {
2116
2293
  children: i.map((e) => n(e, a))
2117
2294
  };
2118
2295
  }, a = (t.get("") ?? []).map((e) => n(e, /* @__PURE__ */ new Set([e.id])));
2119
- return E({
2296
+ return w({
2120
2297
  rootNode: {
2121
2298
  id: "ROOT",
2122
2299
  name: "",
@@ -2134,8 +2311,8 @@ function ve({ collections: e, activeId: t, onSelect: n }) {
2134
2311
  e,
2135
2312
  i,
2136
2313
  r
2137
- ]), [s] = c(() => _e(t, e).slice(0, -1).map((e) => e.id));
2138
- return /* @__PURE__ */ d(w, {
2314
+ ]), [s] = c(() => ve(t, e).slice(0, -1).map((e) => e.id));
2315
+ return /* @__PURE__ */ d(x, {
2139
2316
  collection: a,
2140
2317
  size: "sm",
2141
2318
  selectedValue: [t === "" ? Y : t],
@@ -2144,28 +2321,90 @@ function ve({ collections: e, activeId: t, onSelect: n }) {
2144
2321
  let t = e.selectedValue[0];
2145
2322
  t !== void 0 && n(t === Y ? "" : t);
2146
2323
  },
2147
- children: [/* @__PURE__ */ u(ee, {
2324
+ children: [/* @__PURE__ */ u(b, {
2148
2325
  srOnly: !0,
2149
2326
  children: r("library.collections")
2150
- }), /* @__PURE__ */ u(T, { children: /* @__PURE__ */ u(C, { render: ({ node: e, nodeState: t }) => t.isBranch ? /* @__PURE__ */ d(v, { children: [
2151
- /* @__PURE__ */ u(y, { children: /* @__PURE__ */ u(F, { size: 14 }) }),
2152
- /* @__PURE__ */ u(b, { children: e.name }),
2327
+ }), /* @__PURE__ */ u(S, { children: /* @__PURE__ */ u(re, { render: ({ node: e, nodeState: t }) => t.isBranch ? /* @__PURE__ */ d(te, { children: [
2328
+ /* @__PURE__ */ u(_, { children: /* @__PURE__ */ u(N, { size: 14 }) }),
2329
+ /* @__PURE__ */ u(v, { children: e.name }),
2153
2330
  e.restricted ? /* @__PURE__ */ u(X, {}) : null
2154
- ] }) : /* @__PURE__ */ d(x, { children: [/* @__PURE__ */ u(S, { children: e.name }), e.restricted ? /* @__PURE__ */ u(X, {}) : null] }) }) })]
2331
+ ] }) : /* @__PURE__ */ d(y, { children: [/* @__PURE__ */ u(ne, { children: e.name }), e.restricted ? /* @__PURE__ */ u(X, {}) : null] }) }) })]
2332
+ });
2333
+ }
2334
+ //#endregion
2335
+ //#region src/screens/blueprint-select-field.tsx
2336
+ function be(e, t, n) {
2337
+ return n ? n.archived ? e("blueprintSelect.archived", { name: n.name }) : n.name : e("blueprintSelect.unknown", { value: t });
2338
+ }
2339
+ function xe(e, t) {
2340
+ let { t: n } = P(U), r = o(() => [...new Set(t)].sort(), [t]), i = M({
2341
+ queryKey: V.blueprintNamesByAccessor(r),
2342
+ queryFn: () => e.getBlueprintsByAccessor(r),
2343
+ enabled: r.length > 0,
2344
+ placeholderData: j,
2345
+ staleTime: 6e4
2346
+ }), a = i.isSuccess && !i.isPlaceholderData;
2347
+ return o(() => {
2348
+ let e = a ? new Map(i.data.map((e) => [e.accessor, e])) : null;
2349
+ return (t) => e ? be(n, t, e.get(t)) : t;
2350
+ }, [
2351
+ a,
2352
+ i.data,
2353
+ n
2354
+ ]);
2355
+ }
2356
+ function Z({ blueprintSource: e, valueKey: t, includeWithoutRelease: n = !1, exclude: r, ...a }) {
2357
+ let { t: o } = P(U), s = (r ?? []).join("\0"), c = i(async ({ query: r, cursor: i, signal: a }) => {
2358
+ let o = new Set(s === "" ? [] : s.split("\0")), c = await e.searchBlueprints({
2359
+ query: r,
2360
+ pageToken: i,
2361
+ includeWithoutRelease: n,
2362
+ signal: a
2363
+ });
2364
+ return {
2365
+ items: c.blueprints.filter((e) => !o.has(e[t])).map((e) => ({
2366
+ id: e[t],
2367
+ label: e.name
2368
+ })),
2369
+ nextCursor: c.nextPageToken || null
2370
+ };
2371
+ }, [
2372
+ e,
2373
+ t,
2374
+ n,
2375
+ s
2376
+ ]), l = i(async ({ ids: n }) => {
2377
+ let r = t === "id" ? await e.getBlueprints(n) : await e.getBlueprintsByAccessor(n), i = new Map(r.map((e) => [e[t], e]));
2378
+ return n.map((e) => ({
2379
+ id: e,
2380
+ label: be(o, e, i.get(e))
2381
+ }));
2382
+ }, [
2383
+ e,
2384
+ t,
2385
+ o
2386
+ ]);
2387
+ return /* @__PURE__ */ u(L, {
2388
+ ...a,
2389
+ search: c,
2390
+ resolve: l,
2391
+ emptyMessage: o("blueprintSelect.empty"),
2392
+ errorMessage: o("blueprintSelect.failed"),
2393
+ loadingMessage: o("blueprintSelect.loading")
2155
2394
  });
2156
2395
  }
2157
2396
  //#endregion
2158
2397
  //#region src/screens/create-change-set-modal.tsx
2159
- var Z = {
2398
+ var Se = {
2160
2399
  name: "",
2161
2400
  sourceDate: "",
2162
2401
  sourceReference: ""
2163
- }, ye = "contenthub-create-change-set", Q = /^[^\u0000-\u001f\u007f]*$/;
2164
- function be({ open: e, onClose: t, onSubmit: r }) {
2165
- let { t: i } = I(K), s = o(() => U.object({
2166
- name: U.string().trim().min(1, i("changeSets.form.nameRequired")).max(200, i("changeSets.form.tooLong", { max: 200 })).regex(Q, i("changeSets.form.oneLine")),
2167
- sourceDate: U.string().trim(),
2168
- sourceReference: U.string().trim().max(500, i("changeSets.form.tooLong", { max: 500 })).regex(Q, i("changeSets.form.oneLine"))
2402
+ }, Ce = "contenthub-create-change-set", Q = /^[^\u0000-\u001f\u007f]*$/;
2403
+ function we({ open: e, onClose: n, onSubmit: r }) {
2404
+ let { t: i } = P(U), s = o(() => B.object({
2405
+ name: B.string().trim().min(1, i("changeSets.form.nameRequired")).max(200, i("changeSets.form.tooLong", { max: 200 })).regex(Q, i("changeSets.form.oneLine")),
2406
+ sourceDate: B.string().trim(),
2407
+ sourceReference: B.string().trim().max(500, i("changeSets.form.tooLong", { max: 500 })).regex(Q, i("changeSets.form.oneLine"))
2169
2408
  }).superRefine((e, t) => {
2170
2409
  e.sourceReference !== "" && e.sourceDate === "" && t.addIssue({
2171
2410
  code: "custom",
@@ -2176,14 +2415,14 @@ function be({ open: e, onClose: t, onSubmit: r }) {
2176
2415
  path: ["sourceReference"],
2177
2416
  message: i("changeSets.form.sourceReferenceRequired")
2178
2417
  });
2179
- }), [i]), l = le({
2180
- resolver: L(s),
2181
- defaultValues: Z
2182
- }), [p, m] = c(null), h = l.formState.isSubmitting;
2418
+ }), [i]), l = fe({
2419
+ resolver: F(s),
2420
+ defaultValues: Se
2421
+ }), [p, m] = c(null), ee = l.formState.isSubmitting;
2183
2422
  a(() => {
2184
- e && (l.reset(Z), m(null));
2423
+ e && (l.reset(Se), m(null));
2185
2424
  }, [e, l]);
2186
- let _ = l.handleSubmit(async (e) => {
2425
+ let g = l.handleSubmit(async (e) => {
2187
2426
  m(null);
2188
2427
  try {
2189
2428
  await r({
@@ -2194,60 +2433,60 @@ function be({ open: e, onClose: t, onSubmit: r }) {
2194
2433
  }
2195
2434
  });
2196
2435
  } catch (e) {
2197
- m(e instanceof n ? e.message : i("changeSets.form.failed"));
2436
+ m(e instanceof t ? e.message : i("changeSets.form.failed"));
2198
2437
  }
2199
2438
  });
2200
- return /* @__PURE__ */ u(g, {
2439
+ return /* @__PURE__ */ u(h, {
2201
2440
  open: e,
2202
- onClose: t,
2441
+ onClose: n,
2203
2442
  lazyMount: !0,
2204
2443
  unmountOnExit: !0,
2205
2444
  size: "md",
2206
2445
  header: i("changeSets.form.createTitle"),
2207
- footer: /* @__PURE__ */ d(O, {
2446
+ footer: /* @__PURE__ */ d(E, {
2208
2447
  gap: "2",
2209
2448
  children: [/* @__PURE__ */ u(f, {
2210
2449
  size: "sm",
2211
2450
  variant: "ghost",
2212
- onClick: t,
2451
+ onClick: n,
2213
2452
  children: i("common.cancel")
2214
2453
  }), /* @__PURE__ */ u(f, {
2215
2454
  type: "submit",
2216
- form: ye,
2455
+ form: Ce,
2217
2456
  size: "sm",
2218
2457
  variant: "solid",
2219
- loading: h,
2458
+ loading: ee,
2220
2459
  children: i("changeSets.form.createSubmit")
2221
2460
  })]
2222
2461
  }),
2223
- children: /* @__PURE__ */ u(V, {
2462
+ children: /* @__PURE__ */ u(R, {
2224
2463
  ...l,
2225
2464
  children: /* @__PURE__ */ u("form", {
2226
- id: ye,
2465
+ id: Ce,
2227
2466
  onSubmit: (e) => {
2228
- e.preventDefault(), _();
2467
+ e.preventDefault(), g();
2229
2468
  },
2230
- children: /* @__PURE__ */ d(j, {
2469
+ children: /* @__PURE__ */ d(O, {
2231
2470
  gap: "4",
2232
2471
  children: [
2233
- /* @__PURE__ */ u(z, {
2472
+ /* @__PURE__ */ u(I, {
2234
2473
  name: "name",
2235
2474
  label: i("changeSets.form.name"),
2236
2475
  helperText: i("changeSets.form.nameHelp"),
2237
2476
  required: !0
2238
2477
  }),
2239
- /* @__PURE__ */ u(z, {
2478
+ /* @__PURE__ */ u(I, {
2240
2479
  name: "sourceDate",
2241
2480
  type: "date",
2242
2481
  label: i("changeSets.form.sourceDate"),
2243
2482
  helperText: i("changeSets.form.sourceDateHelp")
2244
2483
  }),
2245
- /* @__PURE__ */ u(z, {
2484
+ /* @__PURE__ */ u(I, {
2246
2485
  name: "sourceReference",
2247
2486
  label: i("changeSets.form.sourceReference"),
2248
2487
  helperText: i("changeSets.form.sourceReferenceHelp")
2249
2488
  }),
2250
- p ? /* @__PURE__ */ u(D, {
2489
+ p ? /* @__PURE__ */ u(T, {
2251
2490
  status: "error",
2252
2491
  title: p
2253
2492
  }) : null
@@ -2259,8 +2498,8 @@ function be({ open: e, onClose: t, onSubmit: r }) {
2259
2498
  }
2260
2499
  //#endregion
2261
2500
  //#region src/screens/change-set-choice.tsx
2262
- var xe = "@new";
2263
- function Se(e, t, n = !1) {
2501
+ var Te = "@new";
2502
+ function Ee(e, t, n = !1) {
2264
2503
  if (!t.changeSetId) return {
2265
2504
  path: "changeSetId",
2266
2505
  message: e("library.create.changeSetRequired")
@@ -2278,22 +2517,22 @@ function Se(e, t, n = !1) {
2278
2517
  message: e("changeSets.form.oneLine")
2279
2518
  };
2280
2519
  }
2281
- function Ce({ client: e, open: t, helperText: n, nameHelperText: r, nameOptional: i = !1 }) {
2282
- let { t: a } = I(K), s = ge(e, t), c = o(() => [{
2283
- id: xe,
2520
+ function De({ client: e, open: t, helperText: n, nameHelperText: r, nameOptional: i = !1 }) {
2521
+ let { t: a } = P(U), s = J(e, t), c = o(() => [{
2522
+ id: Te,
2284
2523
  label: a("library.create.newChangeSet")
2285
2524
  }, ...(s.data?.changeSets ?? []).map((e) => ({
2286
2525
  id: e.id,
2287
2526
  label: e.name
2288
- }))], [s.data, a]), f = H({ name: "changeSetId" });
2289
- return /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(R, {
2527
+ }))], [s.data, a]), f = z({ name: "changeSetId" });
2528
+ return /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(de, {
2290
2529
  name: "changeSetId",
2291
2530
  label: a("library.create.changeSet"),
2292
2531
  helperText: n,
2293
2532
  options: c,
2294
2533
  isClearable: !1,
2295
2534
  required: !0
2296
- }), f === "@new" ? /* @__PURE__ */ u(z, {
2535
+ }), f === "@new" ? /* @__PURE__ */ u(I, {
2297
2536
  name: "changeSetName",
2298
2537
  label: a("library.create.changeSetName"),
2299
2538
  helperText: r ?? a("changeSets.form.nameHelp"),
@@ -2302,13 +2541,13 @@ function Ce({ client: e, open: t, helperText: n, nameHelperText: r, nameOptional
2302
2541
  }
2303
2542
  //#endregion
2304
2543
  //#region src/screens/create-content-modal.tsx
2305
- var we = "contenthub-create-content", $ = (e) => !e.refusals?.length, Te = (e) => e.path ? `${e.code} (${e.path})` : e.code;
2306
- function Ee({ open: e, onClose: l, client: p, blueprintSource: m, initialChangeSetId: h, onCreated: _ }) {
2307
- let { t: v } = I(K), y = ae(), b = o(() => U.object({
2308
- blueprintId: U.string().nullable().refine((e) => !!e, v("library.create.blueprintRequired")),
2309
- releaseId: U.string().nullable().refine((e) => !!e, v("library.create.releaseRequired")),
2310
- changeSetId: U.string().nullable().refine((e) => !!e, v("library.create.changeSetRequired")),
2311
- changeSetName: U.string().trim()
2544
+ var Oe = "contenthub-create-content", $ = (e) => !e.refusals?.length, ke = (e) => e.path ? `${e.code} (${e.path})` : e.code;
2545
+ function Ae({ open: e, onClose: i, client: l, blueprintSource: p, initialChangeSetId: m, onCreated: ee }) {
2546
+ let { t: g } = P(U), te = se(), _ = o(() => B.object({
2547
+ blueprintId: B.string().nullable().refine((e) => !!e, g("library.create.blueprintRequired")),
2548
+ releaseId: B.string().nullable().refine((e) => !!e, g("library.create.releaseRequired")),
2549
+ changeSetId: B.string().nullable().refine((e) => !!e, g("library.create.changeSetRequired")),
2550
+ changeSetName: B.string().trim()
2312
2551
  }).superRefine((e, t) => {
2313
2552
  if (e.changeSetId !== "@new") return;
2314
2553
  let n = (e) => t.addIssue({
@@ -2316,196 +2555,177 @@ function Ee({ open: e, onClose: l, client: p, blueprintSource: m, initialChangeS
2316
2555
  path: ["changeSetName"],
2317
2556
  message: e
2318
2557
  });
2319
- e.changeSetName === "" ? n(v("changeSets.form.nameRequired")) : [...e.changeSetName].length > 200 ? n(v("changeSets.form.tooLong", { max: 200 })) : Q.test(e.changeSetName) || n(v("changeSets.form.oneLine"));
2320
- }), [v]), x = o(() => ({
2558
+ e.changeSetName === "" ? n(g("changeSets.form.nameRequired")) : [...e.changeSetName].length > 200 ? n(g("changeSets.form.tooLong", { max: 200 })) : Q.test(e.changeSetName) || n(g("changeSets.form.oneLine"));
2559
+ }), [g]), v = o(() => ({
2321
2560
  blueprintId: null,
2322
2561
  releaseId: null,
2323
- changeSetId: h || "@new",
2562
+ changeSetId: m || "@new",
2324
2563
  changeSetName: ""
2325
- }), [h]), S = le({
2326
- resolver: L(b),
2327
- defaultValues: x
2328
- }), [ee, C] = c(null), w = S.formState.isSubmitting, T = H({
2329
- control: S.control,
2564
+ }), [m]), y = fe({
2565
+ resolver: F(_),
2566
+ defaultValues: v
2567
+ }), [ne, b] = c(null), re = y.formState.isSubmitting, x = z({
2568
+ control: y.control,
2330
2569
  name: "blueprintId"
2331
- }), te = H({
2332
- control: S.control,
2570
+ }), S = z({
2571
+ control: y.control,
2333
2572
  name: "changeSetId"
2334
2573
  });
2335
2574
  a(() => {
2336
- e && (S.reset(x), C(null));
2575
+ e && (y.reset(v), b(null));
2337
2576
  }, [
2338
2577
  e,
2339
- S,
2340
- x
2578
+ y,
2579
+ v
2341
2580
  ]);
2342
- let E = ge(p, e), k = o(() => [{
2343
- id: xe,
2344
- label: v("library.create.newChangeSet")
2345
- }, ...(E.data?.changeSets ?? []).map((e) => ({
2581
+ let C = J(l, e), w = o(() => [{
2582
+ id: Te,
2583
+ label: g("library.create.newChangeSet")
2584
+ }, ...(C.data?.changeSets ?? []).map((e) => ({
2346
2585
  id: e.id,
2347
2586
  label: e.name
2348
- }))], [E.data, v]), A = P({
2349
- queryKey: W.blueprintReleases(T ?? ""),
2350
- queryFn: () => m.listReleases(T),
2351
- enabled: e && !!T
2352
- }), ne = o(() => (A.data ?? []).map((e) => ({
2587
+ }))], [C.data, g]), D = M({
2588
+ queryKey: V.blueprintReleases(x ?? ""),
2589
+ queryFn: () => p.listReleases(x),
2590
+ enabled: e && !!x
2591
+ }), ie = o(() => (D.data ?? []).map((e) => ({
2353
2592
  id: e.id,
2354
- label: $(e) ? e.name : v("library.create.refusedRelease", { name: e.name }),
2593
+ label: $(e) ? e.name : g("library.create.refusedRelease", { name: e.name }),
2355
2594
  data: { refused: !$(e) }
2356
- })), [A.data, v]), N = o(() => (A.data ?? []).filter((e) => !$(e)), [A.data]), re = s(T);
2595
+ })), [D.data, g]), ae = o(() => (D.data ?? []).filter((e) => !$(e)), [D.data]), A = s(x);
2357
2596
  a(() => {
2358
- re.current !== T && (re.current = T, S.setValue("releaseId", null));
2359
- let e = S.getValues("releaseId"), t = A.data;
2360
- if (!T) {
2361
- e !== null && S.setValue("releaseId", null);
2597
+ A.current !== x && (A.current = x, y.setValue("releaseId", null));
2598
+ let e = y.getValues("releaseId"), t = D.data;
2599
+ if (!x) {
2600
+ e !== null && y.setValue("releaseId", null);
2362
2601
  return;
2363
2602
  }
2364
- t && !t.some((t) => t.id === e && $(t)) && S.setValue("releaseId", t.find($)?.id ?? null);
2603
+ t && !t.some((t) => t.id === e && $(t)) && y.setValue("releaseId", t.find($)?.id ?? null);
2365
2604
  }, [
2366
- T,
2367
- A.data,
2368
- S
2605
+ x,
2606
+ D.data,
2607
+ y
2369
2608
  ]);
2370
- let ie = !!T && A.isSuccess && A.data.length === 0, F = !!T && A.isSuccess && A.data.length > 0 && !A.data.some($), oe = i(async ({ query: e, cursor: t, signal: n }) => {
2371
- let r = await m.searchBlueprints({
2372
- query: e,
2373
- pageToken: t ?? void 0,
2374
- signal: n
2375
- });
2376
- return {
2377
- items: r.blueprints.map((e) => ({
2378
- id: e.id,
2379
- label: e.name
2380
- })),
2381
- nextCursor: r.nextPageToken || null
2382
- };
2383
- }, [m]), se = i(async ({ ids: e }) => {
2384
- let t = await m.getBlueprints(e);
2385
- return e.map((e) => ({
2386
- id: e,
2387
- label: t.find((t) => t.id === e)?.name ?? e
2388
- }));
2389
- }, [m]), ce = S.handleSubmit(async (e) => {
2390
- C(null);
2609
+ let j = !!x && D.isSuccess && D.data.length === 0, oe = !!x && D.isSuccess && D.data.length > 0 && !D.data.some($), N = y.handleSubmit(async (e) => {
2610
+ b(null);
2391
2611
  let t = e.changeSetId, n = !1;
2392
2612
  try {
2393
2613
  if (t === "@new") {
2394
- let r = await p.createChangeSet({ name: e.changeSetName.trim() });
2395
- n = !0, t = r.id, S.setValue("changeSetId", t);
2614
+ let r = await l.createChangeSet({ name: e.changeSetName.trim() });
2615
+ n = !0, t = r.id, y.setValue("changeSetId", t);
2396
2616
  }
2397
- let r = await p.createContent({
2617
+ let r = await l.createContent({
2398
2618
  changeSetId: t,
2399
2619
  blueprintReleaseId: e.releaseId
2400
2620
  });
2401
- y.invalidateQueries({ queryKey: W.contents() }), _(r);
2621
+ te.invalidateQueries({ queryKey: V.contents() }), ee(r);
2402
2622
  } catch (e) {
2403
- if (C(ue(e)), !n) return;
2623
+ if (b(ce(e)), !n) return;
2404
2624
  }
2405
- y.invalidateQueries({ queryKey: W.changeSets() });
2625
+ te.invalidateQueries({ queryKey: V.changeSets() });
2406
2626
  });
2407
- function ue(e) {
2408
- if (e instanceof r) {
2409
- let t = e.reasons.map(Te).join(", ");
2410
- return v("library.create.refused", { reasons: t });
2627
+ function ce(e) {
2628
+ if (e instanceof n) {
2629
+ let t = e.reasons.map(ke).join(", ");
2630
+ return g("library.create.refused", { reasons: t });
2411
2631
  }
2412
- return e instanceof t ? v("library.create.changeSetClosed") : e instanceof n ? e.message : v("library.create.failed");
2632
+ return e instanceof r ? g("library.create.changeSetClosed") : e instanceof t ? e.message : g("library.create.failed");
2413
2633
  }
2414
- return /* @__PURE__ */ u(g, {
2634
+ return /* @__PURE__ */ u(h, {
2415
2635
  open: e,
2416
- onClose: l,
2636
+ onClose: i,
2417
2637
  lazyMount: !0,
2418
2638
  unmountOnExit: !0,
2419
2639
  size: "md",
2420
- header: v("library.create.title"),
2421
- footer: /* @__PURE__ */ d(O, {
2640
+ header: g("library.create.title"),
2641
+ footer: /* @__PURE__ */ d(E, {
2422
2642
  gap: "2",
2423
2643
  children: [/* @__PURE__ */ u(f, {
2424
2644
  size: "sm",
2425
2645
  variant: "ghost",
2426
- onClick: l,
2427
- children: v("common.cancel")
2646
+ onClick: i,
2647
+ children: g("common.cancel")
2428
2648
  }), /* @__PURE__ */ u(f, {
2429
2649
  type: "submit",
2430
- form: we,
2650
+ form: Oe,
2431
2651
  size: "sm",
2432
2652
  variant: "solid",
2433
- loading: w,
2434
- disabled: ie || F || A.isError,
2435
- children: v("library.create.submit")
2653
+ loading: re,
2654
+ disabled: j || oe || D.isError,
2655
+ children: g("library.create.submit")
2436
2656
  })]
2437
2657
  }),
2438
- children: /* @__PURE__ */ u(V, {
2439
- ...S,
2658
+ children: /* @__PURE__ */ u(R, {
2659
+ ...y,
2440
2660
  children: /* @__PURE__ */ u("form", {
2441
- id: we,
2661
+ id: Oe,
2442
2662
  onSubmit: (e) => {
2443
- e.preventDefault(), ce();
2663
+ e.preventDefault(), N();
2444
2664
  },
2445
- children: /* @__PURE__ */ d(j, {
2665
+ children: /* @__PURE__ */ d(O, {
2446
2666
  gap: "4",
2447
2667
  children: [
2448
- /* @__PURE__ */ u(B, {
2668
+ /* @__PURE__ */ u(Z, {
2449
2669
  name: "blueprintId",
2450
- label: v("library.create.blueprint"),
2451
- helperText: v("library.create.blueprintHelp"),
2452
- search: oe,
2453
- resolve: se,
2454
- placeholder: v("library.create.pickBlueprint"),
2670
+ label: g("library.create.blueprint"),
2671
+ helperText: g("library.create.blueprintHelp"),
2672
+ blueprintSource: p,
2673
+ valueKey: "id",
2674
+ placeholder: g("library.create.pickBlueprint"),
2455
2675
  required: !0
2456
2676
  }),
2457
- T ? /* @__PURE__ */ u(R, {
2677
+ x ? /* @__PURE__ */ u(de, {
2458
2678
  name: "releaseId",
2459
- label: v("library.create.release"),
2460
- helperText: v("library.create.releaseHelp"),
2461
- options: ne,
2679
+ label: g("library.create.release"),
2680
+ helperText: g("library.create.releaseHelp"),
2681
+ options: ie,
2462
2682
  isClearable: !1,
2463
2683
  required: !0,
2464
2684
  selectProps: { isOptionDisabled: (e) => e.data?.refused === !0 }
2465
2685
  }) : null,
2466
- ie ? /* @__PURE__ */ u(D, {
2686
+ j ? /* @__PURE__ */ u(T, {
2467
2687
  status: "warning",
2468
- title: v("library.create.noRelease")
2688
+ title: g("library.create.noRelease")
2469
2689
  }) : null,
2470
- F ? /* @__PURE__ */ u(D, {
2690
+ oe ? /* @__PURE__ */ u(T, {
2471
2691
  status: "warning",
2472
- title: v("library.create.noUsableRelease")
2692
+ title: g("library.create.noUsableRelease")
2473
2693
  }) : null,
2474
- A.isError ? /* @__PURE__ */ u(D, {
2694
+ D.isError ? /* @__PURE__ */ u(T, {
2475
2695
  status: "error",
2476
- title: v("library.create.releasesFailed")
2696
+ title: g("library.create.releasesFailed")
2477
2697
  }) : null,
2478
- N.length > 0 ? /* @__PURE__ */ u(D, {
2698
+ ae.length > 0 ? /* @__PURE__ */ u(T, {
2479
2699
  status: "info",
2480
- title: v("library.create.refusedReleases"),
2481
- children: /* @__PURE__ */ u(j, {
2700
+ title: g("library.create.refusedReleases"),
2701
+ children: /* @__PURE__ */ u(O, {
2482
2702
  gap: "1",
2483
- children: N.map((e) => /* @__PURE__ */ u(M, {
2703
+ children: ae.map((e) => /* @__PURE__ */ u(k, {
2484
2704
  textStyle: "sm",
2485
- children: v("library.create.refusedReleaseReasons", {
2705
+ children: g("library.create.refusedReleaseReasons", {
2486
2706
  name: e.name,
2487
- reasons: (e.refusals ?? []).map(Te).join(", ")
2707
+ reasons: (e.refusals ?? []).map(ke).join(", ")
2488
2708
  })
2489
2709
  }, e.id))
2490
2710
  })
2491
2711
  }) : null,
2492
- /* @__PURE__ */ u(R, {
2712
+ /* @__PURE__ */ u(de, {
2493
2713
  name: "changeSetId",
2494
- label: v("library.create.changeSet"),
2495
- helperText: v("library.create.changeSetHelp"),
2496
- options: k,
2714
+ label: g("library.create.changeSet"),
2715
+ helperText: g("library.create.changeSetHelp"),
2716
+ options: w,
2497
2717
  isClearable: !1,
2498
2718
  required: !0
2499
2719
  }),
2500
- te === "@new" ? /* @__PURE__ */ u(z, {
2720
+ S === "@new" ? /* @__PURE__ */ u(I, {
2501
2721
  name: "changeSetName",
2502
- label: v("library.create.changeSetName"),
2503
- helperText: v("changeSets.form.nameHelp"),
2722
+ label: g("library.create.changeSetName"),
2723
+ helperText: g("changeSets.form.nameHelp"),
2504
2724
  required: !0
2505
2725
  }) : null,
2506
- ee ? /* @__PURE__ */ u(D, {
2726
+ ne ? /* @__PURE__ */ u(T, {
2507
2727
  status: "error",
2508
- title: ee
2728
+ title: ne
2509
2729
  }) : null
2510
2730
  ]
2511
2731
  })
@@ -2515,66 +2735,66 @@ function Ee({ open: e, onClose: l, client: p, blueprintSource: m, initialChangeS
2515
2735
  }
2516
2736
  //#endregion
2517
2737
  //#region src/screens/content-library.tsx
2518
- var De = [
2738
+ var je = [
2519
2739
  "main",
2520
2740
  "in_force",
2521
2741
  "change_set"
2522
- ], Oe = 50, ke = 300, Ae = 5, je = "@me", Me = "collection";
2523
- function Ne(e) {
2742
+ ], Me = 50, Ne = 300, Pe = 5, Fe = "@me", Ie = "collection";
2743
+ function Le(e) {
2524
2744
  return Object.values(e).filter((e) => typeof e == "string" && e.trim() !== "" && e.length <= 200).slice(0, 2).join(" ");
2525
2745
  }
2526
- function Pe({ client: e, blueprintSource: t, onOpenContent: r, onOpenBranch: s }) {
2527
- let { t: l } = I(K), g = he(e, t), [v, y] = de(), b = v.get("collection") ?? "", [x, S] = c("main"), [ee, C] = c(""), [w, T] = c(""), [E, ae] = c(""), [F, se] = c(""), [L, R] = c(""), [z, B] = c(!1), { userId: V, members: le } = ue();
2746
+ function Re({ client: e, blueprintSource: n, onOpenContent: r, onOpenBranch: s }) {
2747
+ let { t: l } = P(U), h = _e(e, n), [te, _] = me(), v = te.get("collection") ?? "", [y, ne] = c("main"), [b, re] = c(""), [x, S] = c(""), [w, se] = c(""), [N, le] = c(""), [F, de] = c(""), [I, L] = c(!1), { userId: R, members: fe } = pe();
2528
2748
  a(() => {
2529
- let e = setTimeout(() => ae(w), ke);
2749
+ let e = setTimeout(() => se(x), Ne);
2530
2750
  return () => clearTimeout(e);
2531
- }, [w]);
2532
- let H = i((e) => y((t) => {
2751
+ }, [x]);
2752
+ let z = i((e) => _((t) => {
2533
2753
  let n = new URLSearchParams(t);
2534
- return e ? n.set(Me, e) : n.delete(Me), n;
2535
- }), [y]), U = P({
2536
- queryKey: W.collections(),
2754
+ return e ? n.set(Ie, e) : n.delete(Ie), n;
2755
+ }), [_]), B = M({
2756
+ queryKey: V.collections(),
2537
2757
  queryFn: () => e.listCollections()
2538
- }), G = ge(e), fe = i((e) => G.data?.changeSets.find((t) => t.id === e)?.name ?? e, [G.data]), q = ee || G.data?.changeSets[0]?.id || "", pe = o(() => x === "change_set" ? q ? {
2758
+ }), H = J(e), he = i((e) => H.data?.changeSets.find((t) => t.id === e)?.name ?? e, [H.data]), W = b || H.data?.changeSets[0]?.id || "", G = o(() => y === "change_set" ? W ? {
2539
2759
  kind: "change_set",
2540
- changeSetId: q
2541
- } : void 0 : { kind: x }, [x, q]), me = o(() => ({
2542
- view: pe,
2543
- collectionId: b || void 0,
2544
- search: x === "in_force" ? void 0 : E.trim() || void 0,
2545
- blueprintIds: F ? [F] : void 0,
2546
- assigneeId: L === je ? V : L || void 0
2760
+ changeSetId: W
2761
+ } : void 0 : { kind: y }, [y, W]), ge = o(() => ({
2762
+ view: G,
2763
+ collectionId: v || void 0,
2764
+ search: y === "in_force" ? void 0 : w.trim() || void 0,
2765
+ blueprintIds: N ? [N] : void 0,
2766
+ assigneeId: F === Fe ? R : F || void 0
2547
2767
  }), [
2548
- pe,
2549
- b,
2550
- x,
2551
- E,
2768
+ G,
2769
+ v,
2770
+ y,
2771
+ w,
2772
+ N,
2552
2773
  F,
2553
- L,
2554
- V
2555
- ]), J = ie({
2556
- queryKey: W.contentList(me),
2774
+ R
2775
+ ]), K = oe({
2776
+ queryKey: V.contentList(ge),
2557
2777
  queryFn: ({ pageParam: t }) => e.listContents({
2558
- ...me,
2559
- pageSize: Oe,
2778
+ ...ge,
2779
+ pageSize: Me,
2560
2780
  pageToken: t
2561
2781
  }),
2562
2782
  initialPageParam: "",
2563
2783
  getNextPageParam: (e) => e.nextPageToken || void 0,
2564
- enabled: pe !== void 0,
2565
- placeholderData: re
2566
- }), Y = o(() => J.data?.pages.flatMap((e) => e.contents) ?? [], [J.data]), X = o(() => [...new Set(Y.map((e) => e.blueprintId))].sort(), [Y]), Z = P({
2567
- queryKey: W.blueprintNames(X),
2568
- queryFn: () => g.getBlueprints(X),
2569
- enabled: X.length > 0,
2570
- placeholderData: re,
2784
+ enabled: G !== void 0,
2785
+ placeholderData: j
2786
+ }), q = o(() => K.data?.pages.flatMap((e) => e.contents) ?? [], [K.data]), Y = o(() => [...new Set(q.map((e) => e.blueprintId))].sort(), [q]), X = M({
2787
+ queryKey: V.blueprintNames(Y),
2788
+ queryFn: () => h.getBlueprints(Y),
2789
+ enabled: Y.length > 0,
2790
+ placeholderData: j,
2571
2791
  staleTime: 6e4
2572
- }), ye = i((e) => Z.data?.find((t) => t.id === e)?.name ?? e, [Z.data]), Q = P({
2573
- queryKey: W.blueprintFilterOptions(),
2792
+ }), be = i((e) => X.data?.find((t) => t.id === e)?.name ?? e, [X.data]), xe = M({
2793
+ queryKey: V.blueprintFilterOptions(),
2574
2794
  queryFn: async () => {
2575
2795
  let e = [], t = "";
2576
- for (let n = 0; n < Ae; n++) {
2577
- let n = await g.searchBlueprints({
2796
+ for (let n = 0; n < Pe; n++) {
2797
+ let n = await h.searchBlueprints({
2578
2798
  query: "",
2579
2799
  pageToken: t
2580
2800
  });
@@ -2583,22 +2803,22 @@ function Pe({ client: e, blueprintSource: t, onOpenContent: r, onOpenBranch: s }
2583
2803
  return e;
2584
2804
  },
2585
2805
  staleTime: 6e4
2586
- }), be = o(() => /* @__PURE__ */ new Map(), [g]), xe = o(() => {
2587
- for (let e of Z.data ?? []) be.set(e.id, e);
2588
- let e = new Map(be);
2589
- for (let t of Q.data ?? []) e.set(t.id, t);
2806
+ }), Z = o(() => /* @__PURE__ */ new Map(), [h]), Se = o(() => {
2807
+ for (let e of X.data ?? []) Z.set(e.id, e);
2808
+ let e = new Map(Z);
2809
+ for (let t of xe.data ?? []) e.set(t.id, t);
2590
2810
  return [...e.values()].sort((e, t) => e.name.localeCompare(t.name));
2591
2811
  }, [
2592
- be,
2593
- Q.data,
2594
- Z.data
2595
- ]), Se = o(() => [
2812
+ Z,
2813
+ xe.data,
2814
+ X.data
2815
+ ]), Ce = o(() => [
2596
2816
  {
2597
2817
  id: "content",
2598
2818
  header: l("library.columns.content"),
2599
2819
  cell: ({ row: e }) => {
2600
- let t = Ne(e.original.data);
2601
- return /* @__PURE__ */ u(te, {
2820
+ let t = Le(e.original.data);
2821
+ return /* @__PURE__ */ u(C, {
2602
2822
  value: t || e.original.id,
2603
2823
  subText: t ? e.original.id : void 0
2604
2824
  });
@@ -2607,144 +2827,144 @@ function Pe({ client: e, blueprintSource: t, onOpenContent: r, onOpenBranch: s }
2607
2827
  {
2608
2828
  id: "blueprint",
2609
2829
  header: l("library.columns.blueprint"),
2610
- cell: ({ row: e }) => /* @__PURE__ */ u(te, { value: ye(e.original.blueprintId) })
2830
+ cell: ({ row: e }) => /* @__PURE__ */ u(C, { value: be(e.original.blueprintId) })
2611
2831
  },
2612
2832
  {
2613
2833
  id: "readOn",
2614
2834
  header: l("library.columns.readOn"),
2615
2835
  cell: ({ row: e }) => {
2616
- let t = e.original, n = t.changeSetId ? fe(t.changeSetId) : t.releaseId ? l("library.readOn.release") : l("library.readOn.main");
2617
- return /* @__PURE__ */ u(te, { value: n });
2836
+ let t = e.original, n = t.changeSetId ? he(t.changeSetId) : t.releaseId ? l("library.readOn.release") : l("library.readOn.main");
2837
+ return /* @__PURE__ */ u(C, { value: n });
2618
2838
  }
2619
2839
  },
2620
2840
  {
2621
2841
  id: "revised",
2622
2842
  header: l("library.columns.revised"),
2623
- cell: ({ row: e }) => /* @__PURE__ */ u(h, { value: e.original.revisionCreateTime })
2843
+ cell: ({ row: e }) => /* @__PURE__ */ u(ee, { value: e.original.revisionCreateTime })
2624
2844
  }
2625
2845
  ], [
2626
2846
  l,
2627
- ye,
2628
- fe
2629
- ]), Ce = /* @__PURE__ */ d(f, {
2847
+ be,
2848
+ he
2849
+ ]), Q = /* @__PURE__ */ d(f, {
2630
2850
  size: "sm",
2631
2851
  variant: "solid",
2632
- onClick: () => B(!0),
2633
- children: [/* @__PURE__ */ u(ce, { size: 16 }), l("library.create.button")]
2634
- }), we = J.error instanceof n ? J.error.message : l("library.loadError"), $ = b ? _e(b, U.data ?? []).map((e) => e.name).join(" / ") || b : l("library.allContent");
2635
- return /* @__PURE__ */ d(ne, {
2852
+ onClick: () => L(!0),
2853
+ children: [/* @__PURE__ */ u(ue, { size: 16 }), l("library.create.button")]
2854
+ }), we = K.error instanceof t ? K.error.message : l("library.loadError"), Te = v ? ve(v, B.data ?? []).map((e) => e.name).join(" / ") || v : l("library.allContent");
2855
+ return /* @__PURE__ */ d(ae, {
2636
2856
  title: l("library.title"),
2637
2857
  breadcrumbs: [{ label: l("library.title") }],
2638
- actions: Ce,
2639
- toolbar: /* @__PURE__ */ d(_, { children: [
2640
- x === "in_force" ? /* @__PURE__ */ u(M, {
2858
+ actions: Q,
2859
+ toolbar: /* @__PURE__ */ d(g, { children: [
2860
+ y === "in_force" ? /* @__PURE__ */ u(k, {
2641
2861
  fontSize: "sm",
2642
2862
  color: "muted",
2643
2863
  children: l("library.filter.searchInForce")
2644
- }) : /* @__PURE__ */ u(_.Search, {
2864
+ }) : /* @__PURE__ */ u(g.Search, {
2645
2865
  placeholder: l("library.filter.searchPlaceholder"),
2646
- value: w,
2647
- onChange: (e) => T([...e].slice(0, 200).join(""))
2866
+ value: x,
2867
+ onChange: (e) => S([...e].slice(0, 200).join(""))
2648
2868
  }),
2649
- /* @__PURE__ */ d(_.Filters, { children: [
2650
- /* @__PURE__ */ u(k, {
2869
+ /* @__PURE__ */ d(g.Filters, { children: [
2870
+ /* @__PURE__ */ u(D, {
2651
2871
  size: "sm",
2652
2872
  "aria-label": l("library.filter.view"),
2653
- value: x,
2873
+ value: y,
2654
2874
  onChange: (e) => {
2655
2875
  let t = e.target.value;
2656
- t === "in_force" && (T(""), ae("")), S(t);
2876
+ t === "in_force" && (S(""), se("")), ne(t);
2657
2877
  },
2658
- children: De.map((e) => /* @__PURE__ */ u("option", {
2878
+ children: je.map((e) => /* @__PURE__ */ u("option", {
2659
2879
  value: e,
2660
2880
  children: l(`library.view.${e}`)
2661
2881
  }, e))
2662
2882
  }),
2663
- x === "change_set" ? /* @__PURE__ */ d(k, {
2883
+ y === "change_set" ? /* @__PURE__ */ d(D, {
2664
2884
  size: "sm",
2665
2885
  "aria-label": l("library.filter.changeSet"),
2666
- value: q,
2667
- onChange: (e) => C(e.target.value),
2668
- children: [G.data?.changeSets.length ? null : /* @__PURE__ */ u("option", {
2886
+ value: W,
2887
+ onChange: (e) => re(e.target.value),
2888
+ children: [H.data?.changeSets.length ? null : /* @__PURE__ */ u("option", {
2669
2889
  value: "",
2670
2890
  children: l("library.filter.noOpenChangeSet")
2671
- }), (G.data?.changeSets ?? []).map((e) => /* @__PURE__ */ u("option", {
2891
+ }), (H.data?.changeSets ?? []).map((e) => /* @__PURE__ */ u("option", {
2672
2892
  value: e.id,
2673
2893
  children: e.name
2674
2894
  }, e.id))]
2675
2895
  }) : null,
2676
- /* @__PURE__ */ d(k, {
2896
+ /* @__PURE__ */ d(D, {
2677
2897
  size: "sm",
2678
2898
  "aria-label": l("library.filter.blueprint"),
2679
- value: F,
2680
- onChange: (e) => se(e.target.value),
2899
+ value: N,
2900
+ onChange: (e) => le(e.target.value),
2681
2901
  children: [/* @__PURE__ */ u("option", {
2682
2902
  value: "",
2683
2903
  children: l("library.filter.anyBlueprint")
2684
- }), xe.map((e) => /* @__PURE__ */ u("option", {
2904
+ }), Se.map((e) => /* @__PURE__ */ u("option", {
2685
2905
  value: e.id,
2686
2906
  children: e.name
2687
2907
  }, e.id))]
2688
2908
  }),
2689
- /* @__PURE__ */ d(k, {
2909
+ /* @__PURE__ */ d(D, {
2690
2910
  size: "sm",
2691
2911
  "aria-label": l("library.filter.assignee"),
2692
- value: L,
2693
- onChange: (e) => R(e.target.value),
2912
+ value: F,
2913
+ onChange: (e) => de(e.target.value),
2694
2914
  children: [
2695
2915
  /* @__PURE__ */ u("option", {
2696
2916
  value: "",
2697
2917
  children: l("library.filter.anyone")
2698
2918
  }),
2699
2919
  /* @__PURE__ */ u("option", {
2700
- value: je,
2920
+ value: Fe,
2701
2921
  children: l("library.filter.me")
2702
2922
  }),
2703
- le.list().filter((e) => e.userId !== V).map((e) => /* @__PURE__ */ u("option", {
2923
+ fe.list().filter((e) => e.userId !== R).map((e) => /* @__PURE__ */ u("option", {
2704
2924
  value: e.userId,
2705
2925
  children: e.displayName
2706
2926
  }, e.userId))
2707
2927
  ]
2708
2928
  })
2709
2929
  ] }),
2710
- /* @__PURE__ */ u(_.Right, { children: J.isError ? null : /* @__PURE__ */ d(_.Count, { children: [l("library.count", { count: Y.length }), J.hasNextPage ? "+" : ""] }) })
2930
+ /* @__PURE__ */ u(g.Right, { children: K.isError ? null : /* @__PURE__ */ d(g.Count, { children: [l("library.count", { count: q.length }), K.hasNextPage ? "+" : ""] }) })
2711
2931
  ] }),
2712
- children: [/* @__PURE__ */ d(N, {
2932
+ children: [/* @__PURE__ */ d(A, {
2713
2933
  storageKey: "contenthub-library-subnav",
2714
- children: [/* @__PURE__ */ u(N.Nav, {
2934
+ children: [/* @__PURE__ */ u(A.Nav, {
2715
2935
  "aria-label": l("library.collections"),
2716
- children: U.isSuccess ? /* @__PURE__ */ u(ve, {
2717
- collections: U.data,
2718
- activeId: b,
2719
- onSelect: H
2720
- }) : U.isError ? /* @__PURE__ */ u(M, {
2936
+ children: B.isSuccess ? /* @__PURE__ */ u(ye, {
2937
+ collections: B.data,
2938
+ activeId: v,
2939
+ onSelect: z
2940
+ }) : B.isError ? /* @__PURE__ */ u(k, {
2721
2941
  fontSize: "sm",
2722
2942
  color: "muted",
2723
2943
  px: "3",
2724
2944
  py: "2",
2725
2945
  children: l("library.collectionsError")
2726
- }) : /* @__PURE__ */ u(O, {
2946
+ }) : /* @__PURE__ */ u(E, {
2727
2947
  justify: "center",
2728
2948
  py: "4",
2729
- children: /* @__PURE__ */ u(A, { size: "sm" })
2949
+ children: /* @__PURE__ */ u(ie, { size: "sm" })
2730
2950
  })
2731
- }), /* @__PURE__ */ d(N.Detail, { children: [/* @__PURE__ */ u(N.Toolbar, { children: /* @__PURE__ */ u(M, {
2951
+ }), /* @__PURE__ */ d(A.Detail, { children: [/* @__PURE__ */ u(A.Toolbar, { children: /* @__PURE__ */ u(k, {
2732
2952
  fontSize: "sm",
2733
2953
  fontWeight: "medium",
2734
- children: $
2735
- }) }), /* @__PURE__ */ d(j, {
2954
+ children: Te
2955
+ }) }), /* @__PURE__ */ d(O, {
2736
2956
  gap: "3",
2737
2957
  children: [
2738
- J.isError ? /* @__PURE__ */ u(D, {
2958
+ K.isError ? /* @__PURE__ */ u(T, {
2739
2959
  status: "error",
2740
2960
  title: we,
2741
2961
  mx: "8",
2742
2962
  mt: "4"
2743
2963
  }) : null,
2744
2964
  /* @__PURE__ */ u(m, {
2745
- columns: Se,
2746
- data: Y,
2747
- loading: J.isLoading,
2965
+ columns: Ce,
2966
+ data: q,
2967
+ loading: K.isLoading,
2748
2968
  getRowId: (e) => `${e.id}/${e.branchId}/${e.releaseId}`,
2749
2969
  onRowClick: (e) => r({
2750
2970
  contentId: e.id,
@@ -2752,32 +2972,32 @@ function Pe({ client: e, blueprintSource: t, onOpenContent: r, onOpenBranch: s }
2752
2972
  }),
2753
2973
  variant: "hoverable",
2754
2974
  emptyState: /* @__PURE__ */ u(p, {
2755
- icon: /* @__PURE__ */ u(oe, { size: 32 }),
2975
+ icon: /* @__PURE__ */ u(ce, { size: 32 }),
2756
2976
  header: l("library.empty"),
2757
2977
  description: l("library.emptyHint")
2758
2978
  })
2759
2979
  }),
2760
- J.hasNextPage ? /* @__PURE__ */ u(O, {
2980
+ K.hasNextPage ? /* @__PURE__ */ u(E, {
2761
2981
  justify: "center",
2762
2982
  pb: "4",
2763
2983
  children: /* @__PURE__ */ u(f, {
2764
2984
  size: "sm",
2765
2985
  variant: "outline",
2766
- loading: J.isFetchingNextPage,
2767
- onClick: () => void J.fetchNextPage(),
2986
+ loading: K.isFetchingNextPage,
2987
+ onClick: () => void K.fetchNextPage(),
2768
2988
  children: l("library.more")
2769
2989
  })
2770
2990
  }) : null
2771
2991
  ]
2772
2992
  })] })]
2773
- }), /* @__PURE__ */ u(Ee, {
2774
- open: z,
2775
- onClose: () => B(!1),
2993
+ }), /* @__PURE__ */ u(Ae, {
2994
+ open: I,
2995
+ onClose: () => L(!1),
2776
2996
  client: e,
2777
- blueprintSource: g,
2778
- initialChangeSetId: x === "change_set" ? q : void 0,
2997
+ blueprintSource: h,
2998
+ initialChangeSetId: y === "change_set" ? W : void 0,
2779
2999
  onCreated: (e) => {
2780
- B(!1), s({
3000
+ L(!1), s({
2781
3001
  changeSetId: e.changeSetId,
2782
3002
  contentId: e.id,
2783
3003
  branchId: e.branchId
@@ -2786,8 +3006,8 @@ function Pe({ client: e, blueprintSource: t, onOpenContent: r, onOpenBranch: s }
2786
3006
  })]
2787
3007
  });
2788
3008
  }
2789
- Pe.displayName = "ContentLibrary";
3009
+ Re.displayName = "ContentLibrary";
2790
3010
  //#endregion
2791
- export { xe as a, _e as c, K as d, pe as f, Ce as i, ge as l, W as m, Pe as n, Se as o, q as p, Ne as r, be as s, Me as t, he as u };
3011
+ export { Te as a, Z as c, J as d, _e as f, V as g, W as h, De as i, xe as l, G as m, Re as n, Ee as o, U as p, Le as r, we as s, Ie as t, ve as u };
2792
3012
 
2793
- //# sourceMappingURL=content-library-DFIk09bD.js.map
3013
+ //# sourceMappingURL=content-library-C5MCRNY0.js.map