@strapi/content-releases 0.0.0-experimental.d4cb32ce579e12a4436d68036f2327132fba1309 → 0.0.0-experimental.d53e940834bf72ddc725f1d2fd36dac9abec30cb

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 (110) hide show
  1. package/dist/_chunks/{App-xAkiD42p.mjs → App-B2R2exNT.mjs} +656 -625
  2. package/dist/_chunks/App-B2R2exNT.mjs.map +1 -0
  3. package/dist/_chunks/{App-OK4Xac-O.js → App-CEwOQkKT.js} +671 -641
  4. package/dist/_chunks/App-CEwOQkKT.js.map +1 -0
  5. package/dist/_chunks/{PurchaseContentReleases-YhAPgpG9.js → PurchaseContentReleases-Be3acS2L.js} +8 -7
  6. package/dist/_chunks/PurchaseContentReleases-Be3acS2L.js.map +1 -0
  7. package/dist/_chunks/{PurchaseContentReleases-Clm0iACO.mjs → PurchaseContentReleases-_MxP6-Dt.mjs} +9 -8
  8. package/dist/_chunks/PurchaseContentReleases-_MxP6-Dt.mjs.map +1 -0
  9. package/dist/_chunks/{en-veqvqeEr.mjs → en-B9Ur3VsE.mjs} +14 -5
  10. package/dist/_chunks/en-B9Ur3VsE.mjs.map +1 -0
  11. package/dist/_chunks/{en-r0otWaln.js → en-DtFJ5ViE.js} +14 -5
  12. package/dist/_chunks/en-DtFJ5ViE.js.map +1 -0
  13. package/dist/_chunks/{index-JvA2_26n.js → index-BrWv-zV4.js} +258 -244
  14. package/dist/_chunks/index-BrWv-zV4.js.map +1 -0
  15. package/dist/_chunks/{index-exoiSU3V.mjs → index-DbmynICx.mjs} +264 -248
  16. package/dist/_chunks/index-DbmynICx.mjs.map +1 -0
  17. package/dist/admin/index.js +1 -15
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +2 -16
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/src/components/CMReleasesContainer.d.ts +22 -0
  22. package/dist/admin/src/components/RelativeTime.d.ts +28 -0
  23. package/dist/admin/src/components/ReleaseAction.d.ts +3 -0
  24. package/dist/admin/src/components/ReleaseActionMenu.d.ts +26 -0
  25. package/dist/admin/src/components/ReleaseActionOptions.d.ts +9 -0
  26. package/dist/admin/src/components/ReleaseListCell.d.ts +0 -0
  27. package/dist/admin/src/components/ReleaseModal.d.ts +17 -0
  28. package/dist/admin/src/constants.d.ts +58 -0
  29. package/dist/admin/src/index.d.ts +3 -0
  30. package/dist/admin/src/pages/App.d.ts +1 -0
  31. package/dist/admin/src/pages/PurchaseContentReleases.d.ts +2 -0
  32. package/dist/admin/src/pages/ReleaseDetailsPage.d.ts +2 -0
  33. package/dist/admin/src/pages/ReleasesPage.d.ts +8 -0
  34. package/dist/admin/src/pages/tests/mockReleaseDetailsPageData.d.ts +181 -0
  35. package/dist/admin/src/pages/tests/mockReleasesPageData.d.ts +39 -0
  36. package/dist/admin/src/pluginId.d.ts +1 -0
  37. package/dist/admin/src/services/release.d.ts +105 -0
  38. package/dist/admin/src/store/hooks.d.ts +7 -0
  39. package/dist/admin/src/utils/api.d.ts +6 -0
  40. package/dist/admin/src/utils/prefixPluginTranslations.d.ts +3 -0
  41. package/dist/admin/src/utils/time.d.ts +1 -0
  42. package/dist/server/index.js +675 -232
  43. package/dist/server/index.js.map +1 -1
  44. package/dist/server/index.mjs +675 -232
  45. package/dist/server/index.mjs.map +1 -1
  46. package/dist/server/src/bootstrap.d.ts +5 -0
  47. package/dist/server/src/bootstrap.d.ts.map +1 -0
  48. package/dist/server/src/constants.d.ts +12 -0
  49. package/dist/server/src/constants.d.ts.map +1 -0
  50. package/dist/server/src/content-types/index.d.ts +99 -0
  51. package/dist/server/src/content-types/index.d.ts.map +1 -0
  52. package/dist/server/src/content-types/release/index.d.ts +48 -0
  53. package/dist/server/src/content-types/release/index.d.ts.map +1 -0
  54. package/dist/server/src/content-types/release/schema.d.ts +47 -0
  55. package/dist/server/src/content-types/release/schema.d.ts.map +1 -0
  56. package/dist/server/src/content-types/release-action/index.d.ts +50 -0
  57. package/dist/server/src/content-types/release-action/index.d.ts.map +1 -0
  58. package/dist/server/src/content-types/release-action/schema.d.ts +49 -0
  59. package/dist/server/src/content-types/release-action/schema.d.ts.map +1 -0
  60. package/dist/server/src/controllers/index.d.ts +20 -0
  61. package/dist/server/src/controllers/index.d.ts.map +1 -0
  62. package/dist/server/src/controllers/release-action.d.ts +10 -0
  63. package/dist/server/src/controllers/release-action.d.ts.map +1 -0
  64. package/dist/server/src/controllers/release.d.ts +12 -0
  65. package/dist/server/src/controllers/release.d.ts.map +1 -0
  66. package/dist/server/src/controllers/validation/release-action.d.ts +8 -0
  67. package/dist/server/src/controllers/validation/release-action.d.ts.map +1 -0
  68. package/dist/server/src/controllers/validation/release.d.ts +2 -0
  69. package/dist/server/src/controllers/validation/release.d.ts.map +1 -0
  70. package/dist/server/src/destroy.d.ts +5 -0
  71. package/dist/server/src/destroy.d.ts.map +1 -0
  72. package/dist/server/src/index.d.ts +2096 -0
  73. package/dist/server/src/index.d.ts.map +1 -0
  74. package/dist/server/src/migrations/index.d.ts +13 -0
  75. package/dist/server/src/migrations/index.d.ts.map +1 -0
  76. package/dist/server/src/register.d.ts +5 -0
  77. package/dist/server/src/register.d.ts.map +1 -0
  78. package/dist/server/src/routes/index.d.ts +35 -0
  79. package/dist/server/src/routes/index.d.ts.map +1 -0
  80. package/dist/server/src/routes/release-action.d.ts +18 -0
  81. package/dist/server/src/routes/release-action.d.ts.map +1 -0
  82. package/dist/server/src/routes/release.d.ts +18 -0
  83. package/dist/server/src/routes/release.d.ts.map +1 -0
  84. package/dist/server/src/services/index.d.ts +1826 -0
  85. package/dist/server/src/services/index.d.ts.map +1 -0
  86. package/dist/server/src/services/release.d.ts +66 -0
  87. package/dist/server/src/services/release.d.ts.map +1 -0
  88. package/dist/server/src/services/scheduling.d.ts +18 -0
  89. package/dist/server/src/services/scheduling.d.ts.map +1 -0
  90. package/dist/server/src/services/validation.d.ts +18 -0
  91. package/dist/server/src/services/validation.d.ts.map +1 -0
  92. package/dist/server/src/utils/index.d.ts +14 -0
  93. package/dist/server/src/utils/index.d.ts.map +1 -0
  94. package/dist/shared/contracts/release-actions.d.ts +131 -0
  95. package/dist/shared/contracts/release-actions.d.ts.map +1 -0
  96. package/dist/shared/contracts/releases.d.ts +182 -0
  97. package/dist/shared/contracts/releases.d.ts.map +1 -0
  98. package/dist/shared/types.d.ts +24 -0
  99. package/dist/shared/types.d.ts.map +1 -0
  100. package/dist/shared/validation-schemas.d.ts +2 -0
  101. package/dist/shared/validation-schemas.d.ts.map +1 -0
  102. package/package.json +29 -36
  103. package/dist/_chunks/App-OK4Xac-O.js.map +0 -1
  104. package/dist/_chunks/App-xAkiD42p.mjs.map +0 -1
  105. package/dist/_chunks/PurchaseContentReleases-Clm0iACO.mjs.map +0 -1
  106. package/dist/_chunks/PurchaseContentReleases-YhAPgpG9.js.map +0 -1
  107. package/dist/_chunks/en-r0otWaln.js.map +0 -1
  108. package/dist/_chunks/en-veqvqeEr.mjs.map +0 -1
  109. package/dist/_chunks/index-JvA2_26n.js.map +0 -1
  110. package/dist/_chunks/index-exoiSU3V.mjs.map +0 -1
@@ -1,18 +1,16 @@
1
- import { getFetchClient, useNotification, useAPIErrorHandler, CheckPermissions, useCMEditViewDataManager, NoContent, prefixPluginTranslations } from "@strapi/helper-plugin";
2
1
  import { Cross, Pencil, More, Plus, PaperPlane } from "@strapi/icons";
3
2
  import { jsx, jsxs } from "react/jsx-runtime";
4
3
  import * as React from "react";
5
4
  import { skipToken } from "@reduxjs/toolkit/query";
6
- import { IconButton, Flex, Icon, Typography, Field, FieldLabel, VisuallyHidden, FieldInput, Box, Button, ModalLayout, ModalHeader, ModalBody, SingleSelect, SingleSelectOption, ModalFooter } from "@strapi/design-system";
7
- import { Menu, Link, LinkButton } from "@strapi/design-system/v2";
8
- import { isAxiosError as isAxiosError$1 } from "axios";
5
+ import { adminApi, useNotification, useAPIErrorHandler, useRBAC, useAuth, isFetchError, useQueryParams } from "@strapi/admin/strapi-admin";
6
+ import { unstable_useDocument } from "@strapi/content-manager/strapi-admin";
7
+ import { Menu, Flex, Typography, AccessibleIcon, Field, VisuallyHidden, Box, Button, Modal, SingleSelect, SingleSelectOption, EmptyStateLayout, LinkButton } from "@strapi/design-system";
8
+ import { EmptyDocuments } from "@strapi/icons/symbols";
9
9
  import { Formik, Form } from "formik";
10
10
  import { useIntl } from "react-intl";
11
- import { NavLink, Link as Link$1 } from "react-router-dom";
11
+ import { Link, useParams } from "react-router-dom";
12
12
  import * as yup from "yup";
13
- import { createApi } from "@reduxjs/toolkit/query/react";
14
- import styled from "styled-components";
15
- import { useDispatch, useSelector } from "react-redux";
13
+ import { styled } from "styled-components";
16
14
  const __variableDynamicImportRuntimeHelper = (glob, path) => {
17
15
  const v = glob[path];
18
16
  if (v) {
@@ -94,49 +92,9 @@ const PERMISSIONS = {
94
92
  }
95
93
  ]
96
94
  };
97
- const pluginId = "content-releases";
98
- const axiosBaseQuery = async ({
99
- url,
100
- method,
101
- data,
102
- config
103
- }) => {
104
- try {
105
- const { get, post, del, put } = getFetchClient();
106
- if (method === "POST") {
107
- const result2 = await post(url, data, config);
108
- return { data: result2.data };
109
- }
110
- if (method === "DELETE") {
111
- const result2 = await del(url, config);
112
- return { data: result2.data };
113
- }
114
- if (method === "PUT") {
115
- const result2 = await put(url, data, config);
116
- return { data: result2.data };
117
- }
118
- const result = await get(url, config);
119
- return { data: result.data };
120
- } catch (error) {
121
- const err = error;
122
- return {
123
- error: {
124
- status: err.response?.status,
125
- code: err.code,
126
- response: {
127
- data: err.response?.data
128
- }
129
- }
130
- };
131
- }
132
- };
133
- const isAxiosError = (err) => {
134
- return typeof err === "object" && err !== null && "response" in err && typeof err.response === "object" && err.response !== null && "data" in err.response;
135
- };
136
- const releaseApi = createApi({
137
- reducerPath: pluginId,
138
- baseQuery: axiosBaseQuery,
139
- tagTypes: ["Release", "ReleaseAction"],
95
+ const releaseApi = adminApi.enhanceEndpoints({
96
+ addTagTypes: ["Release", "ReleaseAction", "EntriesInRelease"]
97
+ }).injectEndpoints({
140
98
  endpoints: (build) => {
141
99
  return {
142
100
  getReleasesForEntry: build.query({
@@ -251,6 +209,20 @@ const releaseApi = createApi({
251
209
  { type: "ReleaseAction", id: "LIST" }
252
210
  ]
253
211
  }),
212
+ createManyReleaseActions: build.mutation({
213
+ query({ body, params }) {
214
+ return {
215
+ url: `/content-releases/${params.releaseId}/actions/bulk`,
216
+ method: "POST",
217
+ data: body
218
+ };
219
+ },
220
+ invalidatesTags: [
221
+ { type: "Release", id: "LIST" },
222
+ { type: "ReleaseAction", id: "LIST" },
223
+ { type: "EntriesInRelease" }
224
+ ]
225
+ }),
254
226
  updateReleaseAction: build.mutation({
255
227
  query({ body, params }) {
256
228
  return {
@@ -266,13 +238,17 @@ const releaseApi = createApi({
266
238
  ...query
267
239
  };
268
240
  const patchResult = dispatch(
269
- releaseApi.util.updateQueryData("getReleaseActions", paramsWithoutActionId, (draft) => {
270
- const [key, index] = actionPath;
271
- const action = draft.data[key][index];
272
- if (action) {
273
- action.type = body.type;
241
+ releaseApi.util.updateQueryData(
242
+ "getReleaseActions",
243
+ paramsWithoutActionId,
244
+ (draft) => {
245
+ const [key, index] = actionPath;
246
+ const action = draft.data[key][index];
247
+ if (action) {
248
+ action.type = body.type;
249
+ }
274
250
  }
275
- })
251
+ )
276
252
  );
277
253
  try {
278
254
  await queryFulfilled;
@@ -288,9 +264,11 @@ const releaseApi = createApi({
288
264
  method: "DELETE"
289
265
  };
290
266
  },
291
- invalidatesTags: [
267
+ invalidatesTags: (result, error, arg) => [
292
268
  { type: "Release", id: "LIST" },
293
- { type: "ReleaseAction", id: "LIST" }
269
+ { type: "Release", id: arg.params.releaseId },
270
+ { type: "ReleaseAction", id: "LIST" },
271
+ { type: "EntriesInRelease" }
294
272
  ]
295
273
  }),
296
274
  publishRelease: build.mutation({
@@ -309,7 +287,22 @@ const releaseApi = createApi({
309
287
  method: "DELETE"
310
288
  };
311
289
  },
312
- invalidatesTags: (result, error, arg) => [{ type: "Release", id: arg.id }]
290
+ invalidatesTags: () => [{ type: "Release", id: "LIST" }, { type: "EntriesInRelease" }]
291
+ }),
292
+ getMappedEntriesInReleases: build.query({
293
+ query(params) {
294
+ return {
295
+ url: "/content-releases/mapEntriesToReleases",
296
+ method: "GET",
297
+ config: {
298
+ params
299
+ }
300
+ };
301
+ },
302
+ transformResponse(response) {
303
+ return response.data;
304
+ },
305
+ providesTags: [{ type: "EntriesInRelease" }]
313
306
  })
314
307
  };
315
308
  }
@@ -321,11 +314,13 @@ const {
321
314
  useGetReleaseActionsQuery,
322
315
  useCreateReleaseMutation,
323
316
  useCreateReleaseActionMutation,
317
+ useCreateManyReleaseActionsMutation,
324
318
  useUpdateReleaseMutation,
325
319
  useUpdateReleaseActionMutation,
326
320
  usePublishReleaseMutation,
327
321
  useDeleteReleaseActionMutation,
328
- useDeleteReleaseMutation
322
+ useDeleteReleaseMutation,
323
+ useGetMappedEntriesInReleasesQuery
329
324
  } = releaseApi;
330
325
  const getTimezoneOffset = (timezone, date) => {
331
326
  try {
@@ -343,16 +338,12 @@ const getTimezoneOffset = (timezone, date) => {
343
338
  return "";
344
339
  }
345
340
  };
346
- const useTypedDispatch = useDispatch;
347
- const useTypedSelector = useSelector;
348
341
  const StyledMenuItem = styled(Menu.Item)`
349
342
  &:hover {
350
- background: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}100`]};
343
+ background: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}100`]};
351
344
 
352
345
  svg {
353
- path {
354
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
355
- }
346
+ fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
356
347
  }
357
348
 
358
349
  a {
@@ -361,9 +352,7 @@ const StyledMenuItem = styled(Menu.Item)`
361
352
  }
362
353
 
363
354
  svg {
364
- path {
365
- fill: ${({ theme, variant = "neutral" }) => theme.colors[`${variant}600`]};
366
- }
355
+ fill: ${({ theme, $variant = "neutral" }) => theme.colors[`${$variant}600`]};
367
356
  }
368
357
 
369
358
  a {
@@ -375,15 +364,14 @@ const StyledMenuItem = styled(Menu.Item)`
375
364
  width: 100%;
376
365
  }
377
366
  `;
378
- const StyledIconButton = styled(IconButton)`
379
- /* Setting this style inline with borderColor will not apply the style */
380
- border: ${({ theme }) => `1px solid ${theme.colors.neutral200}`};
381
- `;
382
367
  const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
383
368
  const { formatMessage } = useIntl();
384
- const toggleNotification = useNotification();
369
+ const { toggleNotification } = useNotification();
385
370
  const { formatAPIError } = useAPIErrorHandler();
386
371
  const [deleteReleaseAction] = useDeleteReleaseActionMutation();
372
+ const {
373
+ allowedActions: { canDeleteAction }
374
+ } = useRBAC(PERMISSIONS);
387
375
  const handleDeleteAction = async () => {
388
376
  const response = await deleteReleaseAction({
389
377
  params: { releaseId, actionId }
@@ -399,26 +387,29 @@ const DeleteReleaseActionItem = ({ releaseId, actionId }) => {
399
387
  return;
400
388
  }
401
389
  if ("error" in response) {
402
- if (isAxiosError$1(response.error)) {
390
+ if (isFetchError(response.error)) {
403
391
  toggleNotification({
404
- type: "warning",
392
+ type: "danger",
405
393
  message: formatAPIError(response.error)
406
394
  });
407
395
  } else {
408
396
  toggleNotification({
409
- type: "warning",
397
+ type: "danger",
410
398
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
411
399
  });
412
400
  }
413
401
  }
414
402
  };
415
- return /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsx(StyledMenuItem, { variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
416
- /* @__PURE__ */ jsx(Icon, { as: Cross, width: 3, height: 3 }),
403
+ if (!canDeleteAction) {
404
+ return null;
405
+ }
406
+ return /* @__PURE__ */ jsx(StyledMenuItem, { $variant: "danger", onSelect: handleDeleteAction, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
407
+ /* @__PURE__ */ jsx(Cross, { width: "1.6rem", height: "1.6rem" }),
417
408
  /* @__PURE__ */ jsx(Typography, { textColor: "danger600", variant: "omega", children: formatMessage({
418
409
  id: "content-releases.content-manager-edit-view.remove-from-release",
419
410
  defaultMessage: "Remove from release"
420
411
  }) })
421
- ] }) }) });
412
+ ] }) });
422
413
  };
423
414
  const ReleaseActionEntryLinkItem = ({
424
415
  contentTypeUid,
@@ -426,66 +417,84 @@ const ReleaseActionEntryLinkItem = ({
426
417
  locale
427
418
  }) => {
428
419
  const { formatMessage } = useIntl();
429
- const collectionTypePermissions = useTypedSelector(
430
- (state) => state.rbacProvider.collectionTypesRelatedPermissions
431
- );
432
- const updatePermissions = contentTypeUid ? collectionTypePermissions[contentTypeUid]?.["plugin::content-manager.explorer.update"] : [];
433
- const canUpdateEntryForLocale = Boolean(
434
- !locale || updatePermissions?.find(
435
- (permission) => permission.properties?.locales?.includes(locale)
436
- )
437
- );
420
+ const userPermissions = useAuth("ReleaseActionEntryLinkItem", (state) => state.permissions);
421
+ const canUpdateEntryForLocale = React.useMemo(() => {
422
+ const updatePermissions = userPermissions.find(
423
+ (permission) => permission.subject === contentTypeUid && permission.action === "plugin::content-manager.explorer.update"
424
+ );
425
+ if (!updatePermissions) {
426
+ return false;
427
+ }
428
+ return Boolean(!locale || updatePermissions.properties?.locales?.includes(locale));
429
+ }, [contentTypeUid, locale, userPermissions]);
430
+ const {
431
+ allowedActions: { canUpdate: canUpdateContentType }
432
+ } = useRBAC({
433
+ updateContentType: [
434
+ {
435
+ action: "plugin::content-manager.explorer.update",
436
+ subject: contentTypeUid
437
+ }
438
+ ]
439
+ });
440
+ if (!canUpdateContentType || !canUpdateEntryForLocale) {
441
+ return null;
442
+ }
438
443
  return /* @__PURE__ */ jsx(
439
- CheckPermissions,
444
+ StyledMenuItem,
440
445
  {
441
- permissions: [
442
- {
443
- action: "plugin::content-manager.explorer.update",
444
- subject: contentTypeUid
445
- }
446
- ],
447
- children: canUpdateEntryForLocale && /* @__PURE__ */ jsx(StyledMenuItem, { children: /* @__PURE__ */ jsx(
448
- Link,
449
- {
450
- as: NavLink,
451
- to: {
452
- pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
453
- search: locale && `?plugins[i18n][locale]=${locale}`
454
- },
455
- startIcon: /* @__PURE__ */ jsx(Icon, { as: Pencil, width: 3, height: 3 }),
456
- children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
457
- id: "content-releases.content-manager-edit-view.edit-entry",
458
- defaultMessage: "Edit entry"
459
- }) })
460
- }
461
- ) })
446
+ tag: Link,
447
+ isLink: true,
448
+ to: {
449
+ pathname: `/content-manager/collection-types/${contentTypeUid}/${entryId}`,
450
+ search: locale && `?plugins[i18n][locale]=${locale}`
451
+ },
452
+ children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
453
+ /* @__PURE__ */ jsx(Pencil, { width: "1.6rem", height: "1.6rem" }),
454
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
455
+ id: "content-releases.content-manager-edit-view.edit-entry",
456
+ defaultMessage: "Edit entry"
457
+ }) })
458
+ ] })
462
459
  }
463
460
  );
464
461
  };
465
- const Root = ({ children, hasTriggerBorder = false }) => {
462
+ const EditReleaseItem = ({ releaseId }) => {
463
+ const { formatMessage } = useIntl();
464
+ return (
465
+ /* @ts-expect-error inference isn't working in DS */
466
+ /* @__PURE__ */ jsx(StyledMenuItem, { tag: Link, isLink: true, to: `/plugins/content-releases/${releaseId}`, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, children: [
467
+ /* @__PURE__ */ jsx(Pencil, { width: "1.6rem", height: "1.6rem" }),
468
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
469
+ id: "content-releases.content-manager-edit-view.edit-release",
470
+ defaultMessage: "Edit release"
471
+ }) })
472
+ ] }) })
473
+ );
474
+ };
475
+ const Root = ({ children }) => {
466
476
  const { formatMessage } = useIntl();
477
+ const { allowedActions } = useRBAC(PERMISSIONS);
467
478
  return (
468
479
  // A user can access the dropdown if they have permissions to delete a release-action OR update a release
469
- /* @__PURE__ */ jsx(CheckPermissions, { permissions: [...PERMISSIONS.deleteAction, ...PERMISSIONS.update], children: /* @__PURE__ */ jsxs(Menu.Root, { children: [
470
- /* @__PURE__ */ jsx(
471
- Menu.Trigger,
480
+ allowedActions.canDeleteAction || allowedActions.canUpdate ? /* @__PURE__ */ jsxs(Menu.Root, { children: [
481
+ /* @__PURE__ */ jsx(Menu.Trigger, { paddingLeft: 2, paddingRight: 2, children: /* @__PURE__ */ jsx(
482
+ AccessibleIcon,
472
483
  {
473
- as: hasTriggerBorder ? StyledIconButton : IconButton,
474
- paddingLeft: 2,
475
- paddingRight: 2,
476
- "aria-label": formatMessage({
484
+ label: formatMessage({
477
485
  id: "content-releases.content-manager-edit-view.release-action-menu",
478
486
  defaultMessage: "Release action options"
479
487
  }),
480
- icon: /* @__PURE__ */ jsx(More, {})
488
+ children: /* @__PURE__ */ jsx(More, {})
481
489
  }
482
- ),
490
+ ) }),
483
491
  /* @__PURE__ */ jsx(Menu.Content, { top: 1, popoverPlacement: "bottom-end", children })
484
- ] }) })
492
+ ] }) : null
485
493
  );
486
494
  };
487
495
  const ReleaseActionMenu = {
488
496
  Root,
497
+ EditReleaseItem,
489
498
  DeleteReleaseActionItem,
490
499
  ReleaseActionEntryLinkItem
491
500
  };
@@ -495,11 +504,11 @@ const getBorderLeftRadiusValue = (actionType) => {
495
504
  const getBorderRightRadiusValue = (actionType) => {
496
505
  return actionType === "publish" ? 0 : 1;
497
506
  };
498
- const FieldWrapper = styled(Field)`
499
- border-top-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
500
- border-bottom-left-radius: ${({ actionType, theme }) => theme.spaces[getBorderLeftRadiusValue(actionType)]};
501
- border-top-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
502
- border-bottom-right-radius: ${({ actionType, theme }) => theme.spaces[getBorderRightRadiusValue(actionType)]};
507
+ const FieldWrapper = styled(Field.Root)`
508
+ border-top-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
509
+ border-bottom-left-radius: ${({ $actionType, theme }) => theme.spaces[getBorderLeftRadiusValue($actionType)]};
510
+ border-top-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
511
+ border-bottom-right-radius: ${({ $actionType, theme }) => theme.spaces[getBorderRightRadiusValue($actionType)]};
503
512
 
504
513
  > label {
505
514
  color: inherit;
@@ -510,14 +519,14 @@ const FieldWrapper = styled(Field)`
510
519
  }
511
520
 
512
521
  &[data-checked='true'] {
513
- color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
514
- background-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
515
- border-color: ${({ theme, actionType }) => actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
522
+ color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
523
+ background-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary100 : theme.colors.danger100};
524
+ border-color: ${({ theme, $actionType }) => $actionType === "publish" ? theme.colors.primary700 : theme.colors.danger600};
516
525
  }
517
526
 
518
527
  &[data-checked='false'] {
519
- border-left: ${({ actionType }) => actionType === "unpublish" && "none"};
520
- border-right: ${({ actionType }) => actionType === "publish" && "none"};
528
+ border-left: ${({ $actionType }) => $actionType === "unpublish" && "none"};
529
+ border-right: ${({ $actionType }) => $actionType === "publish" && "none"};
521
530
  }
522
531
 
523
532
  &[data-checked='false'][data-disabled='false']:hover {
@@ -546,7 +555,7 @@ const ActionOption = ({
546
555
  return /* @__PURE__ */ jsx(
547
556
  FieldWrapper,
548
557
  {
549
- actionType,
558
+ $actionType: actionType,
550
559
  background: "primary0",
551
560
  borderColor: "neutral200",
552
561
  color: selected === actionType ? "primary600" : "neutral600",
@@ -554,12 +563,11 @@ const ActionOption = ({
554
563
  cursor: "pointer",
555
564
  "data-checked": selected === actionType,
556
565
  "data-disabled": disabled && selected !== actionType,
557
- children: /* @__PURE__ */ jsxs(FieldLabel, { htmlFor: `${name}-${actionType}`, children: [
566
+ children: /* @__PURE__ */ jsxs(Field.Label, { children: [
558
567
  /* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
559
- FieldInput,
568
+ Field.Input,
560
569
  {
561
570
  type: "radio",
562
- id: `${name}-${actionType}`,
563
571
  name,
564
572
  checked: selected === actionType,
565
573
  onChange: handleChange,
@@ -612,19 +620,20 @@ const INITIAL_VALUES = {
612
620
  const NoReleases = () => {
613
621
  const { formatMessage } = useIntl();
614
622
  return /* @__PURE__ */ jsx(
615
- NoContent,
623
+ EmptyStateLayout,
616
624
  {
617
- content: {
625
+ icon: /* @__PURE__ */ jsx(EmptyDocuments, { width: "16rem" }),
626
+ content: formatMessage({
618
627
  id: "content-releases.content-manager-edit-view.add-to-release.no-releases-message",
619
628
  defaultMessage: "No available releases. Open the list of releases and create a new one from there."
620
- },
629
+ }),
621
630
  action: /* @__PURE__ */ jsx(
622
631
  LinkButton,
623
632
  {
624
633
  to: {
625
634
  pathname: "/plugins/content-releases"
626
635
  },
627
- as: Link$1,
636
+ tag: Link,
628
637
  variant: "secondary",
629
638
  children: formatMessage({
630
639
  id: "content-releases.content-manager-edit-view.add-to-release.redirect-button",
@@ -636,15 +645,16 @@ const NoReleases = () => {
636
645
  );
637
646
  };
638
647
  const AddActionToReleaseModal = ({
639
- handleClose,
648
+ open,
649
+ onOpenChange,
640
650
  contentTypeUid,
641
651
  entryId
642
652
  }) => {
643
- const releaseHeaderId = React.useId();
644
653
  const { formatMessage } = useIntl();
645
- const toggleNotification = useNotification();
654
+ const { toggleNotification } = useNotification();
646
655
  const { formatAPIError } = useAPIErrorHandler();
647
- const { modifiedData } = useCMEditViewDataManager();
656
+ const [{ query }] = useQueryParams();
657
+ const locale = query.plugins?.i18n?.locale;
648
658
  const response = useGetReleasesForEntryQuery({
649
659
  contentTypeUid,
650
660
  entryId,
@@ -653,7 +663,6 @@ const AddActionToReleaseModal = ({
653
663
  const releases = response.data?.data;
654
664
  const [createReleaseAction, { isLoading }] = useCreateReleaseActionMutation();
655
665
  const handleSubmit = async (values) => {
656
- const locale = modifiedData.locale;
657
666
  const releaseActionEntry = {
658
667
  contentType: contentTypeUid,
659
668
  id: entryId,
@@ -671,25 +680,25 @@ const AddActionToReleaseModal = ({
671
680
  defaultMessage: "Entry added to release"
672
681
  })
673
682
  });
674
- handleClose();
683
+ onOpenChange();
675
684
  return;
676
685
  }
677
686
  if ("error" in response2) {
678
- if (isAxiosError$1(response2.error)) {
687
+ if (isFetchError(response2.error)) {
679
688
  toggleNotification({
680
- type: "warning",
689
+ type: "danger",
681
690
  message: formatAPIError(response2.error)
682
691
  });
683
692
  } else {
684
693
  toggleNotification({
685
- type: "warning",
694
+ type: "danger",
686
695
  message: formatMessage({ id: "notification.error", defaultMessage: "An error occurred" })
687
696
  });
688
697
  }
689
698
  }
690
699
  };
691
- return /* @__PURE__ */ jsxs(ModalLayout, { onClose: handleClose, labelledBy: releaseHeaderId, children: [
692
- /* @__PURE__ */ jsx(ModalHeader, { children: /* @__PURE__ */ jsx(Typography, { id: releaseHeaderId, fontWeight: "bold", textColor: "neutral800", children: formatMessage({
700
+ return /* @__PURE__ */ jsx(Modal.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(Modal.Content, { children: [
701
+ /* @__PURE__ */ jsx(Modal.Header, { children: /* @__PURE__ */ jsx(Modal.Title, { fontWeight: "bold", children: formatMessage({
693
702
  id: "content-releases.content-manager-edit-view.add-to-release",
694
703
  defaultMessage: "Add to release"
695
704
  }) }) }),
@@ -701,25 +710,26 @@ const AddActionToReleaseModal = ({
701
710
  initialValues: INITIAL_VALUES,
702
711
  children: ({ values, setFieldValue }) => {
703
712
  return /* @__PURE__ */ jsxs(Form, { children: [
704
- releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
705
- /* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsx(
706
- SingleSelect,
707
- {
708
- required: true,
709
- label: formatMessage({
710
- id: "content-releases.content-manager-edit-view.add-to-release.select-label",
711
- defaultMessage: "Select a release"
712
- }),
713
- placeholder: formatMessage({
714
- id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
715
- defaultMessage: "Select"
716
- }),
717
- onChange: (value) => setFieldValue("releaseId", value),
718
- value: values.releaseId,
719
- children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
720
- }
721
- ) }),
722
- /* @__PURE__ */ jsx(FieldLabel, { children: formatMessage({
713
+ releases?.length === 0 ? /* @__PURE__ */ jsx(NoReleases, {}) : /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "stretch", gap: 2, children: [
714
+ /* @__PURE__ */ jsx(Box, { paddingBottom: 6, children: /* @__PURE__ */ jsxs(Field.Root, { required: true, children: [
715
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
716
+ id: "content-releases.content-manager-edit-view.add-to-release.select-label",
717
+ defaultMessage: "Select a release"
718
+ }) }),
719
+ /* @__PURE__ */ jsx(
720
+ SingleSelect,
721
+ {
722
+ placeholder: formatMessage({
723
+ id: "content-releases.content-manager-edit-view.add-to-release.select-placeholder",
724
+ defaultMessage: "Select"
725
+ }),
726
+ onChange: (value) => setFieldValue("releaseId", value),
727
+ value: values.releaseId,
728
+ children: releases?.map((release) => /* @__PURE__ */ jsx(SingleSelectOption, { value: release.id, children: release.name }, release.id))
729
+ }
730
+ )
731
+ ] }) }),
732
+ /* @__PURE__ */ jsx(Field.Label, { children: formatMessage({
723
733
  id: "content-releases.content-manager-edit-view.add-to-release.action-type-label",
724
734
  defaultMessage: "What do you want to do with this entry?"
725
735
  }) }),
@@ -732,43 +742,37 @@ const AddActionToReleaseModal = ({
732
742
  }
733
743
  )
734
744
  ] }) }),
735
- /* @__PURE__ */ jsx(
736
- ModalFooter,
737
- {
738
- startActions: /* @__PURE__ */ jsx(Button, { onClick: handleClose, variant: "tertiary", name: "cancel", children: formatMessage({
739
- id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
740
- defaultMessage: "Cancel"
741
- }) }),
742
- endActions: (
743
- /**
744
- * TODO: Ideally we would use isValid from Formik to disable the button, however currently it always returns true
745
- * for yup.string().required(), even when the value is falsy (including empty string)
746
- */
747
- /* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
748
- id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
749
- defaultMessage: "Continue"
750
- }) })
751
- )
752
- }
753
- )
745
+ /* @__PURE__ */ jsxs(Modal.Footer, { children: [
746
+ /* @__PURE__ */ jsx(Modal.Close, { children: /* @__PURE__ */ jsx(Button, { variant: "tertiary", name: "cancel", children: formatMessage({
747
+ id: "content-releases.content-manager-edit-view.add-to-release.cancel-button",
748
+ defaultMessage: "Cancel"
749
+ }) }) }),
750
+ /* @__PURE__ */ jsx(Button, { type: "submit", disabled: !values.releaseId, loading: isLoading, children: formatMessage({
751
+ id: "content-releases.content-manager-edit-view.add-to-release.continue-button",
752
+ defaultMessage: "Continue"
753
+ }) })
754
+ ] })
754
755
  ] });
755
756
  }
756
757
  }
757
758
  )
758
- ] });
759
+ ] }) });
759
760
  };
760
761
  const CMReleasesContainer = () => {
761
762
  const [isModalOpen, setIsModalOpen] = React.useState(false);
762
763
  const { formatMessage, formatDate, formatTime } = useIntl();
763
- const {
764
- isCreatingEntry,
765
- hasDraftAndPublish,
766
- initialData: { id: entryId },
767
- slug
768
- } = useCMEditViewDataManager();
764
+ const { id, slug, collectionType } = useParams();
765
+ const isCreatingEntry = id === "create";
766
+ const entryId = parseInt(id, 10);
767
+ const { allowedActions } = useRBAC(PERMISSIONS);
768
+ const { canCreateAction, canRead: canMain, canDeleteAction } = allowedActions;
769
+ const { schema } = unstable_useDocument({
770
+ collectionType,
771
+ model: slug
772
+ });
773
+ const hasDraftAndPublish = schema?.options?.draftAndPublish;
769
774
  const contentTypeUid = slug;
770
- const IsSchedulingEnabled = window.strapi.future.isEnabled("contentReleasesScheduling");
771
- const canFetch = entryId != null && contentTypeUid != null;
775
+ const canFetch = id != null && contentTypeUid != null;
772
776
  const fetchParams = canFetch ? {
773
777
  contentTypeUid,
774
778
  entryId,
@@ -789,10 +793,13 @@ const CMReleasesContainer = () => {
789
793
  }
790
794
  return `success${shade}`;
791
795
  };
792
- return /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.main, children: /* @__PURE__ */ jsxs(
796
+ if (!canMain) {
797
+ return null;
798
+ }
799
+ return /* @__PURE__ */ jsxs(
793
800
  Box,
794
801
  {
795
- as: "aside",
802
+ tag: "aside",
796
803
  "aria-label": formatMessage({
797
804
  id: "content-releases.plugin.name",
798
805
  defaultMessage: "Releases"
@@ -816,7 +823,7 @@ const CMReleasesContainer = () => {
816
823
  alignItems: "start",
817
824
  borderWidth: "1px",
818
825
  borderStyle: "solid",
819
- borderColor: getReleaseColorVariant(release.action.type, "200"),
826
+ borderColor: getReleaseColorVariant(release.actions[0].type, "200"),
820
827
  overflow: "hidden",
821
828
  hasRadius: true,
822
829
  children: [
@@ -827,28 +834,28 @@ const CMReleasesContainer = () => {
827
834
  paddingBottom: 3,
828
835
  paddingLeft: 4,
829
836
  paddingRight: 4,
830
- background: getReleaseColorVariant(release.action.type, "100"),
837
+ background: getReleaseColorVariant(release.actions[0].type, "100"),
831
838
  width: "100%",
832
839
  children: /* @__PURE__ */ jsx(
833
840
  Typography,
834
841
  {
835
842
  fontSize: 1,
836
843
  variant: "pi",
837
- textColor: getReleaseColorVariant(release.action.type, "600"),
844
+ textColor: getReleaseColorVariant(release.actions[0].type, "600"),
838
845
  children: formatMessage(
839
846
  {
840
847
  id: "content-releases.content-manager-edit-view.list-releases.title",
841
848
  defaultMessage: "{isPublish, select, true {Will be published in} other {Will be unpublished in}}"
842
849
  },
843
- { isPublish: release.action.type === "publish" }
850
+ { isPublish: release.actions[0].type === "publish" }
844
851
  )
845
852
  }
846
853
  )
847
854
  }
848
855
  ),
849
- /* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
856
+ /* @__PURE__ */ jsx(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: /* @__PURE__ */ jsxs(Flex, { padding: 4, direction: "column", gap: 2, width: "100%", alignItems: "flex-start", children: [
850
857
  /* @__PURE__ */ jsx(Typography, { fontSize: 2, fontWeight: "bold", variant: "omega", textColor: "neutral700", children: release.name }),
851
- IsSchedulingEnabled && release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
858
+ release.scheduledAt && release.timezone && /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: formatMessage(
852
859
  {
853
860
  id: "content-releases.content-manager-edit-view.scheduled.date",
854
861
  defaultMessage: "{date} at {time} ({offset})"
@@ -870,20 +877,23 @@ const CMReleasesContainer = () => {
870
877
  )
871
878
  }
872
879
  ) }),
873
- /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.deleteAction, children: /* @__PURE__ */ jsx(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: /* @__PURE__ */ jsx(
874
- ReleaseActionMenu.DeleteReleaseActionItem,
875
- {
876
- releaseId: release.id,
877
- actionId: release.action.id
878
- }
879
- ) }) })
880
- ] })
880
+ canDeleteAction ? /* @__PURE__ */ jsxs(ReleaseActionMenu.Root, { hasTriggerBorder: true, children: [
881
+ /* @__PURE__ */ jsx(ReleaseActionMenu.EditReleaseItem, { releaseId: release.id }),
882
+ /* @__PURE__ */ jsx(
883
+ ReleaseActionMenu.DeleteReleaseActionItem,
884
+ {
885
+ releaseId: release.id,
886
+ actionId: release.actions[0].id
887
+ }
888
+ )
889
+ ] }) : null
890
+ ] }) })
881
891
  ]
882
892
  },
883
893
  release.id
884
894
  );
885
895
  }),
886
- /* @__PURE__ */ jsx(CheckPermissions, { permissions: PERMISSIONS.createAction, children: /* @__PURE__ */ jsx(
896
+ canCreateAction ? /* @__PURE__ */ jsx(
887
897
  Button,
888
898
  {
889
899
  justifyContent: "center",
@@ -898,42 +908,48 @@ const CMReleasesContainer = () => {
898
908
  defaultMessage: "Add to release"
899
909
  })
900
910
  }
901
- ) })
911
+ ) : null
902
912
  ] }),
903
- isModalOpen && /* @__PURE__ */ jsx(
913
+ /* @__PURE__ */ jsx(
904
914
  AddActionToReleaseModal,
905
915
  {
906
- handleClose: toggleModal,
916
+ open: isModalOpen,
917
+ onOpenChange: toggleModal,
907
918
  contentTypeUid,
908
919
  entryId
909
920
  }
910
921
  )
911
922
  ]
912
923
  }
913
- ) });
924
+ );
925
+ };
926
+ const pluginId = "content-releases";
927
+ const prefixPluginTranslations = (trad, pluginId2) => {
928
+ if (!pluginId2) {
929
+ throw new TypeError("pluginId can't be empty");
930
+ }
931
+ return Object.keys(trad).reduce((acc, current) => {
932
+ acc[`${pluginId2}.${current}`] = trad[current];
933
+ return acc;
934
+ }, {});
914
935
  };
915
936
  const admin = {
916
937
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
917
938
  register(app) {
939
+ app.createHook("ContentReleases/pages/ReleaseDetails/add-locale-in-releases");
918
940
  if (window.strapi.features.isEnabled("cms-content-releases")) {
919
941
  app.addMenuLink({
920
- to: `/plugins/${pluginId}`,
942
+ to: `plugins/${pluginId}`,
921
943
  icon: PaperPlane,
922
944
  intlLabel: {
923
945
  id: `${pluginId}.plugin.name`,
924
946
  defaultMessage: "Releases"
925
947
  },
926
- async Component() {
927
- const { App } = await import("./App-xAkiD42p.mjs");
928
- return App;
929
- },
930
- permissions: PERMISSIONS.main
931
- });
932
- app.addMiddlewares([() => releaseApi.middleware]);
933
- app.addReducers({
934
- [releaseApi.reducerPath]: releaseApi.reducer
948
+ Component: () => import("./App-B2R2exNT.mjs").then((mod) => ({ default: mod.App })),
949
+ permissions: PERMISSIONS.main,
950
+ position: 2
935
951
  });
936
- app.injectContentManagerComponent("editView", "right-links", {
952
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
937
953
  name: `${pluginId}-link`,
938
954
  Component: CMReleasesContainer
939
955
  });
@@ -945,18 +961,20 @@ const admin = {
945
961
  id: `${pluginId}.plugin.name`,
946
962
  defaultMessage: "Releases"
947
963
  },
964
+ permissions: [],
948
965
  async Component() {
949
- const { PurchaseContentReleases } = await import("./PurchaseContentReleases-Clm0iACO.mjs");
950
- return PurchaseContentReleases;
966
+ const { PurchaseContentReleases } = await import("./PurchaseContentReleases-_MxP6-Dt.mjs");
967
+ return { default: PurchaseContentReleases };
951
968
  },
952
- lockIcon: true
969
+ licenseOnly: true,
970
+ position: 2
953
971
  });
954
972
  }
955
973
  },
956
974
  async registerTrads({ locales }) {
957
975
  const importedTrads = await Promise.all(
958
976
  locales.map((locale) => {
959
- return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-veqvqeEr.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
977
+ return __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-B9Ur3VsE.mjs") }), `./translations/${locale}.json`).then(({ default: data }) => {
960
978
  return {
961
979
  data: prefixPluginTranslations(data, "content-releases"),
962
980
  locale
@@ -975,20 +993,18 @@ const admin = {
975
993
  export {
976
994
  PERMISSIONS as P,
977
995
  ReleaseActionOptions as R,
978
- useUpdateReleaseMutation as a,
979
- useDeleteReleaseMutation as b,
980
- usePublishReleaseMutation as c,
981
- useTypedDispatch as d,
982
- useGetReleaseActionsQuery as e,
983
- useUpdateReleaseActionMutation as f,
996
+ useCreateReleaseMutation as a,
997
+ useGetReleaseQuery as b,
998
+ useUpdateReleaseMutation as c,
999
+ useDeleteReleaseMutation as d,
1000
+ usePublishReleaseMutation as e,
1001
+ useGetReleaseActionsQuery as f,
984
1002
  getTimezoneOffset as g,
985
- ReleaseActionMenu as h,
986
- isAxiosError as i,
987
- useGetReleasesQuery as j,
988
- useCreateReleaseMutation as k,
989
- admin as l,
1003
+ useUpdateReleaseActionMutation as h,
1004
+ ReleaseActionMenu as i,
1005
+ admin as j,
990
1006
  pluginId as p,
991
1007
  releaseApi as r,
992
- useGetReleaseQuery as u
1008
+ useGetReleasesQuery as u
993
1009
  };
994
- //# sourceMappingURL=index-exoiSU3V.mjs.map
1010
+ //# sourceMappingURL=index-DbmynICx.mjs.map