@payloadcms/ui 3.68.0-internal-debug.2eb12b9 → 3.68.0-internal-debug.185cc5f

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 (253) hide show
  1. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +2 -2
  2. package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
  3. package/dist/elements/Autosave/index.js +1 -0
  4. package/dist/elements/Autosave/index.js.map +1 -1
  5. package/dist/elements/BulkUpload/EditMany/index.js +2 -2
  6. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  7. package/dist/elements/BulkUpload/FormsManager/index.js +8 -8
  8. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/index.js +12 -1
  10. package/dist/elements/BulkUpload/index.js.map +1 -1
  11. package/dist/elements/Button/index.js +2 -2
  12. package/dist/elements/Button/index.js.map +1 -1
  13. package/dist/elements/Button/types.js +13 -1
  14. package/dist/elements/Button/types.js.map +1 -1
  15. package/dist/elements/Card/index.js +5 -1
  16. package/dist/elements/Card/index.js.map +1 -1
  17. package/dist/elements/CodeEditor/CodeEditor.js +2 -2
  18. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  19. package/dist/elements/CodeEditor/types.js +3 -1
  20. package/dist/elements/CodeEditor/types.js.map +1 -1
  21. package/dist/elements/Collapsible/index.js +8 -1
  22. package/dist/elements/Collapsible/index.js.map +1 -1
  23. package/dist/elements/Combobox/index.js +6 -0
  24. package/dist/elements/Combobox/index.js.map +1 -1
  25. package/dist/elements/DatePicker/DatePicker.js +1 -0
  26. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  27. package/dist/elements/DatePicker/getFormattedLocale.js +1 -0
  28. package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
  29. package/dist/elements/DeleteMany/index.js +25 -1
  30. package/dist/elements/DeleteMany/index.js.map +1 -1
  31. package/dist/elements/DocumentControls/index.js +1 -1
  32. package/dist/elements/DocumentControls/index.js.map +1 -1
  33. package/dist/elements/DocumentDrawer/Provider.js +5 -1
  34. package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
  35. package/dist/elements/DocumentDrawer/types.js +11 -1
  36. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  37. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +1 -0
  38. package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
  39. package/dist/elements/Drawer/index.js +3 -1
  40. package/dist/elements/Drawer/index.js.map +1 -1
  41. package/dist/elements/EditMany/DrawerContent.js +15 -1
  42. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  43. package/dist/elements/EditMany/index.js +3 -1
  44. package/dist/elements/EditMany/index.js.map +1 -1
  45. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +8 -1
  46. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
  47. package/dist/elements/FolderView/FolderFileCard/index.js +1 -0
  48. package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
  49. package/dist/elements/FolderView/MoveDocToFolder/index.js +2 -3
  50. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
  51. package/dist/elements/HTMLDiff/diff/index.js +24 -3
  52. package/dist/elements/HTMLDiff/diff/index.js.map +1 -1
  53. package/dist/elements/HydrateAuthProvider/index.js +6 -1
  54. package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
  55. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
  56. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  57. package/dist/elements/Link/index.js +5 -1
  58. package/dist/elements/Link/index.js.map +1 -1
  59. package/dist/elements/ListControls/types.js +7 -1
  60. package/dist/elements/ListControls/types.js.map +1 -1
  61. package/dist/elements/ListDrawer/DrawerContent.js +2 -2
  62. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  63. package/dist/elements/ListDrawer/Provider.js +8 -1
  64. package/dist/elements/ListDrawer/Provider.js.map +1 -1
  65. package/dist/elements/ListDrawer/index.js +2 -1
  66. package/dist/elements/ListDrawer/index.js.map +1 -1
  67. package/dist/elements/ListDrawer/types.js +5 -1
  68. package/dist/elements/ListDrawer/types.js.map +1 -1
  69. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +5 -1
  70. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  71. package/dist/elements/ListSelection/index.js +11 -1
  72. package/dist/elements/ListSelection/index.js.map +1 -1
  73. package/dist/elements/LivePreview/Toolbar/Controls/index.js +1 -1
  74. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
  75. package/dist/elements/Logout/index.js +5 -1
  76. package/dist/elements/Logout/index.js.map +1 -1
  77. package/dist/elements/Pill/index.js +5 -2
  78. package/dist/elements/Pill/index.js.map +1 -1
  79. package/dist/elements/PublishMany/index.js +3 -1
  80. package/dist/elements/PublishMany/index.js.map +1 -1
  81. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -2
  82. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  83. package/dist/elements/ReactSelect/index.js +2 -2
  84. package/dist/elements/ReactSelect/index.js.map +1 -1
  85. package/dist/elements/ReactSelect/types.js +8 -1
  86. package/dist/elements/ReactSelect/types.js.map +1 -1
  87. package/dist/elements/RelationshipTable/index.js +2 -2
  88. package/dist/elements/RelationshipTable/index.js.map +1 -1
  89. package/dist/elements/RestoreMany/index.js +1 -0
  90. package/dist/elements/RestoreMany/index.js.map +1 -1
  91. package/dist/elements/SaveButton/index.js +1 -2
  92. package/dist/elements/SaveButton/index.js.map +1 -1
  93. package/dist/elements/SaveDraftButton/index.js +1 -2
  94. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  95. package/dist/elements/SearchFilter/types.js +19 -1
  96. package/dist/elements/SearchFilter/types.js.map +1 -1
  97. package/dist/elements/Status/index.js +2 -2
  98. package/dist/elements/Status/index.js.map +1 -1
  99. package/dist/elements/StepNav/index.js +5 -1
  100. package/dist/elements/StepNav/index.js.map +1 -1
  101. package/dist/elements/Table/DefaultCell/fields/Select/index.js +4 -4
  102. package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
  103. package/dist/elements/Table/DefaultCell/index.js +2 -1
  104. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  105. package/dist/elements/Table/RelationshipProvider/index.js +3 -0
  106. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  107. package/dist/elements/Thumbnail/createThumbnail.js +12 -12
  108. package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
  109. package/dist/elements/Tooltip/index.js +3 -1
  110. package/dist/elements/Tooltip/index.js.map +1 -1
  111. package/dist/elements/UnpublishMany/index.js +3 -1
  112. package/dist/elements/UnpublishMany/index.js.map +1 -1
  113. package/dist/elements/Upload/index.js +8 -8
  114. package/dist/elements/Upload/index.js.map +1 -1
  115. package/dist/elements/WhereBuilder/Condition/Number/index.js +1 -0
  116. package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
  117. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +5 -6
  118. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  119. package/dist/elements/WhereBuilder/Condition/Text/index.js +1 -0
  120. package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
  121. package/dist/elements/WhereBuilder/index.js +2 -2
  122. package/dist/elements/WhereBuilder/index.js.map +1 -1
  123. package/dist/exports/client/index.js +26 -2
  124. package/dist/exports/client/index.js.map +1 -1
  125. package/dist/exports/shared/index.js +2 -1
  126. package/dist/exports/shared/index.js.map +1 -1
  127. package/dist/fields/Blocks/BlockSelector/index.js +3 -1
  128. package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
  129. package/dist/fields/Email/index.js +1 -1
  130. package/dist/fields/Email/index.js.map +1 -1
  131. package/dist/fields/Group/index.js +1 -1
  132. package/dist/fields/Group/index.js.map +1 -1
  133. package/dist/fields/Number/index.js +5 -3
  134. package/dist/fields/Number/index.js.map +1 -1
  135. package/dist/fields/Password/types.js +11 -1
  136. package/dist/fields/Password/types.js.map +1 -1
  137. package/dist/fields/Point/index.js +2 -2
  138. package/dist/fields/Point/index.js.map +1 -1
  139. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +4 -1
  140. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
  141. package/dist/fields/Relationship/select-components/SingleValue/index.js +4 -1
  142. package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
  143. package/dist/fields/Text/index.js +3 -2
  144. package/dist/fields/Text/index.js.map +1 -1
  145. package/dist/fields/Upload/Input.js +3 -1
  146. package/dist/fields/Upload/Input.js.map +1 -1
  147. package/dist/fields/Upload/types.js +1 -0
  148. package/dist/fields/Upload/types.js.map +1 -1
  149. package/dist/fields/shared/index.js +2 -3
  150. package/dist/fields/shared/index.js.map +1 -1
  151. package/dist/forms/Form/fieldReducer.js +2 -1
  152. package/dist/forms/Form/fieldReducer.js.map +1 -1
  153. package/dist/forms/Form/index.js +12 -9
  154. package/dist/forms/Form/index.js.map +1 -1
  155. package/dist/forms/Form/mergeServerFormState.js +11 -3
  156. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  157. package/dist/forms/Form/reduceToSerializableFields.js +2 -2
  158. package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
  159. package/dist/forms/Form/types.js +52 -1
  160. package/dist/forms/Form/types.js.map +1 -1
  161. package/dist/forms/NullifyField/index.js +2 -1
  162. package/dist/forms/NullifyField/index.js.map +1 -1
  163. package/dist/forms/WatchChildErrors/index.js +6 -1
  164. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  165. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +20 -0
  166. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  167. package/dist/forms/fieldSchemasToFormState/index.js +33 -1
  168. package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
  169. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +2 -2
  170. package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
  171. package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
  172. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  173. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -2
  174. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  175. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -1
  176. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
  177. package/dist/forms/fieldSchemasToFormState/types.js +5 -1
  178. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  179. package/dist/forms/useField/index.js +1 -0
  180. package/dist/forms/useField/index.js.map +1 -1
  181. package/dist/forms/useField/types.js +19 -1
  182. package/dist/forms/useField/types.js.map +1 -1
  183. package/dist/hooks/useControllableState.js +9 -1
  184. package/dist/hooks/useControllableState.js.map +1 -1
  185. package/dist/hooks/useDelayedRender.js +3 -1
  186. package/dist/hooks/useDelayedRender.js.map +1 -1
  187. package/dist/hooks/useHotkey.js +2 -2
  188. package/dist/hooks/useHotkey.js.map +1 -1
  189. package/dist/hooks/usePayloadAPI.js +3 -4
  190. package/dist/hooks/usePayloadAPI.js.map +1 -1
  191. package/dist/hooks/usePopupWindow.js +2 -2
  192. package/dist/hooks/usePopupWindow.js.map +1 -1
  193. package/dist/hooks/useQueue.js +15 -7
  194. package/dist/hooks/useQueue.js.map +1 -1
  195. package/dist/hooks/useResize.js +4 -3
  196. package/dist/hooks/useResize.js.map +1 -1
  197. package/dist/providers/Auth/index.js +35 -3
  198. package/dist/providers/Auth/index.js.map +1 -1
  199. package/dist/providers/Config/index.js +10 -1
  200. package/dist/providers/Config/index.js.map +1 -1
  201. package/dist/providers/DocumentInfo/index.js +6 -7
  202. package/dist/providers/DocumentInfo/index.js.map +1 -1
  203. package/dist/providers/DocumentInfo/types.js +25 -1
  204. package/dist/providers/DocumentInfo/types.js.map +1 -1
  205. package/dist/providers/Folders/index.js +44 -2
  206. package/dist/providers/Folders/index.js.map +1 -1
  207. package/dist/providers/ListQuery/types.js +5 -1
  208. package/dist/providers/ListQuery/types.js.map +1 -1
  209. package/dist/providers/LivePreview/context.js +11 -1
  210. package/dist/providers/LivePreview/context.js.map +1 -1
  211. package/dist/providers/LivePreview/index.js +7 -4
  212. package/dist/providers/LivePreview/index.js.map +1 -1
  213. package/dist/providers/Preferences/index.js +7 -2
  214. package/dist/providers/Preferences/index.js.map +1 -1
  215. package/dist/providers/RouteTransition/index.js +9 -9
  216. package/dist/providers/RouteTransition/index.js.map +1 -1
  217. package/dist/providers/Selection/index.js +7 -2
  218. package/dist/providers/Selection/index.js.map +1 -1
  219. package/dist/providers/ServerFunctions/index.js +25 -22
  220. package/dist/providers/ServerFunctions/index.js.map +1 -1
  221. package/dist/providers/TableColumns/buildColumnState/index.js +10 -9
  222. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  223. package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -3
  224. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  225. package/dist/providers/TableColumns/types.js +17 -1
  226. package/dist/providers/TableColumns/types.js.map +1 -1
  227. package/dist/utilities/abortAndIgnore.js +4 -6
  228. package/dist/utilities/abortAndIgnore.js.map +1 -1
  229. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +2 -2
  230. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  231. package/dist/utilities/copyDataFromLocale.js +6 -2
  232. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  233. package/dist/utilities/getDisplayedFieldValue.js +8 -8
  234. package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
  235. package/dist/utilities/getFolderResultsComponentAndData.js +2 -1
  236. package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
  237. package/dist/utilities/handleFormStateLocking.js +2 -2
  238. package/dist/utilities/handleFormStateLocking.js.map +1 -1
  239. package/dist/utilities/hasSavePermission.js +5 -1
  240. package/dist/utilities/hasSavePermission.js.map +1 -1
  241. package/dist/utilities/isURLAllowed.js +6 -6
  242. package/dist/utilities/isURLAllowed.js.map +1 -1
  243. package/dist/utilities/renderTable.js +2 -1
  244. package/dist/utilities/renderTable.js.map +1 -1
  245. package/dist/utilities/schedulePublishHandler.js +3 -1
  246. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  247. package/dist/utilities/upsertPreferences.js +1 -0
  248. package/dist/utilities/upsertPreferences.js.map +1 -1
  249. package/dist/views/Edit/index.js +7 -7
  250. package/dist/views/Edit/index.js.map +1 -1
  251. package/dist/views/List/ListHeader/index.js +6 -1
  252. package/dist/views/List/ListHeader/index.js.map +1 -1
  253. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/CodeEditor/CodeEditor.tsx"],"sourcesContent":["'use client'\nimport EditorImport from '@monaco-editor/react'\nimport React, { useState } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTheme } from '../../providers/Theme/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\nimport { defaultGlobalEditorOptions, defaultOptions } from './constants.js'\nimport './index.scss'\n\nconst Editor = 'default' in EditorImport ? EditorImport.default : EditorImport\n\nconst baseClass = 'code-editor'\n\nconst CodeEditor: React.FC<Props> = (props) => {\n const {\n className,\n maxHeight,\n minHeight,\n options,\n readOnly,\n recalculatedHeightAt,\n value,\n ...rest\n } = props\n const MIN_HEIGHT = minHeight ?? 56 // equivalent to 3 lines\n const prevCalculatedHeightAt = React.useRef<number | undefined>(recalculatedHeightAt)\n\n // Extract per-model settings to avoid global conflicts\n const { insertSpaces, tabSize, trimAutoWhitespace, ...globalEditorOptions } = options || {}\n const paddingFromProps = options?.padding\n ? (options.padding.top || 0) + (options.padding?.bottom || 0)\n : 0\n\n const [dynamicHeight, setDynamicHeight] = useState(MIN_HEIGHT)\n const { theme } = useTheme()\n\n const classes = [\n baseClass,\n className,\n rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : '',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')\n\n React.useEffect(() => {\n if (recalculatedHeightAt && recalculatedHeightAt > prevCalculatedHeightAt.current) {\n setDynamicHeight(\n value\n ? Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2 + paddingFromProps)\n : MIN_HEIGHT,\n )\n prevCalculatedHeightAt.current = recalculatedHeightAt\n }\n }, [value, MIN_HEIGHT, paddingFromProps, recalculatedHeightAt])\n\n return (\n <Editor\n className={classes}\n height={maxHeight ? Math.min(dynamicHeight, maxHeight) : dynamicHeight}\n loading={<ShimmerEffect height={dynamicHeight} />}\n options={{\n ...defaultGlobalEditorOptions,\n ...globalEditorOptions,\n readOnly: Boolean(readOnly),\n /**\n * onMount the model will set:\n * - insertSpaces\n * - tabSize\n * - trimAutoWhitespace\n */\n detectIndentation: false,\n insertSpaces: undefined,\n tabSize: undefined,\n trimAutoWhitespace: undefined,\n }}\n theme={theme === 'dark' ? 'vs-dark' : 'vs'}\n value={value}\n {...rest}\n // Since we are not building an IDE and the container\n // can already have scrolling, we want the height of the\n // editor to fit its content.\n // See: https://github.com/microsoft/monaco-editor/discussions/3677\n onChange={(value, ev) => {\n rest.onChange?.(value, ev)\n setDynamicHeight(\n value\n ? Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2 + paddingFromProps)\n : MIN_HEIGHT,\n )\n }}\n onMount={(editor, monaco) => {\n rest.onMount?.(editor, monaco)\n\n // Set per-model options to avoid global conflicts\n const model = editor.getModel()\n if (model) {\n model.updateOptions({\n insertSpaces: insertSpaces ?? defaultOptions.insertSpaces,\n tabSize: tabSize ?? defaultOptions.tabSize,\n trimAutoWhitespace: trimAutoWhitespace ?? defaultOptions.trimAutoWhitespace,\n })\n }\n\n setDynamicHeight(\n Math.max(MIN_HEIGHT, editor.getValue().split('\\n').length * 18 + 2 + paddingFromProps),\n )\n }}\n />\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default CodeEditor\n"],"names":["EditorImport","React","useState","useTheme","ShimmerEffect","defaultGlobalEditorOptions","defaultOptions","Editor","default","baseClass","CodeEditor","props","className","maxHeight","minHeight","options","readOnly","recalculatedHeightAt","value","rest","MIN_HEIGHT","prevCalculatedHeightAt","useRef","insertSpaces","tabSize","trimAutoWhitespace","globalEditorOptions","paddingFromProps","padding","top","bottom","dynamicHeight","setDynamicHeight","theme","classes","defaultLanguage","filter","Boolean","join","useEffect","current","Math","max","split","length","height","min","loading","detectIndentation","undefined","onChange","ev","onMount","editor","monaco","model","getModel","updateOptions","getValue"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/CodeEditor/CodeEditor.tsx"],"sourcesContent":["'use client'\nimport EditorImport from '@monaco-editor/react'\nimport React, { useState } from 'react'\n\nimport type { Props } from './types.js'\n\nimport { useTheme } from '../../providers/Theme/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\nimport { defaultGlobalEditorOptions, defaultOptions } from './constants.js'\nimport './index.scss'\n\nconst Editor = 'default' in EditorImport ? EditorImport.default : EditorImport\n\nconst baseClass = 'code-editor'\n\nconst CodeEditor: React.FC<Props> = (props) => {\n const {\n className,\n maxHeight,\n minHeight,\n options,\n readOnly,\n recalculatedHeightAt,\n value,\n ...rest\n } = props\n const MIN_HEIGHT = minHeight ?? 56 // equivalent to 3 lines\n const prevCalculatedHeightAt = React.useRef<number | undefined>(recalculatedHeightAt)\n\n // Extract per-model settings to avoid global conflicts\n const { insertSpaces, tabSize, trimAutoWhitespace, ...globalEditorOptions } = options || {}\n const paddingFromProps = options?.padding\n ? (options.padding.top || 0) + (options.padding?.bottom || 0)\n : 0\n\n const [dynamicHeight, setDynamicHeight] = useState(MIN_HEIGHT)\n const { theme } = useTheme()\n\n const classes = [\n baseClass,\n className,\n rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : '',\n readOnly && 'read-only',\n ]\n .filter(Boolean)\n .join(' ')\n\n React.useEffect(() => {\n if (recalculatedHeightAt && recalculatedHeightAt > prevCalculatedHeightAt.current) {\n setDynamicHeight(\n value\n ? Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2 + paddingFromProps)\n : MIN_HEIGHT,\n )\n prevCalculatedHeightAt.current = recalculatedHeightAt\n }\n }, [value, MIN_HEIGHT, paddingFromProps, recalculatedHeightAt])\n\n return (\n <Editor\n className={classes}\n height={maxHeight ? Math.min(dynamicHeight, maxHeight) : dynamicHeight}\n loading={<ShimmerEffect height={dynamicHeight} />}\n options={{\n ...defaultGlobalEditorOptions,\n ...globalEditorOptions,\n readOnly: Boolean(readOnly),\n /**\n * onMount the model will set:\n * - insertSpaces\n * - tabSize\n * - trimAutoWhitespace\n */\n detectIndentation: false,\n insertSpaces: undefined,\n tabSize: undefined,\n trimAutoWhitespace: undefined,\n }}\n theme={theme === 'dark' ? 'vs-dark' : 'vs'}\n value={value}\n {...rest}\n // Since we are not building an IDE and the container\n // can already have scrolling, we want the height of the\n // editor to fit its content.\n // See: https://github.com/microsoft/monaco-editor/discussions/3677\n onChange={(value, ev) => {\n rest.onChange?.(value, ev)\n setDynamicHeight(\n value\n ? Math.max(MIN_HEIGHT, value.split('\\n').length * 18 + 2 + paddingFromProps)\n : MIN_HEIGHT,\n )\n }}\n onMount={(editor, monaco) => {\n rest.onMount?.(editor, monaco)\n\n // Set per-model options to avoid global conflicts\n const model = editor.getModel()\n if (model) {\n model.updateOptions({\n insertSpaces: insertSpaces ?? defaultOptions.insertSpaces,\n tabSize: tabSize ?? defaultOptions.tabSize,\n trimAutoWhitespace: trimAutoWhitespace ?? defaultOptions.trimAutoWhitespace,\n })\n }\n\n setDynamicHeight(\n Math.max(MIN_HEIGHT, editor.getValue().split('\\n').length * 18 + 2 + paddingFromProps),\n )\n }}\n />\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default CodeEditor\n"],"names":["EditorImport","React","useState","useTheme","ShimmerEffect","defaultGlobalEditorOptions","defaultOptions","Editor","default","baseClass","CodeEditor","props","className","maxHeight","minHeight","options","readOnly","recalculatedHeightAt","value","rest","MIN_HEIGHT","prevCalculatedHeightAt","useRef","insertSpaces","tabSize","trimAutoWhitespace","globalEditorOptions","paddingFromProps","padding","top","bottom","dynamicHeight","setDynamicHeight","theme","classes","defaultLanguage","filter","Boolean","join","useEffect","current","Math","max","split","length","height","min","loading","detectIndentation","undefined","onChange","ev","onMount","editor","monaco","model","getModel","updateOptions","getValue"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
- export { };
1
+ export { }; /**
2
+ * @default 56 (3 lines)
3
+ */
2
4
 
3
5
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/CodeEditor/types.ts"],"sourcesContent":["import type { EditorProps } from '@monaco-editor/react'\n\nexport type Props = {\n maxHeight?: number\n /**\n * @default 56 (3 lines)\n */\n minHeight?: number\n readOnly?: boolean\n recalculatedHeightAt?: number\n} & EditorProps\n"],"names":[],"mappings":"AAEA,WAQe"}
1
+ {"version":3,"sources":["../../../src/elements/CodeEditor/types.ts"],"sourcesContent":["import type { EditorProps } from '@monaco-editor/react'\n\nexport type Props = {\n maxHeight?: number\n /**\n * @default 56 (3 lines)\n */\n minHeight?: number\n readOnly?: boolean\n recalculatedHeightAt?: number\n} & EditorProps\n"],"names":[],"mappings":"AAEA,WAQe,CANb;;GAEC"}
@@ -9,7 +9,14 @@ import { AnimateHeight } from '../AnimateHeight/index.js';
9
9
  import { CollapsibleProvider, useCollapsible } from './provider.js';
10
10
  const baseClass = 'collapsible';
11
11
  export { CollapsibleProvider, useCollapsible };
12
- export const Collapsible = ({ actions, AfterCollapsible, children, className, collapsibleStyle = 'default', disableHeaderToggle = false, disableToggleIndicator = false, dragHandleProps, header, initCollapsed, isCollapsed: collapsedFromProps, onToggle })=>{
12
+ /**
13
+ * Components that will be rendered within the collapsible provider but after the wrapper.
14
+ */ /**
15
+ * If set to true, clicking on the collapsible header will not toggle the collapsible state.
16
+ * This is useful if the collapsible state is controlled externally (e.g. from a parent component or custom button).
17
+ */ /**
18
+ * If set to true, the toggle indicator (chevron) on the right side of the header will be hidden.
19
+ */ export const Collapsible = ({ actions, AfterCollapsible, children, className, collapsibleStyle = 'default', disableHeaderToggle = false, disableToggleIndicator = false, dragHandleProps, header, initCollapsed, isCollapsed: collapsedFromProps, onToggle })=>{
13
20
  const [collapsedLocal, setCollapsedLocal] = useState(Boolean(initCollapsed));
14
21
  const [hoveringToggle, setHoveringToggle] = useState(false);
15
22
  const { isWithinCollapsible } = useCollapsible();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Collapsible/index.tsx"],"sourcesContent":["'use client'\nimport React, { useState } from 'react'\n\nimport type { DragHandleProps } from '../DraggableSortable/DraggableSortableItem/types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { DragHandleIcon } from '../../icons/DragHandle/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { CollapsibleProvider, useCollapsible } from './provider.js'\n\nconst baseClass = 'collapsible'\n\nexport { CollapsibleProvider, useCollapsible }\n\nexport type CollapsibleProps = {\n actions?: React.ReactNode\n /**\n * Components that will be rendered within the collapsible provider but after the wrapper.\n */\n AfterCollapsible?: React.ReactNode\n children: React.ReactNode\n className?: string\n collapsibleStyle?: 'default' | 'error'\n /**\n * If set to true, clicking on the collapsible header will not toggle the collapsible state.\n * This is useful if the collapsible state is controlled externally (e.g. from a parent component or custom button).\n */\n disableHeaderToggle?: boolean\n /**\n * If set to true, the toggle indicator (chevron) on the right side of the header will be hidden.\n */\n disableToggleIndicator?: boolean\n dragHandleProps?: DragHandleProps\n header?: React.ReactNode\n initCollapsed?: boolean\n isCollapsed?: boolean\n onToggle?: (collapsed: boolean) => Promise<void> | void\n}\n\nexport const Collapsible: React.FC<CollapsibleProps> = ({\n actions,\n AfterCollapsible,\n children,\n className,\n collapsibleStyle = 'default',\n disableHeaderToggle = false,\n disableToggleIndicator = false,\n dragHandleProps,\n header,\n initCollapsed,\n isCollapsed: collapsedFromProps,\n onToggle,\n}) => {\n const [collapsedLocal, setCollapsedLocal] = useState(Boolean(initCollapsed))\n const [hoveringToggle, setHoveringToggle] = useState(false)\n const { isWithinCollapsible } = useCollapsible()\n const { t } = useTranslation()\n\n const isCollapsed = typeof collapsedFromProps === 'boolean' ? collapsedFromProps : collapsedLocal\n\n const toggleCollapsible = React.useCallback(() => {\n if (typeof onToggle === 'function') {\n void onToggle(!isCollapsed)\n }\n setCollapsedLocal(!isCollapsed)\n }, [onToggle, isCollapsed])\n\n return (\n <div\n className={[\n baseClass,\n className,\n dragHandleProps && `${baseClass}--has-drag-handle`,\n isCollapsed && `${baseClass}--collapsed`,\n isWithinCollapsible && `${baseClass}--nested`,\n hoveringToggle && !disableHeaderToggle && `${baseClass}--hovered`,\n `${baseClass}--style-${collapsibleStyle}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <CollapsibleProvider isCollapsed={isCollapsed} toggle={toggleCollapsible}>\n <div\n className={`${baseClass}__toggle-wrap${disableHeaderToggle ? ' toggle-disabled' : ''}`}\n onMouseEnter={() => setHoveringToggle(true)}\n onMouseLeave={() => setHoveringToggle(false)}\n >\n {!disableHeaderToggle && (\n <button\n className={[\n `${baseClass}__toggle`,\n `${baseClass}__toggle--${isCollapsed ? 'collapsed' : 'open'}`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={toggleCollapsible}\n type=\"button\"\n >\n <span>{t('fields:toggleBlock')}</span>\n </button>\n )}\n\n {dragHandleProps && (\n <div\n className={`${baseClass}__drag`}\n {...dragHandleProps.attributes}\n {...dragHandleProps.listeners}\n >\n <DragHandleIcon />\n </div>\n )}\n {header ? (\n <div\n className={[\n `${baseClass}__header-wrap`,\n dragHandleProps && `${baseClass}__header-wrap--has-drag-handle`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {header}\n </div>\n ) : null}\n <div className={`${baseClass}__actions-wrap`}>\n {actions ? <div className={`${baseClass}__actions`}>{actions}</div> : null}\n {!disableToggleIndicator && (\n <div className={`${baseClass}__indicator`}>\n <ChevronIcon direction={!isCollapsed ? 'up' : undefined} />\n </div>\n )}\n </div>\n </div>\n <AnimateHeight height={isCollapsed ? 0 : 'auto'}>\n <div className={`${baseClass}__content`}>{children}</div>\n </AnimateHeight>\n {AfterCollapsible}\n </CollapsibleProvider>\n </div>\n )\n}\n"],"names":["React","useState","ChevronIcon","DragHandleIcon","useTranslation","AnimateHeight","CollapsibleProvider","useCollapsible","baseClass","Collapsible","actions","AfterCollapsible","children","className","collapsibleStyle","disableHeaderToggle","disableToggleIndicator","dragHandleProps","header","initCollapsed","isCollapsed","collapsedFromProps","onToggle","collapsedLocal","setCollapsedLocal","Boolean","hoveringToggle","setHoveringToggle","isWithinCollapsible","t","toggleCollapsible","useCallback","div","filter","join","toggle","onMouseEnter","onMouseLeave","button","onClick","type","span","attributes","listeners","direction","undefined","height"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/Collapsible/index.tsx"],"sourcesContent":["'use client'\nimport React, { useState } from 'react'\n\nimport type { DragHandleProps } from '../DraggableSortable/DraggableSortableItem/types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { DragHandleIcon } from '../../icons/DragHandle/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\nimport { AnimateHeight } from '../AnimateHeight/index.js'\nimport { CollapsibleProvider, useCollapsible } from './provider.js'\n\nconst baseClass = 'collapsible'\n\nexport { CollapsibleProvider, useCollapsible }\n\nexport type CollapsibleProps = {\n actions?: React.ReactNode\n /**\n * Components that will be rendered within the collapsible provider but after the wrapper.\n */\n AfterCollapsible?: React.ReactNode\n children: React.ReactNode\n className?: string\n collapsibleStyle?: 'default' | 'error'\n /**\n * If set to true, clicking on the collapsible header will not toggle the collapsible state.\n * This is useful if the collapsible state is controlled externally (e.g. from a parent component or custom button).\n */\n disableHeaderToggle?: boolean\n /**\n * If set to true, the toggle indicator (chevron) on the right side of the header will be hidden.\n */\n disableToggleIndicator?: boolean\n dragHandleProps?: DragHandleProps\n header?: React.ReactNode\n initCollapsed?: boolean\n isCollapsed?: boolean\n onToggle?: (collapsed: boolean) => Promise<void> | void\n}\n\nexport const Collapsible: React.FC<CollapsibleProps> = ({\n actions,\n AfterCollapsible,\n children,\n className,\n collapsibleStyle = 'default',\n disableHeaderToggle = false,\n disableToggleIndicator = false,\n dragHandleProps,\n header,\n initCollapsed,\n isCollapsed: collapsedFromProps,\n onToggle,\n}) => {\n const [collapsedLocal, setCollapsedLocal] = useState(Boolean(initCollapsed))\n const [hoveringToggle, setHoveringToggle] = useState(false)\n const { isWithinCollapsible } = useCollapsible()\n const { t } = useTranslation()\n\n const isCollapsed = typeof collapsedFromProps === 'boolean' ? collapsedFromProps : collapsedLocal\n\n const toggleCollapsible = React.useCallback(() => {\n if (typeof onToggle === 'function') {\n void onToggle(!isCollapsed)\n }\n setCollapsedLocal(!isCollapsed)\n }, [onToggle, isCollapsed])\n\n return (\n <div\n className={[\n baseClass,\n className,\n dragHandleProps && `${baseClass}--has-drag-handle`,\n isCollapsed && `${baseClass}--collapsed`,\n isWithinCollapsible && `${baseClass}--nested`,\n hoveringToggle && !disableHeaderToggle && `${baseClass}--hovered`,\n `${baseClass}--style-${collapsibleStyle}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <CollapsibleProvider isCollapsed={isCollapsed} toggle={toggleCollapsible}>\n <div\n className={`${baseClass}__toggle-wrap${disableHeaderToggle ? ' toggle-disabled' : ''}`}\n onMouseEnter={() => setHoveringToggle(true)}\n onMouseLeave={() => setHoveringToggle(false)}\n >\n {!disableHeaderToggle && (\n <button\n className={[\n `${baseClass}__toggle`,\n `${baseClass}__toggle--${isCollapsed ? 'collapsed' : 'open'}`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={toggleCollapsible}\n type=\"button\"\n >\n <span>{t('fields:toggleBlock')}</span>\n </button>\n )}\n\n {dragHandleProps && (\n <div\n className={`${baseClass}__drag`}\n {...dragHandleProps.attributes}\n {...dragHandleProps.listeners}\n >\n <DragHandleIcon />\n </div>\n )}\n {header ? (\n <div\n className={[\n `${baseClass}__header-wrap`,\n dragHandleProps && `${baseClass}__header-wrap--has-drag-handle`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {header}\n </div>\n ) : null}\n <div className={`${baseClass}__actions-wrap`}>\n {actions ? <div className={`${baseClass}__actions`}>{actions}</div> : null}\n {!disableToggleIndicator && (\n <div className={`${baseClass}__indicator`}>\n <ChevronIcon direction={!isCollapsed ? 'up' : undefined} />\n </div>\n )}\n </div>\n </div>\n <AnimateHeight height={isCollapsed ? 0 : 'auto'}>\n <div className={`${baseClass}__content`}>{children}</div>\n </AnimateHeight>\n {AfterCollapsible}\n </CollapsibleProvider>\n </div>\n )\n}\n"],"names":["React","useState","ChevronIcon","DragHandleIcon","useTranslation","AnimateHeight","CollapsibleProvider","useCollapsible","baseClass","Collapsible","actions","AfterCollapsible","children","className","collapsibleStyle","disableHeaderToggle","disableToggleIndicator","dragHandleProps","header","initCollapsed","isCollapsed","collapsedFromProps","onToggle","collapsedLocal","setCollapsedLocal","Boolean","hoveringToggle","setHoveringToggle","isWithinCollapsible","t","toggleCollapsible","useCallback","div","filter","join","toggle","onMouseEnter","onMouseLeave","button","onClick","type","span","attributes","listeners","direction","undefined","height"],"mappings":"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"}
@@ -5,6 +5,12 @@ import { Popup, PopupList } from '../Popup/index.js';
5
5
  import './index.scss';
6
6
  const baseClass = 'combobox';
7
7
  /**
8
+ * @internal
9
+ * @experimental
10
+ */ /**
11
+ * @internal
12
+ * @experimental
13
+ */ /** Minimum number of entries required to show search */ /**
8
14
  * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.
9
15
  *
10
16
  * @internal - this component may be removed or receive breaking changes in minor releases.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","className","render","close","div","input","aria-label","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"mappings":"AAAA;;AACA,OAAOA,SAASC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAIxD,SAASC,KAAK,EAAEC,SAAS,QAAQ,oBAAmB;AACpD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAuBlB;;;;;CAKC,GACD,OAAO,MAAMC,WAAoC,CAACC;IAChD,MAAM,EACJC,OAAO,EACPC,sBAAsB,CAAC,EACvBC,QAAQ,EACRC,aAAa,EACbC,YAAY,EACZC,oBAAoB,WAAW,EAC/B,GAAGC,YACJ,GAAGP;IACJ,MAAM,CAACQ,aAAaC,eAAe,GAAGd,SAAS;IAC/C,MAAMe,YAAYhB,OAAO;IACzB,MAAMiB,iBAAiBjB,OAAyB;IAEhD,MAAMkB,kBAAkBnB,QAAQ;QAC9B,IAAI,CAACe,aAAa;YAChB,OAAOP;QACT;QACA,MAAMY,SAASL,YAAYM,WAAW;QACtC,OAAOb,QAAQc,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,CAACH,WAAW,GAAGI,QAAQ,CAACL;IACrE,GAAG;QAACZ;QAASO;KAAY;IAEzB,MAAMW,aAAalB,QAAQmB,MAAM,IAAIlB;IACrC,MAAMmB,aAAaT,gBAAgBQ,MAAM,GAAG;IAE5C,MAAME,mBAAmB9B,MAAM+B,WAAW,CACxC,CAACC;QACCd,UAAUe,OAAO,GAAGD;QACpB,IAAIA,UAAUL,YAAY;YACxBO,WAAW;gBACTf,eAAec,OAAO,EAAEE;YAC1B,GAAG;QACL;QACAtB,eAAemB;IACjB,GACA;QAACL;QAAYd;KAAa;IAG5B,MAAMuB,oBAAoBpC,MAAM+B,WAAW,CAAC;QAC1Cb,UAAUe,OAAO,GAAG;QACpBhB,eAAe;QACfL;IACF,GAAG;QAACA;KAAc;IAElB,qBACE,KAACR;QACE,GAAGW,UAAU;QACdsB,WAAW,GAAG/B,UAAU,CAAC,EAAES,WAAWsB,SAAS,IAAI,IAAI;QACvDzB,eAAewB;QACfvB,cAAciB;QACdQ,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,MAACC;gBAAIH,WAAW,GAAG/B,UAAU,SAAS,CAAC;;oBACpCqB,4BACC,KAACa;wBACCH,WAAW,GAAG/B,UAAU,gBAAgB,EAAE,CAACuB,aAAa,CAAC,CAAC,EAAEvB,UAAU,4BAA4B,CAAC,GAAG,IAAI;kCAE1G,cAAA,KAACmC;4BACCC,cAAY5B;4BACZuB,WAAW,GAAG/B,UAAU,cAAc,CAAC;4BACvCqC,UAAU,CAACC,IAAM3B,eAAe2B,EAAEC,MAAM,CAACC,KAAK;4BAC9CC,aAAajC;4BACbkC,KAAK7B;4BACL8B,MAAK;4BACLH,OAAO9B;;;kCAIb,KAACX,UAAU6C,WAAW;kCACnB9B,gBAAgB+B,GAAG,CAAC,CAAC3B,OAAO4B;4BAC3B,MAAMC,cAAc;gCAClB,IAAI1C,UAAU;oCACZA,SAASa;gCACX;gCACAe;4BACF;4BAEA,qBACE,KAACC;gCACCH,WAAW,GAAG/B,UAAU,OAAO,CAAC;gCAEhCgD,SAASD;gCACTE,WAAW,CAACX;oCACV,IAAIA,EAAEY,GAAG,KAAK,WAAWZ,EAAEY,GAAG,KAAK,KAAK;wCACtCZ,EAAEa,cAAc;wCAChBJ;oCACF;gCACF;gCACAK,MAAK;gCACLC,UAAU;0CAETnC,MAAMoC,SAAS;+BAXX,GAAGpC,MAAMC,IAAI,CAAC,CAAC,EAAE2B,OAAO;wBAcnC;;;;;AAMZ,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","className","render","close","div","input","aria-label","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"mappings":"AAAA;;AACA,OAAOA,SAASC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAIxD,SAASC,KAAK,EAAEC,SAAS,QAAQ,oBAAmB;AACpD,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB;;;CAGC,GAMD;;;CAGC,GAGC,sDAAsD,GAMxD;;;;;CAKC,GACD,OAAO,MAAMC,WAAoC,CAACC;IAChD,MAAM,EACJC,OAAO,EACPC,sBAAsB,CAAC,EACvBC,QAAQ,EACRC,aAAa,EACbC,YAAY,EACZC,oBAAoB,WAAW,EAC/B,GAAGC,YACJ,GAAGP;IACJ,MAAM,CAACQ,aAAaC,eAAe,GAAGd,SAAS;IAC/C,MAAMe,YAAYhB,OAAO;IACzB,MAAMiB,iBAAiBjB,OAAyB;IAEhD,MAAMkB,kBAAkBnB,QAAQ;QAC9B,IAAI,CAACe,aAAa;YAChB,OAAOP;QACT;QACA,MAAMY,SAASL,YAAYM,WAAW;QACtC,OAAOb,QAAQc,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,CAACH,WAAW,GAAGI,QAAQ,CAACL;IACrE,GAAG;QAACZ;QAASO;KAAY;IAEzB,MAAMW,aAAalB,QAAQmB,MAAM,IAAIlB;IACrC,MAAMmB,aAAaT,gBAAgBQ,MAAM,GAAG;IAE5C,MAAME,mBAAmB9B,MAAM+B,WAAW,CACxC,CAACC;QACCd,UAAUe,OAAO,GAAGD;QACpB,IAAIA,UAAUL,YAAY;YACxBO,WAAW;gBACTf,eAAec,OAAO,EAAEE;YAC1B,GAAG;QACL;QACAtB,eAAemB;IACjB,GACA;QAACL;QAAYd;KAAa;IAG5B,MAAMuB,oBAAoBpC,MAAM+B,WAAW,CAAC;QAC1Cb,UAAUe,OAAO,GAAG;QACpBhB,eAAe;QACfL;IACF,GAAG;QAACA;KAAc;IAElB,qBACE,KAACR;QACE,GAAGW,UAAU;QACdsB,WAAW,GAAG/B,UAAU,CAAC,EAAES,WAAWsB,SAAS,IAAI,IAAI;QACvDzB,eAAewB;QACfvB,cAAciB;QACdQ,QAAQ,CAAC,EAAEC,KAAK,EAAE,iBAChB,MAACC;gBAAIH,WAAW,GAAG/B,UAAU,SAAS,CAAC;;oBACpCqB,4BACC,KAACa;wBACCH,WAAW,GAAG/B,UAAU,gBAAgB,EAAE,CAACuB,aAAa,CAAC,CAAC,EAAEvB,UAAU,4BAA4B,CAAC,GAAG,IAAI;kCAE1G,cAAA,KAACmC;4BACCC,cAAY5B;4BACZuB,WAAW,GAAG/B,UAAU,cAAc,CAAC;4BACvCqC,UAAU,CAACC,IAAM3B,eAAe2B,EAAEC,MAAM,CAACC,KAAK;4BAC9CC,aAAajC;4BACbkC,KAAK7B;4BACL8B,MAAK;4BACLH,OAAO9B;;;kCAIb,KAACX,UAAU6C,WAAW;kCACnB9B,gBAAgB+B,GAAG,CAAC,CAAC3B,OAAO4B;4BAC3B,MAAMC,cAAc;gCAClB,IAAI1C,UAAU;oCACZA,SAASa;gCACX;gCACAe;4BACF;4BAEA,qBACE,KAACC;gCACCH,WAAW,GAAG/B,UAAU,OAAO,CAAC;gCAEhCgD,SAASD;gCACTE,WAAW,CAACX;oCACV,IAAIA,EAAEY,GAAG,KAAK,WAAWZ,EAAEY,GAAG,KAAK,KAAK;wCACtCZ,EAAEa,cAAc;wCAChBJ;oCACF;gCACF;gCACAK,MAAK;gCACLC,UAAU;0CAETnC,MAAMoC,SAAS;+BAXX,GAAGpC,MAAMC,IAAI,CAAC,CAAC,EAAE2B,OAAO;wBAcnC;;;;;AAMZ,EAAC"}
@@ -68,6 +68,7 @@ const DatePicker = (props)=>{
68
68
  timeIntervals,
69
69
  ...overrides
70
70
  };
71
+ // to satisfy TypeScript. Overrides can enable selectsMultiple or selectsRange but then it's up to the user to ensure they pass in the correct onChange
71
72
  const classes = [
72
73
  baseClass,
73
74
  `${baseClass}__appearance--${pickerAppearance}`
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client'\nimport type { DatePickerProps } from 'react-datepicker'\n\nimport React from 'react'\nimport ReactDatePickerDefaultImport, { registerLocale, setDefaultLocale } from 'react-datepicker'\nconst ReactDatePicker =\n 'default' in ReactDatePickerDefaultImport\n ? ReactDatePickerDefaultImport.default\n : ReactDatePickerDefaultImport\n\nimport type { Props } from './types.js'\n\nimport { CalendarIcon } from '../../icons/Calendar/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './library.scss'\nimport './index.scss'\nimport { getFormattedLocale } from './getFormattedLocale.js'\n\nconst baseClass = 'date-time-picker'\n\nconst DatePicker: React.FC<Props> = (props) => {\n const {\n id,\n displayFormat: customDisplayFormat,\n maxDate,\n maxTime,\n minDate,\n minTime,\n monthsToShow = 1,\n onChange: onChangeFromProps,\n overrides,\n pickerAppearance = 'default',\n placeholder: placeholderText,\n readOnly,\n timeFormat = 'h:mm aa',\n timeIntervals = 30,\n value,\n } = props\n\n // Use the user's AdminUI language preference for the locale\n const { i18n } = useTranslation()\n\n let dateFormat = customDisplayFormat\n\n if (!customDisplayFormat) {\n // when no displayFormat is provided, determine format based on the picker appearance\n if (pickerAppearance === 'default') {\n dateFormat = 'MM/dd/yyyy'\n } else if (pickerAppearance === 'dayAndTime') {\n dateFormat = 'MMM d, yyy h:mm a'\n } else if (pickerAppearance === 'timeOnly') {\n dateFormat = 'h:mm a'\n } else if (pickerAppearance === 'dayOnly') {\n dateFormat = 'MMM dd'\n } else if (pickerAppearance === 'monthOnly') {\n dateFormat = 'MMMM'\n }\n }\n\n const onChange: Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never }\n >['onChange'] = (incomingDate) => {\n const newDate = incomingDate\n if (newDate instanceof Date && ['dayOnly', 'default', 'monthOnly'].includes(pickerAppearance)) {\n const tzOffset = incomingDate.getTimezoneOffset() / 60\n newDate.setHours(12 - tzOffset, 0)\n }\n\n if (newDate instanceof Date && !dateFormat.includes('SSS')) {\n // Unless the dateFormat includes milliseconds, set milliseconds to 0\n // This is to ensure that the timestamp is consistent with the displayFormat\n newDate.setMilliseconds(0)\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newDate)\n }\n }\n\n const dateTimePickerProps: Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never }\n > = {\n customInputRef: 'ref',\n dateFormat,\n disabled: readOnly,\n maxDate,\n maxTime,\n minDate,\n minTime,\n monthsShown: Math.min(2, monthsToShow),\n onChange,\n placeholderText,\n popperPlacement: 'bottom-start',\n selected: value && new Date(value),\n showMonthYearPicker: pickerAppearance === 'monthOnly',\n showPopperArrow: false,\n showTimeSelect: pickerAppearance === 'dayAndTime' || pickerAppearance === 'timeOnly',\n timeFormat,\n timeIntervals,\n ...(overrides as Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never } // to satisfy TypeScript. Overrides can enable selectsMultiple or selectsRange but then it's up to the user to ensure they pass in the correct onChange\n >),\n }\n\n const classes = [baseClass, `${baseClass}__appearance--${pickerAppearance}`]\n .filter(Boolean)\n .join(' ')\n\n React.useEffect(() => {\n if (i18n.dateFNS) {\n try {\n const datepickerLocale = getFormattedLocale(i18n.language)\n registerLocale(datepickerLocale, i18n.dateFNS)\n setDefaultLocale(datepickerLocale)\n } catch (e) {\n console.warn(`Could not find DatePicker locale for ${i18n.language}`)\n }\n }\n }, [i18n.language, i18n.dateFNS])\n\n return (\n <div className={classes} id={id}>\n <div className={`${baseClass}__icon-wrap`}>\n {dateTimePickerProps.selected && (\n <button\n className={`${baseClass}__clear-button`}\n onClick={() => onChange(null)}\n type=\"button\"\n >\n <XIcon />\n </button>\n )}\n <CalendarIcon />\n </div>\n <div className={`${baseClass}__input-wrapper`}>\n <ReactDatePicker\n {...dateTimePickerProps}\n dropdownMode=\"select\"\n showMonthDropdown\n showYearDropdown\n />\n </div>\n </div>\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default DatePicker\n"],"names":["React","ReactDatePickerDefaultImport","registerLocale","setDefaultLocale","ReactDatePicker","default","CalendarIcon","XIcon","useTranslation","getFormattedLocale","baseClass","DatePicker","props","id","displayFormat","customDisplayFormat","maxDate","maxTime","minDate","minTime","monthsToShow","onChange","onChangeFromProps","overrides","pickerAppearance","placeholder","placeholderText","readOnly","timeFormat","timeIntervals","value","i18n","dateFormat","incomingDate","newDate","Date","includes","tzOffset","getTimezoneOffset","setHours","setMilliseconds","dateTimePickerProps","customInputRef","disabled","monthsShown","Math","min","popperPlacement","selected","showMonthYearPicker","showPopperArrow","showTimeSelect","classes","filter","Boolean","join","useEffect","dateFNS","datepickerLocale","language","e","console","warn","div","className","button","onClick","type","dropdownMode","showMonthDropdown","showYearDropdown"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DatePicker/DatePicker.tsx"],"sourcesContent":["'use client'\nimport type { DatePickerProps } from 'react-datepicker'\n\nimport React from 'react'\nimport ReactDatePickerDefaultImport, { registerLocale, setDefaultLocale } from 'react-datepicker'\nconst ReactDatePicker =\n 'default' in ReactDatePickerDefaultImport\n ? ReactDatePickerDefaultImport.default\n : ReactDatePickerDefaultImport\n\nimport type { Props } from './types.js'\n\nimport { CalendarIcon } from '../../icons/Calendar/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './library.scss'\nimport './index.scss'\nimport { getFormattedLocale } from './getFormattedLocale.js'\n\nconst baseClass = 'date-time-picker'\n\nconst DatePicker: React.FC<Props> = (props) => {\n const {\n id,\n displayFormat: customDisplayFormat,\n maxDate,\n maxTime,\n minDate,\n minTime,\n monthsToShow = 1,\n onChange: onChangeFromProps,\n overrides,\n pickerAppearance = 'default',\n placeholder: placeholderText,\n readOnly,\n timeFormat = 'h:mm aa',\n timeIntervals = 30,\n value,\n } = props\n\n // Use the user's AdminUI language preference for the locale\n const { i18n } = useTranslation()\n\n let dateFormat = customDisplayFormat\n\n if (!customDisplayFormat) {\n // when no displayFormat is provided, determine format based on the picker appearance\n if (pickerAppearance === 'default') {\n dateFormat = 'MM/dd/yyyy'\n } else if (pickerAppearance === 'dayAndTime') {\n dateFormat = 'MMM d, yyy h:mm a'\n } else if (pickerAppearance === 'timeOnly') {\n dateFormat = 'h:mm a'\n } else if (pickerAppearance === 'dayOnly') {\n dateFormat = 'MMM dd'\n } else if (pickerAppearance === 'monthOnly') {\n dateFormat = 'MMMM'\n }\n }\n\n const onChange: Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never }\n >['onChange'] = (incomingDate) => {\n const newDate = incomingDate\n if (newDate instanceof Date && ['dayOnly', 'default', 'monthOnly'].includes(pickerAppearance)) {\n const tzOffset = incomingDate.getTimezoneOffset() / 60\n newDate.setHours(12 - tzOffset, 0)\n }\n\n if (newDate instanceof Date && !dateFormat.includes('SSS')) {\n // Unless the dateFormat includes milliseconds, set milliseconds to 0\n // This is to ensure that the timestamp is consistent with the displayFormat\n newDate.setMilliseconds(0)\n }\n\n if (typeof onChangeFromProps === 'function') {\n onChangeFromProps(newDate)\n }\n }\n\n const dateTimePickerProps: Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never }\n > = {\n customInputRef: 'ref',\n dateFormat,\n disabled: readOnly,\n maxDate,\n maxTime,\n minDate,\n minTime,\n monthsShown: Math.min(2, monthsToShow),\n onChange,\n placeholderText,\n popperPlacement: 'bottom-start',\n selected: value && new Date(value),\n showMonthYearPicker: pickerAppearance === 'monthOnly',\n showPopperArrow: false,\n showTimeSelect: pickerAppearance === 'dayAndTime' || pickerAppearance === 'timeOnly',\n timeFormat,\n timeIntervals,\n ...(overrides as Extract<\n DatePickerProps,\n { selectsMultiple?: never; selectsRange?: never } // to satisfy TypeScript. Overrides can enable selectsMultiple or selectsRange but then it's up to the user to ensure they pass in the correct onChange\n >),\n }\n\n const classes = [baseClass, `${baseClass}__appearance--${pickerAppearance}`]\n .filter(Boolean)\n .join(' ')\n\n React.useEffect(() => {\n if (i18n.dateFNS) {\n try {\n const datepickerLocale = getFormattedLocale(i18n.language)\n registerLocale(datepickerLocale, i18n.dateFNS)\n setDefaultLocale(datepickerLocale)\n } catch (e) {\n console.warn(`Could not find DatePicker locale for ${i18n.language}`)\n }\n }\n }, [i18n.language, i18n.dateFNS])\n\n return (\n <div className={classes} id={id}>\n <div className={`${baseClass}__icon-wrap`}>\n {dateTimePickerProps.selected && (\n <button\n className={`${baseClass}__clear-button`}\n onClick={() => onChange(null)}\n type=\"button\"\n >\n <XIcon />\n </button>\n )}\n <CalendarIcon />\n </div>\n <div className={`${baseClass}__input-wrapper`}>\n <ReactDatePicker\n {...dateTimePickerProps}\n dropdownMode=\"select\"\n showMonthDropdown\n showYearDropdown\n />\n </div>\n </div>\n )\n}\n\n// eslint-disable-next-line no-restricted-exports\nexport default DatePicker\n"],"names":["React","ReactDatePickerDefaultImport","registerLocale","setDefaultLocale","ReactDatePicker","default","CalendarIcon","XIcon","useTranslation","getFormattedLocale","baseClass","DatePicker","props","id","displayFormat","customDisplayFormat","maxDate","maxTime","minDate","minTime","monthsToShow","onChange","onChangeFromProps","overrides","pickerAppearance","placeholder","placeholderText","readOnly","timeFormat","timeIntervals","value","i18n","dateFormat","incomingDate","newDate","Date","includes","tzOffset","getTimezoneOffset","setHours","setMilliseconds","dateTimePickerProps","customInputRef","disabled","monthsShown","Math","min","popperPlacement","selected","showMonthYearPicker","showPopperArrow","showTimeSelect","classes","filter","Boolean","join","useEffect","dateFNS","datepickerLocale","language","e","console","warn","div","className","button","onClick","type","dropdownMode","showMonthDropdown","showYearDropdown"],"mappings":"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"}
@@ -3,6 +3,7 @@ export const getFormattedLocale = (language = 'enUS')=>{
3
3
  const formattedLocales = {
4
4
  en: 'enUS',
5
5
  my: 'enUS',
6
+ // Burmese is not currently supported
6
7
  ua: 'uk',
7
8
  zh: 'zhCN'
8
9
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DatePicker/getFormattedLocale.ts"],"sourcesContent":["'use client'\nexport const getFormattedLocale = (language = 'enUS') => {\n const formattedLocales = {\n en: 'enUS',\n my: 'enUS', // Burmese is not currently supported\n ua: 'uk',\n zh: 'zhCN',\n }\n\n const formattedLocale = formattedLocales[language] || language\n\n return formattedLocale\n}\n"],"names":["getFormattedLocale","language","formattedLocales","en","my","ua","zh","formattedLocale"],"mappings":"AAAA;AACA,OAAO,MAAMA,qBAAqB,CAACC,WAAW,MAAM;IAClD,MAAMC,mBAAmB;QACvBC,IAAI;QACJC,IAAI;QACJC,IAAI;QACJC,IAAI;IACN;IAEA,MAAMC,kBAAkBL,gBAAgB,CAACD,SAAS,IAAIA;IAEtD,OAAOM;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/DatePicker/getFormattedLocale.ts"],"sourcesContent":["'use client'\nexport const getFormattedLocale = (language = 'enUS') => {\n const formattedLocales = {\n en: 'enUS',\n my: 'enUS', // Burmese is not currently supported\n ua: 'uk',\n zh: 'zhCN',\n }\n\n const formattedLocale = formattedLocales[language] || language\n\n return formattedLocale\n}\n"],"names":["getFormattedLocale","language","formattedLocales","en","my","ua","zh","formattedLocale"],"mappings":"AAAA;AACA,OAAO,MAAMA,qBAAqB,CAACC,WAAW,MAAM;IAClD,MAAMC,mBAAmB;QACvBC,IAAI;QACJC,IAAI;QAAQ,qCAAqC;QACjDC,IAAI;QACJC,IAAI;IACN;IAEA,MAAMC,kBAAkBL,gBAAgB,CAACD,SAAS,IAAIA;IAEtD,OAAOM;AACT,EAAC"}
@@ -20,7 +20,11 @@ import { ConfirmationModal } from '../ConfirmationModal/index.js';
20
20
  import { ListSelectionButton } from '../ListSelection/index.js';
21
21
  import { Translation } from '../Translation/index.js';
22
22
  import './index.scss';
23
- export const DeleteMany = (props)=>{
23
+ /**
24
+ * When multiple DeleteMany components are rendered on the page, this will differentiate them.
25
+ */ /**
26
+ * When multiple PublishMany components are rendered on the page, this will differentiate them.
27
+ */ export const DeleteMany = (props)=>{
24
28
  const { viewType } = props;
25
29
  const { collection: { slug, trash } = {}, modalPrefix } = props;
26
30
  const { permissions } = useAuth();
@@ -76,6 +80,26 @@ export const DeleteMany = (props)=>{
76
80
  });
77
81
  };
78
82
  /**
83
+ * A callback function to be called after the delete request is completed.
84
+ */ /**
85
+ * When multiple DeleteMany components are rendered on the page, this will differentiate them.
86
+ */ /**
87
+ * Optionally pass a search string to filter the documents to be deleted.
88
+ *
89
+ * This is intentionally passed as a prop so modals could pass in their own
90
+ * search string that may not be stored in the URL.
91
+ */ /**
92
+ * An object containing the relationTo as the key and an object with the following properties:
93
+ * - all: boolean
94
+ * - totalCount: number
95
+ * - ids: (string | number)[]
96
+ */ /**
97
+ * Optionally pass a where clause to filter the documents to be deleted.
98
+ * This will be ignored if multiple relations are selected.
99
+ *
100
+ * This is intentionally passed as a prop so modals could pass in their own
101
+ * where clause that may not be stored in the URL.
102
+ */ /**
79
103
  * Handles polymorphic document delete operations.
80
104
  *
81
105
  * If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ViewTypes, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { mergeListSearchAndWhere } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { CheckboxInput } from '../../fields/Checkbox/Input.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nexport type Props = {\n collection: ClientCollectionConfig\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * When multiple PublishMany components are rendered on the page, this will differentiate them.\n */\n title?: string\n viewType?: ViewTypes\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { viewType } = props\n const { collection: { slug, trash } = {}, modalPrefix } = props\n\n const { permissions } = useAuth()\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const selectingAll = selectAll === SelectAllStatus.AllAvailable\n\n const ids = selectingAll ? [] : selectedIDs\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n const baseWhere = parseSearchParams(searchParams)?.where as Where\n\n const finalWhere =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(baseWhere?.and) ? baseWhere.and : baseWhere ? [baseWhere] : []),\n { deletedAt: { exists: true } },\n ],\n }\n : baseWhere\n\n return (\n <React.Fragment>\n <DeleteMany_v4\n afterDelete={() => {\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n }}\n modalPrefix={modalPrefix}\n search={parseSearchParams(searchParams)?.search as string}\n selections={{\n [slug]: {\n all: selectAll === SelectAllStatus.AllAvailable,\n ids,\n totalCount: selectingAll ? count : ids.length,\n },\n }}\n trash={trash}\n viewType={viewType}\n where={finalWhere}\n />\n </React.Fragment>\n )\n}\n\ntype AfterDeleteResult = {\n [relationTo: string]: {\n deletedCount: number\n errors: unknown[]\n ids: (number | string)[]\n totalCount: number\n }\n}\ntype DeleteMany_v4Props = {\n /**\n * A callback function to be called after the delete request is completed.\n */\n afterDelete?: (result: AfterDeleteResult) => void\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * Optionally pass a search string to filter the documents to be deleted.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * search string that may not be stored in the URL.\n */\n search?: string\n /**\n * An object containing the relationTo as the key and an object with the following properties:\n * - all: boolean\n * - totalCount: number\n * - ids: (string | number)[]\n */\n selections: {\n [relationTo: string]: {\n all?: boolean\n ids?: (number | string)[]\n totalCount?: number\n }\n }\n trash?: boolean\n viewType?: ViewTypes\n /**\n * Optionally pass a where clause to filter the documents to be deleted.\n * This will be ignored if multiple relations are selected.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * where clause that may not be stored in the URL.\n */\n where?: Where\n}\n\n/**\n * Handles polymorphic document delete operations.\n *\n * If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.\n */\nexport function DeleteMany_v4({\n afterDelete,\n modalPrefix,\n search,\n selections,\n trash,\n viewType,\n where,\n}: DeleteMany_v4Props) {\n const { t } = useTranslation()\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { code: locale } = useLocale()\n const { i18n } = useTranslation()\n const { openModal } = useModal()\n\n const [deletePermanently, setDeletePermanently] = React.useState(false)\n const confirmManyDeleteDrawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}confirm-delete-many-docs`\n\n const handleDelete = React.useCallback(async () => {\n const deletingOneCollection = Object.keys(selections).length === 1\n const result: AfterDeleteResult = {}\n\n for (const [relationTo, { all, ids = [] }] of Object.entries(selections)) {\n const collectionConfig = collections.find(({ slug }) => slug === relationTo)\n\n if (collectionConfig) {\n let whereConstraint: Where\n\n if (all) {\n // selecting all documents with optional where filter\n if (deletingOneCollection && where) {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(where.and) ? where.and : [where]),\n { deletedAt: { exists: true } },\n ],\n }\n : where\n } else {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [{ id: { not_equals: '' } }, { deletedAt: { exists: true } }],\n }\n : {\n id: { not_equals: '' },\n }\n }\n } else {\n // selecting specific documents\n whereConstraint = {\n and: [\n { id: { in: ids } },\n ...(viewType === 'trash' ? [{ deletedAt: { exists: true } }] : []),\n ],\n }\n }\n\n const url = `${serverURL}${api}/${relationTo}${qs.stringify(\n {\n limit: 0,\n locale,\n select: {},\n where: mergeListSearchAndWhere({\n collectionConfig,\n search,\n where: whereConstraint,\n }),\n ...(viewType === 'trash' ? { trash: true } : {}),\n },\n { addQueryPrefix: true },\n )}`\n\n const deleteManyResponse =\n viewType === 'trash' || deletePermanently || !collectionConfig.trash\n ? await requests.delete(url, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n : await requests.patch(url, {\n body: JSON.stringify({\n deletedAt: new Date().toISOString(),\n }),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n try {\n const { plural, singular } = collectionConfig.labels\n const json = await deleteManyResponse.json()\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (deleteManyResponse.status < 400 || deletedDocs > 0) {\n const wasTrashed = collectionConfig.trash && !deletePermanently && viewType !== 'trash'\n\n let successKey:\n | 'general:deletedCountSuccessfully'\n | 'general:permanentlyDeletedCountSuccessfully'\n | 'general:trashedCountSuccessfully'\n\n if (wasTrashed) {\n successKey = 'general:trashedCountSuccessfully'\n } else if (viewType === 'trash' || deletePermanently) {\n successKey = 'general:permanentlyDeletedCountSuccessfully'\n } else {\n successKey = 'general:deletedCountSuccessfully'\n }\n\n toast.success(\n t(successKey, {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n }\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n result[relationTo] = {\n deletedCount: deletedDocs,\n errors: json?.errors || null,\n ids: json?.docs.map((doc) => doc.id) || [],\n totalCount: json.totalDocs,\n }\n\n if (deleteManyResponse.status > 400 && json?.errors.length === 0) {\n toast.error(t('error:unknown'))\n result[relationTo].errors = [t('error:unknown')]\n }\n\n continue\n } catch (_err) {\n toast.error(t('error:unknown'))\n result[relationTo] = {\n deletedCount: 0,\n errors: [_err],\n ids: [],\n totalCount: 0,\n }\n continue\n }\n }\n }\n\n if (typeof afterDelete === 'function') {\n afterDelete(result)\n }\n }, [\n selections,\n afterDelete,\n collections,\n deletePermanently,\n locale,\n search,\n serverURL,\n api,\n i18n,\n viewType,\n where,\n t,\n ])\n\n const { label: labelString, labelCount } = Object.entries(selections).reduce(\n (acc, [key, value], index, array) => {\n const collectionConfig = collections.find(({ slug }) => slug === key)\n if (collectionConfig) {\n const labelCount = acc.labelCount === undefined ? value.totalCount : acc.labelCount\n const collectionLabel = `${acc.labelCount !== undefined ? `${value.totalCount} ` : ''}${getTranslation(\n value.totalCount > 1 ? collectionConfig.labels.plural : collectionConfig.labels.singular,\n i18n,\n )}`\n\n let newLabel\n\n if (index === array.length - 1 && index !== 0) {\n newLabel = `${acc.label} and ${collectionLabel}`\n } else if (index > 0) {\n newLabel = `${acc.label}, ${collectionLabel}`\n } else {\n newLabel = collectionLabel\n }\n\n return {\n label: newLabel,\n labelCount,\n }\n }\n return acc\n },\n {\n label: '',\n labelCount: undefined,\n },\n )\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('general:delete')}\n className=\"delete-documents__toggle\"\n onClick={() => {\n openModal(confirmManyDeleteDrawerSlug)\n }}\n >\n {t('general:delete')}\n </ListSelectionButton>\n <ConfirmationModal\n body={\n <React.Fragment>\n <p>\n {trash ? (\n viewType === 'trash' ? (\n <Translation\n elements={{\n '0': ({ children }) => <strong>{children}</strong>,\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToPermanentlyDeleteTrash\"\n t={t}\n variables={{\n count: labelCount ?? 0,\n label: labelString,\n }}\n />\n ) : (\n t('general:aboutToTrashCount', { count: labelCount, label: labelString })\n )\n ) : (\n t('general:aboutToDeleteCount', { count: labelCount, label: labelString })\n )}\n </p>\n {trash && viewType !== 'trash' && (\n <div className=\"delete-documents__checkbox\">\n <CheckboxInput\n checked={deletePermanently}\n id=\"delete-forever\"\n label={t('general:deletePermanently')}\n name=\"delete-forever\"\n onToggle={(e) => setDeletePermanently(e.target.checked)}\n />\n </div>\n )}\n </React.Fragment>\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmManyDeleteDrawerSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","getTranslation","useRouter","useSearchParams","mergeListSearchAndWhere","qs","React","toast","CheckboxInput","useAuth","useConfig","useLocale","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","parseSearchParams","ConfirmationModal","ListSelectionButton","Translation","DeleteMany","props","viewType","collection","slug","trash","modalPrefix","permissions","count","selectAll","selectedIDs","toggleAll","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","selectingAll","AllAvailable","ids","None","baseWhere","where","finalWhere","and","Array","isArray","deletedAt","exists","Fragment","DeleteMany_v4","afterDelete","replace","stringify","page","undefined","addQueryPrefix","search","selections","all","totalCount","length","t","config","routes","api","serverURL","code","locale","i18n","openModal","deletePermanently","setDeletePermanently","useState","confirmManyDeleteDrawerSlug","handleDelete","useCallback","deletingOneCollection","Object","keys","result","relationTo","entries","collectionConfig","find","whereConstraint","id","not_equals","in","url","limit","select","deleteManyResponse","headers","language","patch","body","JSON","Date","toISOString","plural","singular","labels","json","deletedDocs","docs","successLabel","status","wasTrashed","successKey","success","label","errors","error","message","description","map","join","deletedCount","doc","totalDocs","_err","labelString","labelCount","reduce","acc","key","value","index","array","collectionLabel","newLabel","aria-label","className","onClick","p","elements","children","strong","i18nKey","variables","div","checked","name","onToggle","e","target","confirmingLabel","heading","modalSlug","onConfirm"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DeleteMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ViewTypes, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { mergeListSearchAndWhere } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { CheckboxInput } from '../../fields/Checkbox/Input.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { Translation } from '../Translation/index.js'\nimport './index.scss'\n\nexport type Props = {\n collection: ClientCollectionConfig\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * When multiple PublishMany components are rendered on the page, this will differentiate them.\n */\n title?: string\n viewType?: ViewTypes\n}\n\nexport const DeleteMany: React.FC<Props> = (props) => {\n const { viewType } = props\n const { collection: { slug, trash } = {}, modalPrefix } = props\n\n const { permissions } = useAuth()\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n const router = useRouter()\n const searchParams = useSearchParams()\n const { clearRouteCache } = useRouteCache()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasDeletePermission = collectionPermissions?.delete\n\n const selectingAll = selectAll === SelectAllStatus.AllAvailable\n\n const ids = selectingAll ? [] : selectedIDs\n\n if (selectAll === SelectAllStatus.None || !hasDeletePermission) {\n return null\n }\n\n const baseWhere = parseSearchParams(searchParams)?.where as Where\n\n const finalWhere =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(baseWhere?.and) ? baseWhere.and : baseWhere ? [baseWhere] : []),\n { deletedAt: { exists: true } },\n ],\n }\n : baseWhere\n\n return (\n <React.Fragment>\n <DeleteMany_v4\n afterDelete={() => {\n toggleAll()\n\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n\n clearRouteCache()\n }}\n modalPrefix={modalPrefix}\n search={parseSearchParams(searchParams)?.search as string}\n selections={{\n [slug]: {\n all: selectAll === SelectAllStatus.AllAvailable,\n ids,\n totalCount: selectingAll ? count : ids.length,\n },\n }}\n trash={trash}\n viewType={viewType}\n where={finalWhere}\n />\n </React.Fragment>\n )\n}\n\ntype AfterDeleteResult = {\n [relationTo: string]: {\n deletedCount: number\n errors: unknown[]\n ids: (number | string)[]\n totalCount: number\n }\n}\ntype DeleteMany_v4Props = {\n /**\n * A callback function to be called after the delete request is completed.\n */\n afterDelete?: (result: AfterDeleteResult) => void\n /**\n * When multiple DeleteMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n /**\n * Optionally pass a search string to filter the documents to be deleted.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * search string that may not be stored in the URL.\n */\n search?: string\n /**\n * An object containing the relationTo as the key and an object with the following properties:\n * - all: boolean\n * - totalCount: number\n * - ids: (string | number)[]\n */\n selections: {\n [relationTo: string]: {\n all?: boolean\n ids?: (number | string)[]\n totalCount?: number\n }\n }\n trash?: boolean\n viewType?: ViewTypes\n /**\n * Optionally pass a where clause to filter the documents to be deleted.\n * This will be ignored if multiple relations are selected.\n *\n * This is intentionally passed as a prop so modals could pass in their own\n * where clause that may not be stored in the URL.\n */\n where?: Where\n}\n\n/**\n * Handles polymorphic document delete operations.\n *\n * If you are deleting monomorphic documents, shape your `selections` to match the polymorphic structure.\n */\nexport function DeleteMany_v4({\n afterDelete,\n modalPrefix,\n search,\n selections,\n trash,\n viewType,\n where,\n}: DeleteMany_v4Props) {\n const { t } = useTranslation()\n\n const {\n config: {\n collections,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { code: locale } = useLocale()\n const { i18n } = useTranslation()\n const { openModal } = useModal()\n\n const [deletePermanently, setDeletePermanently] = React.useState(false)\n const confirmManyDeleteDrawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}confirm-delete-many-docs`\n\n const handleDelete = React.useCallback(async () => {\n const deletingOneCollection = Object.keys(selections).length === 1\n const result: AfterDeleteResult = {}\n\n for (const [relationTo, { all, ids = [] }] of Object.entries(selections)) {\n const collectionConfig = collections.find(({ slug }) => slug === relationTo)\n\n if (collectionConfig) {\n let whereConstraint: Where\n\n if (all) {\n // selecting all documents with optional where filter\n if (deletingOneCollection && where) {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [\n ...(Array.isArray(where.and) ? where.and : [where]),\n { deletedAt: { exists: true } },\n ],\n }\n : where\n } else {\n whereConstraint =\n viewType === 'trash'\n ? {\n and: [{ id: { not_equals: '' } }, { deletedAt: { exists: true } }],\n }\n : {\n id: { not_equals: '' },\n }\n }\n } else {\n // selecting specific documents\n whereConstraint = {\n and: [\n { id: { in: ids } },\n ...(viewType === 'trash' ? [{ deletedAt: { exists: true } }] : []),\n ],\n }\n }\n\n const url = `${serverURL}${api}/${relationTo}${qs.stringify(\n {\n limit: 0,\n locale,\n select: {},\n where: mergeListSearchAndWhere({\n collectionConfig,\n search,\n where: whereConstraint,\n }),\n ...(viewType === 'trash' ? { trash: true } : {}),\n },\n { addQueryPrefix: true },\n )}`\n\n const deleteManyResponse =\n viewType === 'trash' || deletePermanently || !collectionConfig.trash\n ? await requests.delete(url, {\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n : await requests.patch(url, {\n body: JSON.stringify({\n deletedAt: new Date().toISOString(),\n }),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n })\n\n try {\n const { plural, singular } = collectionConfig.labels\n const json = await deleteManyResponse.json()\n\n const deletedDocs = json?.docs.length || 0\n const successLabel = deletedDocs > 1 ? plural : singular\n\n if (deleteManyResponse.status < 400 || deletedDocs > 0) {\n const wasTrashed = collectionConfig.trash && !deletePermanently && viewType !== 'trash'\n\n let successKey:\n | 'general:deletedCountSuccessfully'\n | 'general:permanentlyDeletedCountSuccessfully'\n | 'general:trashedCountSuccessfully'\n\n if (wasTrashed) {\n successKey = 'general:trashedCountSuccessfully'\n } else if (viewType === 'trash' || deletePermanently) {\n successKey = 'general:permanentlyDeletedCountSuccessfully'\n } else {\n successKey = 'general:deletedCountSuccessfully'\n }\n\n toast.success(\n t(successKey, {\n count: deletedDocs,\n label: getTranslation(successLabel, i18n),\n }),\n )\n }\n\n if (json?.errors.length > 0) {\n toast.error(json.message, {\n description: json.errors.map((error) => error.message).join('\\n'),\n })\n }\n\n result[relationTo] = {\n deletedCount: deletedDocs,\n errors: json?.errors || null,\n ids: json?.docs.map((doc) => doc.id) || [],\n totalCount: json.totalDocs,\n }\n\n if (deleteManyResponse.status > 400 && json?.errors.length === 0) {\n toast.error(t('error:unknown'))\n result[relationTo].errors = [t('error:unknown')]\n }\n\n continue\n } catch (_err) {\n toast.error(t('error:unknown'))\n result[relationTo] = {\n deletedCount: 0,\n errors: [_err],\n ids: [],\n totalCount: 0,\n }\n continue\n }\n }\n }\n\n if (typeof afterDelete === 'function') {\n afterDelete(result)\n }\n }, [\n selections,\n afterDelete,\n collections,\n deletePermanently,\n locale,\n search,\n serverURL,\n api,\n i18n,\n viewType,\n where,\n t,\n ])\n\n const { label: labelString, labelCount } = Object.entries(selections).reduce(\n (acc, [key, value], index, array) => {\n const collectionConfig = collections.find(({ slug }) => slug === key)\n if (collectionConfig) {\n const labelCount = acc.labelCount === undefined ? value.totalCount : acc.labelCount\n const collectionLabel = `${acc.labelCount !== undefined ? `${value.totalCount} ` : ''}${getTranslation(\n value.totalCount > 1 ? collectionConfig.labels.plural : collectionConfig.labels.singular,\n i18n,\n )}`\n\n let newLabel\n\n if (index === array.length - 1 && index !== 0) {\n newLabel = `${acc.label} and ${collectionLabel}`\n } else if (index > 0) {\n newLabel = `${acc.label}, ${collectionLabel}`\n } else {\n newLabel = collectionLabel\n }\n\n return {\n label: newLabel,\n labelCount,\n }\n }\n return acc\n },\n {\n label: '',\n labelCount: undefined,\n },\n )\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('general:delete')}\n className=\"delete-documents__toggle\"\n onClick={() => {\n openModal(confirmManyDeleteDrawerSlug)\n }}\n >\n {t('general:delete')}\n </ListSelectionButton>\n <ConfirmationModal\n body={\n <React.Fragment>\n <p>\n {trash ? (\n viewType === 'trash' ? (\n <Translation\n elements={{\n '0': ({ children }) => <strong>{children}</strong>,\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToPermanentlyDeleteTrash\"\n t={t}\n variables={{\n count: labelCount ?? 0,\n label: labelString,\n }}\n />\n ) : (\n t('general:aboutToTrashCount', { count: labelCount, label: labelString })\n )\n ) : (\n t('general:aboutToDeleteCount', { count: labelCount, label: labelString })\n )}\n </p>\n {trash && viewType !== 'trash' && (\n <div className=\"delete-documents__checkbox\">\n <CheckboxInput\n checked={deletePermanently}\n id=\"delete-forever\"\n label={t('general:deletePermanently')}\n name=\"delete-forever\"\n onToggle={(e) => setDeletePermanently(e.target.checked)}\n />\n </div>\n )}\n </React.Fragment>\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmManyDeleteDrawerSlug}\n onConfirm={handleDelete}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","getTranslation","useRouter","useSearchParams","mergeListSearchAndWhere","qs","React","toast","CheckboxInput","useAuth","useConfig","useLocale","useRouteCache","SelectAllStatus","useSelection","useTranslation","requests","parseSearchParams","ConfirmationModal","ListSelectionButton","Translation","DeleteMany","props","viewType","collection","slug","trash","modalPrefix","permissions","count","selectAll","selectedIDs","toggleAll","router","searchParams","clearRouteCache","collectionPermissions","collections","hasDeletePermission","delete","selectingAll","AllAvailable","ids","None","baseWhere","where","finalWhere","and","Array","isArray","deletedAt","exists","Fragment","DeleteMany_v4","afterDelete","replace","stringify","page","undefined","addQueryPrefix","search","selections","all","totalCount","length","t","config","routes","api","serverURL","code","locale","i18n","openModal","deletePermanently","setDeletePermanently","useState","confirmManyDeleteDrawerSlug","handleDelete","useCallback","deletingOneCollection","Object","keys","result","relationTo","entries","collectionConfig","find","whereConstraint","id","not_equals","in","url","limit","select","deleteManyResponse","headers","language","patch","body","JSON","Date","toISOString","plural","singular","labels","json","deletedDocs","docs","successLabel","status","wasTrashed","successKey","success","label","errors","error","message","description","map","join","deletedCount","doc","totalDocs","_err","labelString","labelCount","reduce","acc","key","value","index","array","collectionLabel","newLabel","aria-label","className","onClick","p","elements","children","strong","i18nKey","variables","div","checked","name","onToggle","e","target","confirmingLabel","heading","modalSlug","onConfirm"],"mappings":"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"}
@@ -29,7 +29,7 @@ import './index.scss';
29
29
  import { SaveDraftButton } from '../SaveDraftButton/index.js';
30
30
  import { Status } from '../Status/index.js';
31
31
  const baseClass = 'doc-controls';
32
- export const DocumentControls = (props)=>{
32
+ export const DocumentControls = /* Only available if `redirectAfterDuplicate` is `false` */ (props)=>{
33
33
  const { id, slug, BeforeDocumentControls, customComponents: { PreviewButton: CustomPreviewButton, PublishButton: CustomPublishButton, SaveButton: CustomSaveButton, SaveDraftButton: CustomSaveDraftButton } = {}, data, disableActions, disableCreate, EditMenuItems, hasSavePermission, isAccountView, isEditing, isInDrawer, isTrashed, onDelete, onDrawerCreateNew, onDuplicate, onRestore, onTakeOver, permissions, readOnlyForIncomingUser, redirectAfterDelete, redirectAfterDuplicate, redirectAfterRestore, user } = props;
34
34
  const { i18n, t } = useTranslation();
35
35
  const editDepth = useEditDepth();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientUser,\n Data,\n SanitizedCollectionConfig,\n SanitizedCollectionPermission,\n SanitizedGlobalPermission,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React, { Fragment, useEffect } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useFormInitializing, useFormProcessing } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLivePreviewContext } from '../../providers/LivePreview/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { Button } from '../Button/index.js'\nimport { CopyLocaleData } from '../CopyLocaleData/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { MoveDocToFolder } from '../FolderView/MoveDocToFolder/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { LivePreviewToggler } from '../LivePreview/Toggler/index.js'\nimport { Locked } from '../Locked/index.js'\nimport { PermanentlyDeleteButton } from '../PermanentlyDeleteButton/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { PublishButton } from '../PublishButton/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { RestoreButton } from '../RestoreButton/index.js'\nimport { SaveButton } from '../SaveButton/index.js'\nimport './index.scss'\nimport { SaveDraftButton } from '../SaveDraftButton/index.js'\nimport { Status } from '../Status/index.js'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n readonly apiURL: string\n readonly BeforeDocumentControls?: React.ReactNode\n readonly customComponents?: {\n readonly PreviewButton?: React.ReactNode\n readonly PublishButton?: React.ReactNode\n readonly SaveButton?: React.ReactNode\n readonly SaveDraftButton?: React.ReactNode\n }\n readonly data?: Data\n readonly disableActions?: boolean\n readonly disableCreate?: boolean\n readonly EditMenuItems?: React.ReactNode\n readonly hasPublishPermission?: boolean\n readonly hasSavePermission?: boolean\n readonly id?: number | string\n readonly isAccountView?: boolean\n readonly isEditing?: boolean\n readonly isInDrawer?: boolean\n readonly isTrashed?: boolean\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly onDrawerCreateNew?: () => void\n /* Only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly onRestore?: DocumentDrawerContextType['onRestore']\n readonly onSave?: DocumentDrawerContextType['onSave']\n readonly onTakeOver?: () => void\n readonly permissions: null | SanitizedCollectionPermission | SanitizedGlobalPermission\n readonly readOnlyForIncomingUser?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n readonly slug: SanitizedCollectionConfig['slug']\n readonly user?: ClientUser\n}> = (props) => {\n const {\n id,\n slug,\n BeforeDocumentControls,\n customComponents: {\n PreviewButton: CustomPreviewButton,\n PublishButton: CustomPublishButton,\n SaveButton: CustomSaveButton,\n SaveDraftButton: CustomSaveDraftButton,\n } = {},\n data,\n disableActions,\n disableCreate,\n EditMenuItems,\n hasSavePermission,\n isAccountView,\n isEditing,\n isInDrawer,\n isTrashed,\n onDelete,\n onDrawerCreateNew,\n onDuplicate,\n onRestore,\n onTakeOver,\n permissions,\n readOnlyForIncomingUser,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n user,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const editDepth = useEditDepth()\n\n const { config, getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const globalConfig = getEntityConfig({ globalSlug: slug })\n\n const { isLivePreviewEnabled } = useLivePreviewContext()\n\n const {\n admin: { dateFormat },\n localization,\n routes: { admin: adminRoute },\n } = config\n\n // Settings these in state to avoid hydration issues if there is a mismatch between the server and client\n const [updatedAt, setUpdatedAt] = React.useState<string>('')\n const [createdAt, setCreatedAt] = React.useState<string>('')\n\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n\n useEffect(() => {\n if (data?.updatedAt) {\n setUpdatedAt(formatDate({ date: data.updatedAt, i18n, pattern: dateFormat }))\n }\n if (data?.createdAt) {\n setCreatedAt(formatDate({ date: data.createdAt, i18n, pattern: dateFormat }))\n }\n }, [data, i18n, dateFormat])\n\n const hasCreatePermission = permissions && 'create' in permissions && permissions.create\n\n const hasDeletePermission = permissions && 'delete' in permissions && permissions.delete\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n const unsavedDraftWithValidations =\n !id && collectionConfig?.versions?.drafts && collectionConfig.versions?.drafts.validate\n\n const globalHasDraftsEnabled = hasDraftsEnabled(globalConfig)\n const collectionHasDraftsEnabled = hasDraftsEnabled(collectionConfig)\n const collectionAutosaveEnabled = hasAutosaveEnabled(collectionConfig)\n const globalAutosaveEnabled = hasAutosaveEnabled(globalConfig)\n const autosaveEnabled = collectionAutosaveEnabled || globalAutosaveEnabled\n\n const showSaveDraftButton =\n (collectionAutosaveEnabled &&\n collectionConfig.versions.drafts.autosave !== false &&\n collectionConfig.versions.drafts.autosave.showSaveDraftButton === true) ||\n (globalAutosaveEnabled &&\n globalConfig.versions.drafts.autosave !== false &&\n globalConfig.versions.drafts.autosave.showSaveDraftButton === true)\n const showCopyToLocale = localization && !collectionConfig?.admin?.disableCopyToLocale\n\n const showFolderMetaIcon = collectionConfig && collectionConfig.folders\n const showLockedMetaIcon = user && readOnlyForIncomingUser\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n {showLockedMetaIcon || showFolderMetaIcon ? (\n <div className={`${baseClass}__meta-icons`}>\n {showLockedMetaIcon && (\n <Locked className={`${baseClass}__locked-controls`} user={user} />\n )}\n {showFolderMetaIcon && config.folders && !isTrashed && (\n <MoveDocToFolder\n folderCollectionSlug={config.folders.slug}\n folderFieldName={config.folders.fieldName}\n />\n )}\n </div>\n ) : null}\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label: getTranslation(\n collectionConfig?.labels?.singular ?? i18n.t('general:document'),\n i18n,\n ),\n })}\n </p>\n </li>\n )}\n {(collectionHasDraftsEnabled || globalHasDraftsEnabled) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {hasSavePermission &&\n autosaveEnabled &&\n !unsavedDraftWithValidations &&\n !isTrashed && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.updatedAt ? updatedAt : ''}\n >\n <p className={`${baseClass}__label`}>\n {i18n.t(isTrashed ? 'general:deleted' : 'general:lastModified')}:&nbsp;\n </p>\n\n {data?.updatedAt && <p className={`${baseClass}__value`}>{updatedAt}</p>}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.createdAt ? createdAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && <p className={`${baseClass}__value`}>{createdAt}</p>}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {BeforeDocumentControls}\n {isLivePreviewEnabled && !isInDrawer && <LivePreviewToggler />}\n {(collectionConfig?.admin.preview || globalConfig?.admin.preview) && (\n <RenderCustomComponent\n CustomComponent={CustomPreviewButton}\n Fallback={<PreviewButton />}\n />\n )}\n {hasSavePermission && !isTrashed && (\n <Fragment>\n {collectionHasDraftsEnabled || globalHasDraftsEnabled ? (\n <Fragment>\n {(unsavedDraftWithValidations ||\n !autosaveEnabled ||\n (autosaveEnabled && showSaveDraftButton)) && (\n <RenderCustomComponent\n CustomComponent={CustomSaveDraftButton}\n Fallback={<SaveDraftButton />}\n />\n )}\n <RenderCustomComponent\n CustomComponent={CustomPublishButton}\n Fallback={<PublishButton />}\n />\n </Fragment>\n ) : (\n <RenderCustomComponent\n CustomComponent={CustomSaveButton}\n Fallback={<SaveButton />}\n />\n )}\n </Fragment>\n )}\n {hasDeletePermission && isTrashed && (\n <PermanentlyDeleteButton\n buttonId=\"action-permanently-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n />\n )}\n {hasSavePermission && isTrashed && (\n <RestoreButton\n buttonId=\"action-restore\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onRestore={onRestore}\n redirectAfterRestore={redirectAfterRestore}\n singularLabel={collectionConfig?.labels?.singular}\n />\n )}\n {user && readOnlyForIncomingUser && (\n <Button\n buttonStyle=\"secondary\"\n id=\"take-over\"\n onClick={onTakeOver}\n size=\"medium\"\n type=\"button\"\n >\n {t('general:takeOver')}\n </Button>\n )}\n </div>\n {showDotMenu && !readOnlyForIncomingUser && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n disabled={initializing || processing}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {showCopyToLocale && <CopyLocaleData />}\n {hasCreatePermission && (\n <React.Fragment>\n {!disableCreate && (\n <Fragment>\n {editDepth > 1 ? (\n <PopupList.Button id=\"action-create\" onClick={onDrawerCreateNew}>\n {i18n.t('general:createNew')}\n </PopupList.Button>\n ) : (\n <PopupList.Button\n href={formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}/create`,\n })}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n )}\n </Fragment>\n )}\n {collectionConfig.disableDuplicate !== true && isEditing && (\n <>\n <DuplicateDocument\n id={id}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n {localization && (\n <DuplicateDocument\n id={id}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n selectLocales={true}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </>\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n {EditMenuItems}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"names":["getTranslation","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","Fragment","useEffect","useFormInitializing","useFormProcessing","useConfig","useEditDepth","useLivePreviewContext","useTranslation","formatDate","Autosave","Button","CopyLocaleData","DeleteDocument","DuplicateDocument","MoveDocToFolder","Gutter","LivePreviewToggler","Locked","PermanentlyDeleteButton","Popup","PopupList","PreviewButton","PublishButton","RenderCustomComponent","RestoreButton","SaveButton","SaveDraftButton","Status","baseClass","DocumentControls","props","id","slug","BeforeDocumentControls","customComponents","CustomPreviewButton","CustomPublishButton","CustomSaveButton","CustomSaveDraftButton","data","disableActions","disableCreate","EditMenuItems","hasSavePermission","isAccountView","isEditing","isInDrawer","isTrashed","onDelete","onDrawerCreateNew","onDuplicate","onRestore","onTakeOver","permissions","readOnlyForIncomingUser","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","user","i18n","t","editDepth","config","getEntityConfig","collectionConfig","collectionSlug","globalConfig","globalSlug","isLivePreviewEnabled","admin","dateFormat","localization","routes","adminRoute","updatedAt","setUpdatedAt","useState","createdAt","setCreatedAt","processing","initializing","date","pattern","hasCreatePermission","create","hasDeletePermission","delete","showDotMenu","Boolean","unsavedDraftWithValidations","versions","drafts","validate","globalHasDraftsEnabled","collectionHasDraftsEnabled","collectionAutosaveEnabled","globalAutosaveEnabled","autosaveEnabled","showSaveDraftButton","autosave","showCopyToLocale","disableCopyToLocale","showFolderMetaIcon","folders","showLockedMetaIcon","className","div","folderCollectionSlug","folderFieldName","fieldName","ul","li","p","label","labels","singular","filter","join","collection","global","publishedDocUpdatedAt","timestamps","title","preview","CustomComponent","Fallback","buttonId","toString","singularLabel","buttonStyle","onClick","size","type","button","disabled","horizontalAlign","verticalAlign","ButtonGroup","href","path","disableDuplicate","selectLocales","useAsTitle"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientUser,\n Data,\n SanitizedCollectionConfig,\n SanitizedCollectionPermission,\n SanitizedGlobalPermission,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React, { Fragment, useEffect } from 'react'\n\nimport type { DocumentDrawerContextType } from '../DocumentDrawer/Provider.js'\n\nimport { useFormInitializing, useFormProcessing } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLivePreviewContext } from '../../providers/LivePreview/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDocTitle/formatDateTitle.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { Button } from '../Button/index.js'\nimport { CopyLocaleData } from '../CopyLocaleData/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { MoveDocToFolder } from '../FolderView/MoveDocToFolder/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { LivePreviewToggler } from '../LivePreview/Toggler/index.js'\nimport { Locked } from '../Locked/index.js'\nimport { PermanentlyDeleteButton } from '../PermanentlyDeleteButton/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { PublishButton } from '../PublishButton/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { RestoreButton } from '../RestoreButton/index.js'\nimport { SaveButton } from '../SaveButton/index.js'\nimport './index.scss'\nimport { SaveDraftButton } from '../SaveDraftButton/index.js'\nimport { Status } from '../Status/index.js'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n readonly apiURL: string\n readonly BeforeDocumentControls?: React.ReactNode\n readonly customComponents?: {\n readonly PreviewButton?: React.ReactNode\n readonly PublishButton?: React.ReactNode\n readonly SaveButton?: React.ReactNode\n readonly SaveDraftButton?: React.ReactNode\n }\n readonly data?: Data\n readonly disableActions?: boolean\n readonly disableCreate?: boolean\n readonly EditMenuItems?: React.ReactNode\n readonly hasPublishPermission?: boolean\n readonly hasSavePermission?: boolean\n readonly id?: number | string\n readonly isAccountView?: boolean\n readonly isEditing?: boolean\n readonly isInDrawer?: boolean\n readonly isTrashed?: boolean\n readonly onDelete?: DocumentDrawerContextType['onDelete']\n readonly onDrawerCreateNew?: () => void\n /* Only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: DocumentDrawerContextType['onDuplicate']\n readonly onRestore?: DocumentDrawerContextType['onRestore']\n readonly onSave?: DocumentDrawerContextType['onSave']\n readonly onTakeOver?: () => void\n readonly permissions: null | SanitizedCollectionPermission | SanitizedGlobalPermission\n readonly readOnlyForIncomingUser?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n readonly slug: SanitizedCollectionConfig['slug']\n readonly user?: ClientUser\n}> = (props) => {\n const {\n id,\n slug,\n BeforeDocumentControls,\n customComponents: {\n PreviewButton: CustomPreviewButton,\n PublishButton: CustomPublishButton,\n SaveButton: CustomSaveButton,\n SaveDraftButton: CustomSaveDraftButton,\n } = {},\n data,\n disableActions,\n disableCreate,\n EditMenuItems,\n hasSavePermission,\n isAccountView,\n isEditing,\n isInDrawer,\n isTrashed,\n onDelete,\n onDrawerCreateNew,\n onDuplicate,\n onRestore,\n onTakeOver,\n permissions,\n readOnlyForIncomingUser,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n user,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const editDepth = useEditDepth()\n\n const { config, getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug: slug })\n\n const globalConfig = getEntityConfig({ globalSlug: slug })\n\n const { isLivePreviewEnabled } = useLivePreviewContext()\n\n const {\n admin: { dateFormat },\n localization,\n routes: { admin: adminRoute },\n } = config\n\n // Settings these in state to avoid hydration issues if there is a mismatch between the server and client\n const [updatedAt, setUpdatedAt] = React.useState<string>('')\n const [createdAt, setCreatedAt] = React.useState<string>('')\n\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n\n useEffect(() => {\n if (data?.updatedAt) {\n setUpdatedAt(formatDate({ date: data.updatedAt, i18n, pattern: dateFormat }))\n }\n if (data?.createdAt) {\n setCreatedAt(formatDate({ date: data.createdAt, i18n, pattern: dateFormat }))\n }\n }, [data, i18n, dateFormat])\n\n const hasCreatePermission = permissions && 'create' in permissions && permissions.create\n\n const hasDeletePermission = permissions && 'delete' in permissions && permissions.delete\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n const unsavedDraftWithValidations =\n !id && collectionConfig?.versions?.drafts && collectionConfig.versions?.drafts.validate\n\n const globalHasDraftsEnabled = hasDraftsEnabled(globalConfig)\n const collectionHasDraftsEnabled = hasDraftsEnabled(collectionConfig)\n const collectionAutosaveEnabled = hasAutosaveEnabled(collectionConfig)\n const globalAutosaveEnabled = hasAutosaveEnabled(globalConfig)\n const autosaveEnabled = collectionAutosaveEnabled || globalAutosaveEnabled\n\n const showSaveDraftButton =\n (collectionAutosaveEnabled &&\n collectionConfig.versions.drafts.autosave !== false &&\n collectionConfig.versions.drafts.autosave.showSaveDraftButton === true) ||\n (globalAutosaveEnabled &&\n globalConfig.versions.drafts.autosave !== false &&\n globalConfig.versions.drafts.autosave.showSaveDraftButton === true)\n const showCopyToLocale = localization && !collectionConfig?.admin?.disableCopyToLocale\n\n const showFolderMetaIcon = collectionConfig && collectionConfig.folders\n const showLockedMetaIcon = user && readOnlyForIncomingUser\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n {showLockedMetaIcon || showFolderMetaIcon ? (\n <div className={`${baseClass}__meta-icons`}>\n {showLockedMetaIcon && (\n <Locked className={`${baseClass}__locked-controls`} user={user} />\n )}\n {showFolderMetaIcon && config.folders && !isTrashed && (\n <MoveDocToFolder\n folderCollectionSlug={config.folders.slug}\n folderFieldName={config.folders.fieldName}\n />\n )}\n </div>\n ) : null}\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label: getTranslation(\n collectionConfig?.labels?.singular ?? i18n.t('general:document'),\n i18n,\n ),\n })}\n </p>\n </li>\n )}\n {(collectionHasDraftsEnabled || globalHasDraftsEnabled) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {hasSavePermission &&\n autosaveEnabled &&\n !unsavedDraftWithValidations &&\n !isTrashed && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.updatedAt ? updatedAt : ''}\n >\n <p className={`${baseClass}__label`}>\n {i18n.t(isTrashed ? 'general:deleted' : 'general:lastModified')}:&nbsp;\n </p>\n\n {data?.updatedAt && <p className={`${baseClass}__value`}>{updatedAt}</p>}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={data?.createdAt ? createdAt : ''}\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && <p className={`${baseClass}__value`}>{createdAt}</p>}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {BeforeDocumentControls}\n {isLivePreviewEnabled && !isInDrawer && <LivePreviewToggler />}\n {(collectionConfig?.admin.preview || globalConfig?.admin.preview) && (\n <RenderCustomComponent\n CustomComponent={CustomPreviewButton}\n Fallback={<PreviewButton />}\n />\n )}\n {hasSavePermission && !isTrashed && (\n <Fragment>\n {collectionHasDraftsEnabled || globalHasDraftsEnabled ? (\n <Fragment>\n {(unsavedDraftWithValidations ||\n !autosaveEnabled ||\n (autosaveEnabled && showSaveDraftButton)) && (\n <RenderCustomComponent\n CustomComponent={CustomSaveDraftButton}\n Fallback={<SaveDraftButton />}\n />\n )}\n <RenderCustomComponent\n CustomComponent={CustomPublishButton}\n Fallback={<PublishButton />}\n />\n </Fragment>\n ) : (\n <RenderCustomComponent\n CustomComponent={CustomSaveButton}\n Fallback={<SaveButton />}\n />\n )}\n </Fragment>\n )}\n {hasDeletePermission && isTrashed && (\n <PermanentlyDeleteButton\n buttonId=\"action-permanently-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n />\n )}\n {hasSavePermission && isTrashed && (\n <RestoreButton\n buttonId=\"action-restore\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onRestore={onRestore}\n redirectAfterRestore={redirectAfterRestore}\n singularLabel={collectionConfig?.labels?.singular}\n />\n )}\n {user && readOnlyForIncomingUser && (\n <Button\n buttonStyle=\"secondary\"\n id=\"take-over\"\n onClick={onTakeOver}\n size=\"medium\"\n type=\"button\"\n >\n {t('general:takeOver')}\n </Button>\n )}\n </div>\n {showDotMenu && !readOnlyForIncomingUser && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n disabled={initializing || processing}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {showCopyToLocale && <CopyLocaleData />}\n {hasCreatePermission && (\n <React.Fragment>\n {!disableCreate && (\n <Fragment>\n {editDepth > 1 ? (\n <PopupList.Button id=\"action-create\" onClick={onDrawerCreateNew}>\n {i18n.t('general:createNew')}\n </PopupList.Button>\n ) : (\n <PopupList.Button\n href={formatAdminURL({\n adminRoute,\n path: `/collections/${collectionConfig?.slug}/create`,\n })}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n )}\n </Fragment>\n )}\n {collectionConfig.disableDuplicate !== true && isEditing && (\n <>\n <DuplicateDocument\n id={id}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n {localization && (\n <DuplicateDocument\n id={id}\n onDuplicate={onDuplicate}\n redirectAfterDuplicate={redirectAfterDuplicate}\n selectLocales={true}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </>\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n onDelete={onDelete}\n redirectAfterDelete={redirectAfterDelete}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n {EditMenuItems}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"names":["getTranslation","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","Fragment","useEffect","useFormInitializing","useFormProcessing","useConfig","useEditDepth","useLivePreviewContext","useTranslation","formatDate","Autosave","Button","CopyLocaleData","DeleteDocument","DuplicateDocument","MoveDocToFolder","Gutter","LivePreviewToggler","Locked","PermanentlyDeleteButton","Popup","PopupList","PreviewButton","PublishButton","RenderCustomComponent","RestoreButton","SaveButton","SaveDraftButton","Status","baseClass","DocumentControls","props","id","slug","BeforeDocumentControls","customComponents","CustomPreviewButton","CustomPublishButton","CustomSaveButton","CustomSaveDraftButton","data","disableActions","disableCreate","EditMenuItems","hasSavePermission","isAccountView","isEditing","isInDrawer","isTrashed","onDelete","onDrawerCreateNew","onDuplicate","onRestore","onTakeOver","permissions","readOnlyForIncomingUser","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","user","i18n","t","editDepth","config","getEntityConfig","collectionConfig","collectionSlug","globalConfig","globalSlug","isLivePreviewEnabled","admin","dateFormat","localization","routes","adminRoute","updatedAt","setUpdatedAt","useState","createdAt","setCreatedAt","processing","initializing","date","pattern","hasCreatePermission","create","hasDeletePermission","delete","showDotMenu","Boolean","unsavedDraftWithValidations","versions","drafts","validate","globalHasDraftsEnabled","collectionHasDraftsEnabled","collectionAutosaveEnabled","globalAutosaveEnabled","autosaveEnabled","showSaveDraftButton","autosave","showCopyToLocale","disableCopyToLocale","showFolderMetaIcon","folders","showLockedMetaIcon","className","div","folderCollectionSlug","folderFieldName","fieldName","ul","li","p","label","labels","singular","filter","join","collection","global","publishedDocUpdatedAt","timestamps","title","preview","CustomComponent","Fallback","buttonId","toString","singularLabel","buttonStyle","onClick","size","type","button","disabled","horizontalAlign","verticalAlign","ButtonGroup","href","path","disableDuplicate","selectLocales","useAsTitle"],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createContext, use } from 'react';
3
- export const DocumentDrawerCallbacksContext = /*#__PURE__*/ createContext({});
3
+ /* only available if `redirectAfterDuplicate` is `false` */ /**
4
+ * If you want to pass additional data to the onSuccess callback, you can use this context object.
5
+ *
6
+ * @experimental This property is experimental and may change in the future. Use at your own risk.
7
+ */ export const DocumentDrawerCallbacksContext = /*#__PURE__*/ createContext({});
4
8
  export const DocumentDrawerContextProvider = ({ children, ...rest })=>{
5
9
  return /*#__PURE__*/ _jsx(DocumentDrawerCallbacksContext, {
6
10
  value: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentDrawer/Provider.tsx"],"sourcesContent":["import type { ClientCollectionConfig, Data, FormState, TypeWithID } from 'payload'\n\nimport { createContext, use } from 'react'\n\nexport type DocumentDrawerContextProps = {\n readonly clearDoc?: () => void\n readonly drawerSlug: string\n readonly onDelete?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n /* only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: (args: {\n collectionConfig?: ClientCollectionConfig\n doc: TypeWithID\n }) => Promise<void> | void\n readonly onRestore?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n readonly onSave?: (args: {\n collectionConfig?: ClientCollectionConfig\n /**\n * If you want to pass additional data to the onSuccess callback, you can use this context object.\n *\n * @experimental This property is experimental and may change in the future. Use at your own risk.\n */\n context?: Record<string, unknown>\n doc: TypeWithID\n operation: 'create' | 'update'\n result: Data\n }) => Promise<FormState | void> | void\n}\n\nexport type DocumentDrawerContextType = {} & DocumentDrawerContextProps\n\nexport const DocumentDrawerCallbacksContext = createContext({} as DocumentDrawerContextType)\n\nexport const DocumentDrawerContextProvider: React.FC<\n {\n children: React.ReactNode\n } & DocumentDrawerContextProps\n> = ({ children, ...rest }) => {\n return (\n <DocumentDrawerCallbacksContext value={{ ...rest }}>{children}</DocumentDrawerCallbacksContext>\n )\n}\n\nexport const useDocumentDrawerContext = (): DocumentDrawerContextType => {\n const context = use(DocumentDrawerCallbacksContext)\n\n if (!context) {\n throw new Error('useDocumentDrawerContext must be used within a DocumentDrawerProvider')\n }\n\n return context\n}\n"],"names":["createContext","use","DocumentDrawerCallbacksContext","DocumentDrawerContextProvider","children","rest","value","useDocumentDrawerContext","context","Error"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,QAAQ,QAAO;AAkC1C,OAAO,MAAMC,+CAAiCF,cAAc,CAAC,GAA+B;AAE5F,OAAO,MAAMG,gCAIT,CAAC,EAAEC,QAAQ,EAAE,GAAGC,MAAM;IACxB,qBACE,KAACH;QAA+BI,OAAO;YAAE,GAAGD,IAAI;QAAC;kBAAID;;AAEzD,EAAC;AAED,OAAO,MAAMG,2BAA2B;IACtC,MAAMC,UAAUP,IAAIC;IAEpB,IAAI,CAACM,SAAS;QACZ,MAAM,IAAIC,MAAM;IAClB;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentDrawer/Provider.tsx"],"sourcesContent":["import type { ClientCollectionConfig, Data, FormState, TypeWithID } from 'payload'\n\nimport { createContext, use } from 'react'\n\nexport type DocumentDrawerContextProps = {\n readonly clearDoc?: () => void\n readonly drawerSlug: string\n readonly onDelete?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n /* only available if `redirectAfterDuplicate` is `false` */\n readonly onDuplicate?: (args: {\n collectionConfig?: ClientCollectionConfig\n doc: TypeWithID\n }) => Promise<void> | void\n readonly onRestore?: (args: {\n collectionConfig?: ClientCollectionConfig\n id: string\n }) => Promise<void> | void\n readonly onSave?: (args: {\n collectionConfig?: ClientCollectionConfig\n /**\n * If you want to pass additional data to the onSuccess callback, you can use this context object.\n *\n * @experimental This property is experimental and may change in the future. Use at your own risk.\n */\n context?: Record<string, unknown>\n doc: TypeWithID\n operation: 'create' | 'update'\n result: Data\n }) => Promise<FormState | void> | void\n}\n\nexport type DocumentDrawerContextType = {} & DocumentDrawerContextProps\n\nexport const DocumentDrawerCallbacksContext = createContext({} as DocumentDrawerContextType)\n\nexport const DocumentDrawerContextProvider: React.FC<\n {\n children: React.ReactNode\n } & DocumentDrawerContextProps\n> = ({ children, ...rest }) => {\n return (\n <DocumentDrawerCallbacksContext value={{ ...rest }}>{children}</DocumentDrawerCallbacksContext>\n )\n}\n\nexport const useDocumentDrawerContext = (): DocumentDrawerContextType => {\n const context = use(DocumentDrawerCallbacksContext)\n\n if (!context) {\n throw new Error('useDocumentDrawerContext must be used within a DocumentDrawerProvider')\n }\n\n return context\n}\n"],"names":["createContext","use","DocumentDrawerCallbacksContext","DocumentDrawerContextProvider","children","rest","value","useDocumentDrawerContext","context","Error"],"mappings":";AAEA,SAASA,aAAa,EAAEC,GAAG,QAAQ,QAAO;AASxC,yDAAyD,GAWvD;;;;KAIC,GAUL,OAAO,MAAMC,+CAAiCF,cAAc,CAAC,GAA+B;AAE5F,OAAO,MAAMG,gCAIT,CAAC,EAAEC,QAAQ,EAAE,GAAGC,MAAM;IACxB,qBACE,KAACH;QAA+BI,OAAO;YAAE,GAAGD,IAAI;QAAC;kBAAID;;AAEzD,EAAC;AAED,OAAO,MAAMG,2BAA2B;IACtC,MAAMC,UAAUP,IAAIC;IAEpB,IAAI,CAACM,SAAS;QACZ,MAAM,IAAIC,MAAM;IAClB;IAEA,OAAOD;AACT,EAAC"}
@@ -1,3 +1,13 @@
1
- export { };
1
+ /**
2
+ * The slug of the collection to which the document belongs.
3
+ */ /**
4
+ * The ID of the document to be edited.
5
+ * When provided, will be fetched and displayed in the drawer.
6
+ * If omitted, will render the "create new" view for the given collection.
7
+ */ /**
8
+ * @deprecated
9
+ */ export { }; // drawer
10
+ // toggler
11
+ // context
2
12
 
3
13
  //# sourceMappingURL=types.js.map