@payloadcms/ui 4.0.0-canary.1 → 4.0.0-canary.2

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 (213) hide show
  1. package/dist/css/radius.css +1 -3
  2. package/dist/css/theme.css +4 -0
  3. package/dist/css/utilities.css +5 -0
  4. package/dist/elements/APIKeyInput/index.css +92 -0
  5. package/dist/elements/APIKeyInput/index.d.ts +14 -0
  6. package/dist/elements/APIKeyInput/index.d.ts.map +1 -0
  7. package/dist/elements/APIKeyInput/index.js +86 -0
  8. package/dist/elements/APIKeyInput/index.js.map +1 -0
  9. package/dist/elements/BulkUpload/ActionsBar/index.css +10 -4
  10. package/dist/elements/BulkUpload/ActionsBar/index.d.ts.map +1 -1
  11. package/dist/elements/BulkUpload/ActionsBar/index.js +43 -40
  12. package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
  13. package/dist/elements/BulkUpload/AddFilesView/index.js +1 -1
  14. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  15. package/dist/elements/BulkUpload/AddingFilesView/index.css +25 -0
  16. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts +1 -1
  17. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts.map +1 -1
  18. package/dist/elements/BulkUpload/AddingFilesView/index.js +1 -1
  19. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  20. package/dist/elements/BulkUpload/EditForm/index.css +9 -0
  21. package/dist/elements/BulkUpload/EditForm/index.d.ts +1 -1
  22. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  23. package/dist/elements/BulkUpload/EditForm/index.js +1 -1
  24. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  25. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts +1 -1
  26. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
  27. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +59 -55
  28. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  29. package/dist/elements/BulkUpload/EditMany/index.css +71 -0
  30. package/dist/elements/BulkUpload/EditMany/index.d.ts +1 -1
  31. package/dist/elements/BulkUpload/EditMany/index.d.ts.map +1 -1
  32. package/dist/elements/BulkUpload/EditMany/index.js +1 -1
  33. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  34. package/dist/elements/BulkUpload/FileSidebar/index.css +54 -75
  35. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  36. package/dist/elements/BulkUpload/FileSidebar/index.js +60 -50
  37. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  38. package/dist/elements/ColumnSelector/index.js +1 -1
  39. package/dist/elements/ColumnSelector/index.js.map +1 -1
  40. package/dist/elements/DocumentFields/index.css +1 -1
  41. package/dist/elements/Drawer/index.d.ts +25 -0
  42. package/dist/elements/Drawer/index.d.ts.map +1 -1
  43. package/dist/elements/Drawer/index.js +134 -62
  44. package/dist/elements/Drawer/index.js.map +1 -1
  45. package/dist/elements/FileDetails/DraggableFileDetails/index.css +32 -0
  46. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -1
  47. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  48. package/dist/elements/FileDetails/DraggableFileDetails/index.js +19 -18
  49. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  50. package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +36 -0
  51. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +1 -1
  52. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -1
  53. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +1 -1
  54. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -1
  55. package/dist/elements/Hierarchy/Field/index.client.d.ts +1 -1
  56. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  57. package/dist/elements/Hierarchy/Field/index.client.js +5 -2
  58. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  59. package/dist/elements/Hierarchy/Field/index.css +37 -0
  60. package/dist/elements/Hierarchy/MoveMany/index.d.ts +0 -1
  61. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  62. package/dist/elements/Hierarchy/MoveMany/index.js +0 -1
  63. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  64. package/dist/elements/Hierarchy/Tree/LoadMore/index.css +27 -0
  65. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts +1 -1
  66. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts.map +1 -1
  67. package/dist/elements/Hierarchy/Tree/LoadMore/index.js +1 -1
  68. package/dist/elements/Hierarchy/Tree/LoadMore/index.js.map +1 -1
  69. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -1
  70. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js +36 -16
  71. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -1
  72. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  73. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +20 -15
  74. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  75. package/dist/elements/LoadMoreRow/index.css +34 -0
  76. package/dist/elements/LoadMoreRow/index.d.ts +1 -1
  77. package/dist/elements/LoadMoreRow/index.d.ts.map +1 -1
  78. package/dist/elements/LoadMoreRow/index.js +4 -8
  79. package/dist/elements/LoadMoreRow/index.js.map +1 -1
  80. package/dist/elements/Popup/PopupGroupLabel/index.css +12 -0
  81. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.d.ts +13 -0
  82. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.d.ts.map +1 -0
  83. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js +41 -0
  84. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js.map +1 -0
  85. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +1 -0
  86. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  87. package/dist/elements/PublishButton/ScheduleDrawer/index.js +9 -31
  88. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  89. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  90. package/dist/elements/PublishButton/index.js +4 -5
  91. package/dist/elements/PublishButton/index.js.map +1 -1
  92. package/dist/elements/ReactSelect/MultiValue/index.css +1 -1
  93. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  94. package/dist/elements/ReactSelect/index.js +12 -4
  95. package/dist/elements/ReactSelect/index.js.map +1 -1
  96. package/dist/elements/SchedulePublishButton/index.d.ts.map +1 -1
  97. package/dist/elements/SchedulePublishButton/index.js +6 -1
  98. package/dist/elements/SchedulePublishButton/index.js.map +1 -1
  99. package/dist/elements/SelectMany/index.js +1 -1
  100. package/dist/elements/SelectMany/index.js.map +1 -1
  101. package/dist/elements/Table/index.css +7 -5
  102. package/dist/elements/Tabs/index.css +100 -0
  103. package/dist/elements/Tabs/index.d.ts +32 -0
  104. package/dist/elements/Tabs/index.d.ts.map +1 -0
  105. package/dist/elements/Tabs/index.js +62 -0
  106. package/dist/elements/Tabs/index.js.map +1 -0
  107. package/dist/elements/TimezonePicker/index.css +0 -15
  108. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  109. package/dist/elements/UnpublishButton/index.js +5 -13
  110. package/dist/elements/UnpublishButton/index.js.map +1 -1
  111. package/dist/exports/client/index.d.ts +6 -0
  112. package/dist/exports/client/index.d.ts.map +1 -1
  113. package/dist/exports/client/index.js +14 -14
  114. package/dist/exports/client/index.js.map +4 -4
  115. package/dist/fields/Tabs/Tab/index.d.ts +0 -1
  116. package/dist/fields/Tabs/Tab/index.d.ts.map +1 -1
  117. package/dist/fields/Tabs/Tab/index.js +12 -23
  118. package/dist/fields/Tabs/Tab/index.js.map +1 -1
  119. package/dist/fields/Tabs/index.d.ts.map +1 -1
  120. package/dist/fields/Tabs/index.js +37 -37
  121. package/dist/fields/Tabs/index.js.map +1 -1
  122. package/dist/fields/Upload/HasMany/index.css +4 -0
  123. package/dist/forms/RenderFields/RenderField.d.ts +1 -1
  124. package/dist/icons/Gear/index.d.ts.map +1 -1
  125. package/dist/icons/Gear/index.js +8 -1
  126. package/dist/icons/Gear/index.js.map +1 -1
  127. package/dist/icons/{Write → Key}/index.css +1 -1
  128. package/dist/icons/Key/index.d.ts +7 -0
  129. package/dist/icons/Key/index.d.ts.map +1 -0
  130. package/dist/icons/Key/index.js +24 -0
  131. package/dist/icons/Key/index.js.map +1 -0
  132. package/dist/icons/Schedule/index.d.ts.map +1 -1
  133. package/dist/icons/Schedule/index.js +38 -39
  134. package/dist/icons/Schedule/index.js.map +1 -1
  135. package/dist/icons/WarningTriangle/index.css +5 -0
  136. package/dist/icons/WarningTriangle/index.d.ts +6 -0
  137. package/dist/icons/WarningTriangle/index.d.ts.map +1 -0
  138. package/dist/icons/WarningTriangle/index.js +21 -0
  139. package/dist/icons/WarningTriangle/index.js.map +1 -0
  140. package/dist/icons/Write/index.d.ts +0 -1
  141. package/dist/icons/Write/index.d.ts.map +1 -1
  142. package/dist/icons/Write/index.js +1 -2
  143. package/dist/icons/Write/index.js.map +1 -1
  144. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  145. package/dist/providers/DocumentInfo/index.js +4 -0
  146. package/dist/providers/DocumentInfo/index.js.map +1 -1
  147. package/dist/providers/DocumentInfo/types.d.ts +4 -0
  148. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  149. package/dist/providers/DocumentInfo/types.js.map +1 -1
  150. package/dist/providers/Root/index.d.ts.map +1 -1
  151. package/dist/providers/Root/index.js +27 -24
  152. package/dist/providers/Root/index.js.map +1 -1
  153. package/dist/providers/TableColumns/RenderDefaultCell/index.css +1 -0
  154. package/dist/styles.css +1 -1
  155. package/dist/utilities/getHasScheduledPublish.d.ts +12 -0
  156. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -0
  157. package/dist/utilities/getHasScheduledPublish.js +38 -0
  158. package/dist/utilities/getHasScheduledPublish.js.map +1 -0
  159. package/dist/utilities/getVersions.d.ts.map +1 -1
  160. package/dist/utilities/getVersions.js +1 -21
  161. package/dist/utilities/getVersions.js.map +1 -1
  162. package/dist/views/Document/index.d.ts.map +1 -1
  163. package/dist/views/Document/index.js +10 -1
  164. package/dist/views/Document/index.js.map +1 -1
  165. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  166. package/dist/views/Edit/Auth/APIKey.js +10 -32
  167. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  168. package/dist/views/Edit/Auth/index.css +0 -67
  169. package/dist/views/List/handleGroupBy.d.ts.map +1 -1
  170. package/dist/views/List/handleGroupBy.js +9 -0
  171. package/dist/views/List/handleGroupBy.js.map +1 -1
  172. package/dist/views/List/index.client.d.ts.map +1 -1
  173. package/dist/views/List/index.client.js +3 -2
  174. package/dist/views/List/index.client.js.map +1 -1
  175. package/dist/views/List/index.css +1 -1
  176. package/dist/views/List/index.d.ts.map +1 -1
  177. package/dist/views/List/index.js +2 -1
  178. package/dist/views/List/index.js.map +1 -1
  179. package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
  180. package/dist/views/List/renderListViewSlots.js +8 -0
  181. package/dist/views/List/renderListViewSlots.js.map +1 -1
  182. package/dist/views/Version/SelectComparison/VersionDrawer/index.css +5 -0
  183. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts +1 -1
  184. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts.map +1 -1
  185. package/dist/views/Version/SelectComparison/VersionDrawer/index.js +1 -2
  186. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  187. package/dist/views/Version/SelectComparison/index.css +5 -0
  188. package/dist/views/Version/SelectComparison/index.d.ts +1 -1
  189. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  190. package/dist/views/Version/SelectComparison/index.js +1 -1
  191. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  192. package/dist/views/Versions/index.css +2 -2
  193. package/dist/views/Versions/index.d.ts +1 -1
  194. package/dist/views/Versions/index.d.ts.map +1 -1
  195. package/dist/views/Versions/index.js +3 -26
  196. package/dist/views/Versions/index.js.map +1 -1
  197. package/package.json +5 -5
  198. package/dist/elements/BulkUpload/AddingFilesView/index.scss +0 -25
  199. package/dist/elements/BulkUpload/EditForm/index.scss +0 -11
  200. package/dist/elements/BulkUpload/EditMany/index.scss +0 -171
  201. package/dist/elements/FileDetails/DraggableFileDetails/index.scss +0 -35
  202. package/dist/elements/Hierarchy/Field/SelectedHierarchies.scss +0 -78
  203. package/dist/elements/Hierarchy/Field/index.scss +0 -41
  204. package/dist/elements/Hierarchy/MoveMany/index.scss +0 -7
  205. package/dist/elements/Hierarchy/Tree/LoadMore/index.scss +0 -26
  206. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts +0 -7
  207. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts.map +0 -1
  208. package/dist/elements/Hierarchy/Tree/TreeConnector.js +0 -23
  209. package/dist/elements/Hierarchy/Tree/TreeConnector.js.map +0 -1
  210. package/dist/elements/LoadMoreRow/index.scss +0 -45
  211. package/dist/fields/Tabs/Tab/index.css +0 -82
  212. package/dist/views/Version/SelectComparison/VersionDrawer/index.scss +0 -18
  213. package/dist/views/Version/SelectComparison/index.scss +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","fieldIsHiddenOrDisabled","fieldIsID","isFieldDisabled","React","useCallback","useId","useLayoutEffect","useMemo","useRef","useState","AlignJustifiedIcon","SearchIcon","XIcon","useEditDepth","useTableColumns","useTranslation","Button","DraggableSortable","useDraggableSortable","Switch","baseClass","parseNestedLabel","label","includes","segments","split","length","NestedLabel","_jsx","_Fragment","map","segment","index","_jsxs","Fragment","className","ColumnItem","t0","$","id","active","labelText","onToggle","t","t1","attributes","isDragging","isOver","isSorting","listeners","setNodeRef","transform","t2","t3","t4","t5","filter","Boolean","t6","join","t7","undefined","t8","ref","style","children","size","checked","onChange","ColumnSelector","collectionSlug","onClose","columns","moveColumn","toggleColumn","i18n","uuid","editDepth","searchQuery","setSearchQuery","containerRef","lockedWidth","setLockedWidth","current","offsetWidth","filteredColumns","col","field","columnItems","all","hidden","shown","items","i","accessor","labelWithPrefix","name","filtered","item","toLowerCase","handleDragEnd","moveFromIndex","moveToIndex","allItems","shownCount","fromItem","toItem","fromIsShown","toIsShown","fromIndex","toIndex","allIds","containerStyle","buttonStyle","icon","onClick","e","target","value","placeholder","type","ids","onDragEnd"],"sources":["../../../src/elements/ColumnSelector/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig, StaticLabel } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldIsHiddenOrDisabled, fieldIsID, isFieldDisabled } from 'payload/shared'\nimport React, { useCallback, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { AlignJustifiedIcon } from '../../icons/AlignJustified/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTableColumns } from '../../providers/TableColumns/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { useDraggableSortable } from '../DraggableSortable/useDraggableSortable/index.js'\nimport { Switch } from '../Switch/index.js'\nimport './index.css'\n\nconst baseClass = 'column-selector'\n\n/**\n * Parses a nested field label and returns segments for rendering.\n * - For deeply nested paths (more than 3 segments), truncates to [First, \"...\", Last]\n */\nfunction parseNestedLabel(label: string): string[] {\n if (!label.includes(' > ')) {\n return [label]\n }\n\n const segments = label.split(' > ')\n\n if (segments.length <= 3) {\n return segments\n }\n\n // For deep nesting, show: First / ... / Last\n return [segments[0], '...', segments[segments.length - 1]]\n}\n\ntype NestedLabelProps = {\n readonly label: string\n}\n\nconst NestedLabel: React.FC<NestedLabelProps> = ({ label }) => {\n const segments = parseNestedLabel(label)\n\n if (segments.length === 1) {\n return <>{segments[0]}</>\n }\n\n return (\n <>\n {segments.map((segment, index) => (\n <React.Fragment key={index}>\n {index > 0 && <span className={`${baseClass}__separator`}>/</span>}\n {segment}\n </React.Fragment>\n ))}\n </>\n )\n}\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly onClose?: () => void\n}\n\ntype ColumnItemProps = {\n readonly active: boolean\n readonly id: string\n readonly labelText: string\n readonly onToggle: () => void\n}\n\nconst ColumnItem: React.FC<ColumnItemProps> = ({ id, active, labelText, onToggle }) => {\n const { t } = useTranslation()\n const { attributes, isDragging, isOver, isSorting, listeners, setNodeRef, transform } =\n useDraggableSortable({\n id,\n })\n\n return (\n <div\n aria-label={labelText}\n className={[\n `${baseClass}__item`,\n !active && `${baseClass}__item--inactive`,\n isDragging && `${baseClass}__item--dragging`,\n isOver && isSorting && !isDragging && `${baseClass}__item--over`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={setNodeRef}\n style={{\n // Keep item in place while dragging - don't apply transform\n transform: isDragging ? undefined : transform,\n ...attributes.style,\n }}\n {...attributes}\n >\n <span\n aria-label={t('general:dragToReorder')}\n className={`${baseClass}__drag-handle`}\n {...listeners}\n >\n <AlignJustifiedIcon size={16} />\n </span>\n <span className={`${baseClass}__item-label`}>\n <NestedLabel label={labelText} />\n </span>\n <Switch checked={active} onChange={onToggle} />\n </div>\n )\n}\n\nexport const ColumnSelector: React.FC<Props> = ({ collectionSlug, onClose }) => {\n const { columns, moveColumn, toggleColumn } = useTableColumns()\n const { i18n, t } = useTranslation()\n\n const uuid = useId()\n const editDepth = useEditDepth()\n const [searchQuery, setSearchQuery] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const [lockedWidth, setLockedWidth] = useState<null | number>(null)\n\n // Lock the width when search starts to prevent layout shift\n useLayoutEffect(() => {\n if (!containerRef.current) {\n return\n }\n\n if (searchQuery && lockedWidth === null) {\n // Capture width when search starts\n setLockedWidth(containerRef.current.offsetWidth)\n } else if (!searchQuery && lockedWidth !== null) {\n // Release width lock when search is cleared\n setLockedWidth(null)\n }\n }, [searchQuery, lockedWidth])\n\n const filteredColumns = useMemo(\n () =>\n columns?.filter(\n (col) =>\n !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) &&\n !isFieldDisabled(col.field, 'column'),\n ),\n [columns],\n )\n\n const columnItems = useMemo(() => {\n if (!filteredColumns) {\n return { all: [], hidden: [], shown: [] }\n }\n\n const items = filteredColumns.map((col, i) => {\n const { accessor, active, field } = col\n\n const label =\n 'labelWithPrefix' in field && field.labelWithPrefix !== undefined\n ? field.labelWithPrefix\n : 'label' in field && field.label !== undefined\n ? field.label\n : 'name' in field && field.name !== undefined\n ? field.name\n : accessor\n\n const labelText =\n typeof label === 'string' ? label : getTranslation(label as StaticLabel, i18n)\n\n return {\n id: `${collectionSlug}-${accessor}-${i}${editDepth ? `-${editDepth}-` : ''}${uuid}`,\n accessor,\n active,\n index: i,\n label,\n labelText,\n }\n })\n\n // Filter by search query\n const filtered = searchQuery\n ? items.filter((item) => item.labelText.toLowerCase().includes(searchQuery.toLowerCase()))\n : items\n\n return {\n all: items,\n hidden: filtered.filter((item) => !item.active),\n shown: filtered.filter((item) => item.active),\n }\n }, [collectionSlug, editDepth, filteredColumns, i18n, searchQuery, uuid])\n\n const handleDragEnd = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex) {\n return\n }\n\n // All shown items first, then all hidden items\n const allItems = [...columnItems.shown, ...columnItems.hidden]\n const shownCount = columnItems.shown.length\n const fromItem = allItems[moveFromIndex]\n const toItem = allItems[moveToIndex]\n\n if (!fromItem || !toItem) {\n return\n }\n\n // Determine if crossing sections\n const fromIsShown = moveFromIndex < shownCount\n const toIsShown = moveToIndex < shownCount\n\n if (fromIsShown !== toIsShown) {\n // Cross-section move: just toggle the column's active state (show/hide)\n void toggleColumn(fromItem.accessor)\n // Don't reorder when crossing sections - the toggle handles the change\n return\n }\n\n // Same-section move: perform the reorder\n void moveColumn({\n fromIndex: fromItem.index,\n toIndex: toItem.index,\n })\n },\n [columnItems.shown, columnItems.hidden, moveColumn, toggleColumn],\n )\n\n if (!filteredColumns) {\n return null\n }\n\n // Combined IDs: shown items first, then hidden items\n const allIds = [...columnItems.shown, ...columnItems.hidden].map((item) => item.id)\n\n const containerStyle = lockedWidth\n ? ({ '--column-selector-locked-width': `${lockedWidth}px` } as React.CSSProperties)\n : undefined\n\n return (\n <div\n className={baseClass}\n data-popup-prevent-close\n data-width-locked={lockedWidth ? 'true' : undefined}\n ref={containerRef}\n style={containerStyle}\n >\n <div className={`${baseClass}__header`}>\n <span className={`${baseClass}__title`}>{t('general:editColumns')}</span>\n {onClose && (\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__close`}\n icon={<XIcon size={24} />}\n onClick={onClose}\n />\n )}\n </div>\n <div className={`${baseClass}__search`}>\n <div className={`${baseClass}__search-bar`}>\n <SearchIcon size={24} />\n <input\n aria-label={t('general:searchColumns')}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={t('general:searchColumns')}\n type=\"text\"\n value={searchQuery}\n />\n </div>\n </div>\n <div className={`${baseClass}__content`}>\n <DraggableSortable ids={allIds} onDragEnd={handleDragEnd}>\n {columnItems.shown.length === 0 && columnItems.hidden.length === 0 && searchQuery && (\n <div className={`${baseClass}__no-results`}>{t('general:noMatchesFound')}</div>\n )}\n {columnItems.shown.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:shownInTable')}</div>\n {columnItems.shown.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n {columnItems.hidden.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:notShownInTable')}</div>\n {columnItems.hidden.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n </DraggableSortable>\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAIA,SAASC,cAAc,QAAQ;AAC/B,SAASC,uBAAuB,EAAEC,SAAS,EAAEC,eAAe,QAAQ;AACpE,OAAOC,KAAA,IAASC,WAAW,EAAEC,KAAK,EAAEC,eAAe,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAEtF,SAASC,kBAAkB,QAAQ;AACnC,SAASC,UAAU,QAAQ;AAC3B,SAASC,KAAK,QAAQ;AACtB,SAASC,YAAY,QAAQ;AAC7B,SAASC,eAAe,QAAQ;AAChC,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,iBAAiB,QAAQ;AAClC,SAASC,oBAAoB,QAAQ;AACrC,SAASC,MAAM,QAAQ;AACvB,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB;;;;AAIA,SAASC,iBAAiBC,KAAa;EACrC,IAAI,CAACA,KAAA,CAAMC,QAAQ,CAAC,QAAQ;IAC1B,OAAO,CAACD,KAAA,CAAM;EAChB;EAEA,MAAME,QAAA,GAAWF,KAAA,CAAMG,KAAK,CAAC;EAE7B,IAAID,QAAA,CAASE,MAAM,IAAI,GAAG;IACxB,OAAOF,QAAA;EACT;EAEA;EACA,OAAO,CAACA,QAAQ,CAAC,EAAE,EAAE,OAAOA,QAAQ,CAACA,QAAA,CAASE,MAAM,GAAG,EAAE,CAAC;AAC5D;AAMA,MAAMC,WAAA,GAA0CA,CAAC;EAAEL;AAAK,CAAE;EACxD,MAAME,QAAA,GAAWH,gBAAA,CAAiBC,KAAA;EAElC,IAAIE,QAAA,CAASE,MAAM,KAAK,GAAG;IACzB,oBAAOE,IAAA,CAAAC,SAAA;gBAAGL,QAAQ,CAAC;;EACrB;EAEA,oBACEI,IAAA,CAAAC,SAAA;cACGL,QAAA,CAASM,GAAG,CAAC,CAACC,OAAA,EAASC,KAAA,kBACtBC,KAAA,CAAC9B,KAAA,CAAM+B,QAAQ;iBACZF,KAAA,GAAQ,kBAAKJ,IAAA,CAAC;QAAKO,SAAA,EAAW,GAAGf,SAAA,aAAsB;kBAAE;UACzDW,OAAA;OAFkBC,KAAA;;AAO7B;AAcA,MAAMI,UAAA,GAAwCC,EAAA;EAAA,MAAAC,CAAA,GAAAxC,EAAA;EAAC;IAAAyC,EAAA;IAAAC,MAAA;IAAAC,SAAA;IAAAC;EAAA,IAAAL,EAAmC;EAChF;IAAAM;EAAA,IAAc5B,cAAA;EAAA,IAAA6B,EAAA;EAAA,IAAAN,CAAA,QAAAC,EAAA;IAESK,EAAA;MAAAL;IAAA;IAErBD,CAAA,MAAAC,EAAA;IAAAD,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAHF;IAAAO,UAAA;IAAAC,UAAA;IAAAC,MAAA;IAAAC,SAAA;IAAAC,SAAA;IAAAC,UAAA;IAAAC;EAAA,IACEjC,oBAAA,CAAqB0B,EAErB;EAOI,MAAAQ,EAAA,IAACZ,MAAA,IAAU,GAAApB,SAAA,kBAA8B;EACzC,MAAAiC,EAAA,GAAAP,UAAA,IAAc,GAAA1B,SAAA,kBAA8B;EAC5C,MAAAkC,EAAA,GAAAP,MAAA,IAAUC,SAAA,KAAcF,UAAA,IAAc,GAAA1B,SAAA,cAA0B;EAAA,IAAAmC,EAAA;EAAA,IAAAjB,CAAA,QAAAc,EAAA,IAAAd,CAAA,QAAAe,EAAA,IAAAf,CAAA,QAAAgB,EAAA;IAJvDC,EAAA,IACT,GAAAnC,SAAA,QAAoB,EACpBgC,EAAyC,EACzCC,EAA4C,EAC5CC,EAAgE,EAAAE,MAAA,CAAAC,OAExD;IAAAnB,CAAA,MAAAc,EAAA;IAAAd,CAAA,MAAAe,EAAA;IAAAf,CAAA,MAAAgB,EAAA;IAAAhB,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EANC,MAAAoB,EAAA,GAAAH,EAMD,CAAAI,IAAA,CACF;EAIK,MAAAC,EAAA,GAAAd,UAAA,GAAAe,SAAA,GAAyBV,SAAA;EAAA,IAAAW,EAAA;EAAA,IAAAxB,CAAA,QAAAE,MAAA,IAAAF,CAAA,QAAAO,UAAA,IAAAP,CAAA,QAAAG,SAAA,IAAAH,CAAA,QAAAW,SAAA,IAAAX,CAAA,SAAAI,QAAA,IAAAJ,CAAA,SAAAY,UAAA,IAAAZ,CAAA,SAAAK,CAAA,IAAAL,CAAA,SAAAoB,EAAA,IAAApB,CAAA,SAAAsB,EAAA;IAbxCE,EAAA,GAAA7B,KAAA,CAAC;MAAA,cACaQ,SAAA;MAAAN,SAAA,EACDuB,EAOH;MAAAK,GAAA,EACHb,UAAA;MAAAc,KAAA;QAAAb,SAAA,EAGQS,EAAyB;QAAA,GACjCf,UAAA,CAAAmB;MAAA;MAAA,GAEDnB,UAAU;MAAAoB,QAAA,GAEdrC,IAAA,CAAC;QAAA,cACae,CAAA,CAAE;QAAAR,SAAA,EACH,GAAAf,SAAA,eAA2B;QAAA,GAClC6B,SAAS;QAAAgB,QAAA,EAEbrC,IAAA,CAAAlB,kBAAA;UAAAwD,IAAA;QAAA,C;UAEFtC,IAAA,CAAC;QAAAO,SAAA,EAAgB,GAAAf,SAAA,cAA0B;QAAA6C,QAAA,EACzCrC,IAAA,CAAAD,WAAA;UAAAL,KAAA,EAAoBmB;QAAA,C;UAEtBb,IAAA,CAAAT,MAAA;QAAAgD,OAAA,EAAiB3B,MAAA;QAAA4B,QAAA,EAAkB1B;MAAA,C;;;;;;;;;;;;;;;SA5BrCoB,E;CA+BJ;AAEA,OAAO,MAAMO,cAAA,GAAkCA,CAAC;EAAEC,cAAc;EAAEC;AAAO,CAAE;EACzE,MAAM;IAAEC,OAAO;IAAEC,UAAU;IAAEC;EAAY,CAAE,GAAG5D,eAAA;EAC9C,MAAM;IAAE6D,IAAI;IAAEhC;EAAC,CAAE,GAAG5B,cAAA;EAEpB,MAAM6D,IAAA,GAAOvE,KAAA;EACb,MAAMwE,SAAA,GAAYhE,YAAA;EAClB,MAAM,CAACiE,WAAA,EAAaC,cAAA,CAAe,GAAGtE,QAAA,CAAS;EAC/C,MAAMuE,YAAA,GAAexE,MAAA,CAAuB;EAC5C,MAAM,CAACyE,WAAA,EAAaC,cAAA,CAAe,GAAGzE,QAAA,CAAwB;EAE9D;EACAH,eAAA,CAAgB;IACd,IAAI,CAAC0E,YAAA,CAAaG,OAAO,EAAE;MACzB;IACF;IAEA,IAAIL,WAAA,IAAeG,WAAA,KAAgB,MAAM;MACvC;MACAC,cAAA,CAAeF,YAAA,CAAaG,OAAO,CAACC,WAAW;IACjD,OAAO,IAAI,CAACN,WAAA,IAAeG,WAAA,KAAgB,MAAM;MAC/C;MACAC,cAAA,CAAe;IACjB;EACF,GAAG,CAACJ,WAAA,EAAaG,WAAA,CAAY;EAE7B,MAAMI,eAAA,GAAkB9E,OAAA,CACtB,MACEiE,OAAA,EAAShB,MAAA,CACN8B,GAAA,IACC,EAAEtF,uBAAA,CAAwBsF,GAAA,CAAIC,KAAK,KAAK,CAACtF,SAAA,CAAUqF,GAAA,CAAIC,KAAK,MAC5D,CAACrF,eAAA,CAAgBoF,GAAA,CAAIC,KAAK,EAAE,YAElC,CAACf,OAAA,CAAQ;EAGX,MAAMgB,WAAA,GAAcjF,OAAA,CAAQ;IAC1B,IAAI,CAAC8E,eAAA,EAAiB;MACpB,OAAO;QAAEI,GAAA,EAAK,EAAE;QAAEC,MAAA,EAAQ,EAAE;QAAEC,KAAA,EAAO;MAAG;IAC1C;IAEA,MAAMC,KAAA,GAAQP,eAAA,CAAgBvD,GAAG,CAAC,CAACwD,KAAA,EAAKO,CAAA;MACtC,MAAM;QAAEC,QAAQ;QAAEtD,MAAM;QAAE+C;MAAK,CAAE,GAAGD,KAAA;MAEpC,MAAMhE,KAAA,GACJ,qBAAqBiE,KAAA,IAASA,KAAA,CAAMQ,eAAe,KAAKlC,SAAA,GACpD0B,KAAA,CAAMQ,eAAe,GACrB,WAAWR,KAAA,IAASA,KAAA,CAAMjE,KAAK,KAAKuC,SAAA,GAClC0B,KAAA,CAAMjE,KAAK,GACX,UAAUiE,KAAA,IAASA,KAAA,CAAMS,IAAI,KAAKnC,SAAA,GAChC0B,KAAA,CAAMS,IAAI,GACVF,QAAA;MAEV,MAAMrD,SAAA,GACJ,OAAOnB,KAAA,KAAU,WAAWA,KAAA,GAAQvB,cAAA,CAAeuB,KAAA,EAAsBqD,IAAA;MAE3E,OAAO;QACLpC,EAAA,EAAI,GAAG+B,cAAA,IAAkBwB,QAAA,IAAYD,CAAA,GAAIhB,SAAA,GAAY,IAAIA,SAAA,GAAY,GAAG,KAAKD,IAAA,EAAM;QACnFkB,QAAA;QACAtD,MAAA;QACAR,KAAA,EAAO6D,CAAA;QACPvE,KAAA;QACAmB;MACF;IACF;IAEA;IACA,MAAMwD,QAAA,GAAWnB,WAAA,GACbc,KAAA,CAAMpC,MAAM,CAAE0C,IAAA,IAASA,IAAA,CAAKzD,SAAS,CAAC0D,WAAW,GAAG5E,QAAQ,CAACuD,WAAA,CAAYqB,WAAW,OACpFP,KAAA;IAEJ,OAAO;MACLH,GAAA,EAAKG,KAAA;MACLF,MAAA,EAAQO,QAAA,CAASzC,MAAM,CAAE0C,MAAA,IAAS,CAACA,MAAA,CAAK1D,MAAM;MAC9CmD,KAAA,EAAOM,QAAA,CAASzC,MAAM,CAAE0C,MAAA,IAASA,MAAA,CAAK1D,MAAM;IAC9C;EACF,GAAG,CAAC8B,cAAA,EAAgBO,SAAA,EAAWQ,eAAA,EAAiBV,IAAA,EAAMG,WAAA,EAAaF,IAAA,CAAK;EAExE,MAAMwB,aAAA,GAAgBhG,WAAA,CACpB,CAAC;IAAEiG,aAAa;IAAEC;EAAW,CAAkD;IAC7E,IAAID,aAAA,KAAkBC,WAAA,EAAa;MACjC;IACF;IAEA;IACA,MAAMC,QAAA,GAAW,C,GAAIf,WAAA,CAAYG,KAAK,E,GAAKH,WAAA,CAAYE,MAAM,CAAC;IAC9D,MAAMc,UAAA,GAAahB,WAAA,CAAYG,KAAK,CAACjE,MAAM;IAC3C,MAAM+E,QAAA,GAAWF,QAAQ,CAACF,aAAA,CAAc;IACxC,MAAMK,MAAA,GAASH,QAAQ,CAACD,WAAA,CAAY;IAEpC,IAAI,CAACG,QAAA,IAAY,CAACC,MAAA,EAAQ;MACxB;IACF;IAEA;IACA,MAAMC,WAAA,GAAcN,aAAA,GAAgBG,UAAA;IACpC,MAAMI,SAAA,GAAYN,WAAA,GAAcE,UAAA;IAEhC,IAAIG,WAAA,KAAgBC,SAAA,EAAW;MAC7B;MACA,KAAKlC,YAAA,CAAa+B,QAAA,CAASX,QAAQ;MACnC;MACA;IACF;IAEA;IACA,KAAKrB,UAAA,CAAW;MACdoC,SAAA,EAAWJ,QAAA,CAASzE,KAAK;MACzB8E,OAAA,EAASJ,MAAA,CAAO1E;IAClB;EACF,GACA,CAACwD,WAAA,CAAYG,KAAK,EAAEH,WAAA,CAAYE,MAAM,EAAEjB,UAAA,EAAYC,YAAA,CAAa;EAGnE,IAAI,CAACW,eAAA,EAAiB;IACpB,OAAO;EACT;EAEA;EACA,MAAM0B,MAAA,GAAS,C,GAAIvB,WAAA,CAAYG,KAAK,E,GAAKH,WAAA,CAAYE,MAAM,CAAC,CAAC5D,GAAG,CAAEoE,MAAA,IAASA,MAAA,CAAK3D,EAAE;EAElF,MAAMyE,cAAA,GAAiB/B,WAAA,GAClB;IAAE,kCAAkC,GAAGA,WAAA;EAAgB,IACxDpB,SAAA;EAEJ,oBACE5B,KAAA,CAAC;IACCE,SAAA,EAAWf,SAAA;IACX,0BAAwB;IACxB,qBAAmB6D,WAAA,GAAc,SAASpB,SAAA;IAC1CE,GAAA,EAAKiB,YAAA;IACLhB,KAAA,EAAOgD,cAAA;4BAEP/E,KAAA,CAAC;MAAIE,SAAA,EAAW,GAAGf,SAAA,UAAmB;8BACpCQ,IAAA,CAAC;QAAKO,SAAA,EAAW,GAAGf,SAAA,SAAkB;kBAAGuB,CAAA,CAAE;UAC1C4B,OAAA,iBACC3C,IAAA,CAACZ,MAAA;QACC,cAAY2B,CAAA,CAAE;QACdsE,WAAA,EAAY;QACZ9E,SAAA,EAAW,GAAGf,SAAA,SAAkB;QAChC8F,IAAA,eAAMtF,IAAA,CAAChB,KAAA;UAAMsD,IAAA,EAAM;;QACnBiD,OAAA,EAAS5C;;qBAIf3C,IAAA,CAAC;MAAIO,SAAA,EAAW,GAAGf,SAAA,UAAmB;gBACpC,aAAAa,KAAA,CAAC;QAAIE,SAAA,EAAW,GAAGf,SAAA,cAAuB;gCACxCQ,IAAA,CAACjB,UAAA;UAAWuD,IAAA,EAAM;yBAClBtC,IAAA,CAAC;UACC,cAAYe,CAAA,CAAE;UACdR,SAAA,EAAW,GAAGf,SAAA,gBAAyB;UACvCgD,QAAA,EAAWgD,CAAA,IAAMrC,cAAA,CAAeqC,CAAA,CAAEC,MAAM,CAACC,KAAK;UAC9CC,WAAA,EAAa5E,CAAA,CAAE;UACf6E,IAAA,EAAK;UACLF,KAAA,EAAOxC;;;qBAIblD,IAAA,CAAC;MAAIO,SAAA,EAAW,GAAGf,SAAA,WAAoB;gBACrC,aAAAa,KAAA,CAAChB,iBAAA;QAAkBwG,GAAA,EAAKV,MAAA;QAAQW,SAAA,EAAWtB,aAAA;mBACxCZ,WAAA,CAAYG,KAAK,CAACjE,MAAM,KAAK,KAAK8D,WAAA,CAAYE,MAAM,CAAChE,MAAM,KAAK,KAAKoD,WAAA,iBACpElD,IAAA,CAAC;UAAIO,SAAA,EAAW,GAAGf,SAAA,cAAuB;oBAAGuB,CAAA,CAAE;YAEhD6C,WAAA,CAAYG,KAAK,CAACjE,MAAM,GAAG,kBAC1BO,KAAA,CAAC;UAAIE,SAAA,EAAW,GAAGf,SAAA,WAAoB;kCACrCQ,IAAA,CAAC;YAAIO,SAAA,EAAW,GAAGf,SAAA,kBAA2B;sBAAGuB,CAAA,CAAE;cAClD6C,WAAA,CAAYG,KAAK,CAAC7D,GAAG,CAAEoE,MAAA,iBACtBtE,IAAA,CAACQ,UAAA;YACCI,MAAA,EAAQ0D,MAAA,CAAK1D,MAAM;YACnBD,EAAA,EAAI2D,MAAA,CAAK3D,EAAE;YAEXE,SAAA,EAAWyD,MAAA,CAAKzD,SAAS;YACzBC,QAAA,EAAUA,CAAA;cACR,KAAKgC,YAAA,CAAawB,MAAA,CAAKJ,QAAQ;YACjC;aAJKI,MAAA,CAAK3D,EAAE;YASnBiD,WAAA,CAAYE,MAAM,CAAChE,MAAM,GAAG,kBAC3BO,KAAA,CAAC;UAAIE,SAAA,EAAW,GAAGf,SAAA,WAAoB;kCACrCQ,IAAA,CAAC;YAAIO,SAAA,EAAW,GAAGf,SAAA,kBAA2B;sBAAGuB,CAAA,CAAE;cAClD6C,WAAA,CAAYE,MAAM,CAAC5D,GAAG,CAAEoE,MAAA,iBACvBtE,IAAA,CAACQ,UAAA;YACCI,MAAA,EAAQ0D,MAAA,CAAK1D,MAAM;YACnBD,EAAA,EAAI2D,MAAA,CAAK3D,EAAE;YAEXE,SAAA,EAAWyD,MAAA,CAAKzD,SAAS;YACzBC,QAAA,EAAUA,CAAA;cACR,KAAKgC,YAAA,CAAawB,MAAA,CAAKJ,QAAQ;YACjC;aAJKI,MAAA,CAAK3D,EAAE;;;;;AAa9B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","fieldIsHiddenOrDisabled","fieldIsID","isFieldDisabled","React","useCallback","useId","useLayoutEffect","useMemo","useRef","useState","AlignJustifiedIcon","SearchIcon","XIcon","useEditDepth","useTableColumns","useTranslation","Button","DraggableSortable","useDraggableSortable","Switch","baseClass","parseNestedLabel","label","includes","segments","split","length","NestedLabel","_jsx","_Fragment","map","segment","index","_jsxs","Fragment","className","ColumnItem","t0","$","id","active","labelText","onToggle","t","t1","attributes","isDragging","isOver","isSorting","listeners","setNodeRef","transform","t2","t3","t4","t5","filter","Boolean","t6","join","t7","undefined","t8","ref","style","children","size","checked","onChange","ColumnSelector","collectionSlug","onClose","columns","moveColumn","toggleColumn","i18n","uuid","editDepth","searchQuery","setSearchQuery","containerRef","lockedWidth","setLockedWidth","current","offsetWidth","filteredColumns","col","field","columnItems","all","hidden","shown","items","i","accessor","labelWithPrefix","name","filtered","item","toLowerCase","handleDragEnd","moveFromIndex","moveToIndex","allItems","shownCount","fromItem","toItem","fromIsShown","toIsShown","fromIndex","toIndex","allIds","containerStyle","buttonStyle","icon","onClick","e","target","value","placeholder","type","ids","onDragEnd"],"sources":["../../../src/elements/ColumnSelector/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig, StaticLabel } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldIsHiddenOrDisabled, fieldIsID, isFieldDisabled } from 'payload/shared'\nimport React, { useCallback, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { AlignJustifiedIcon } from '../../icons/AlignJustified/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTableColumns } from '../../providers/TableColumns/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { useDraggableSortable } from '../DraggableSortable/useDraggableSortable/index.js'\nimport { Switch } from '../Switch/index.js'\nimport './index.css'\n\nconst baseClass = 'column-selector'\n\n/**\n * Parses a nested field label and returns segments for rendering.\n * - For deeply nested paths (more than 3 segments), truncates to [First, \"...\", Last]\n */\nfunction parseNestedLabel(label: string): string[] {\n if (!label.includes(' > ')) {\n return [label]\n }\n\n const segments = label.split(' > ')\n\n if (segments.length <= 3) {\n return segments\n }\n\n // For deep nesting, show: First / ... / Last\n return [segments[0], '...', segments[segments.length - 1]]\n}\n\ntype NestedLabelProps = {\n readonly label: string\n}\n\nconst NestedLabel: React.FC<NestedLabelProps> = ({ label }) => {\n const segments = parseNestedLabel(label)\n\n if (segments.length === 1) {\n return <>{segments[0]}</>\n }\n\n return (\n <>\n {segments.map((segment, index) => (\n <React.Fragment key={index}>\n {index > 0 && <span className={`${baseClass}__separator`}>/</span>}\n {segment}\n </React.Fragment>\n ))}\n </>\n )\n}\n\nexport type Props = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly onClose?: () => void\n}\n\ntype ColumnItemProps = {\n readonly active: boolean\n readonly id: string\n readonly labelText: string\n readonly onToggle: () => void\n}\n\nconst ColumnItem: React.FC<ColumnItemProps> = ({ id, active, labelText, onToggle }) => {\n const { t } = useTranslation()\n const { attributes, isDragging, isOver, isSorting, listeners, setNodeRef, transform } =\n useDraggableSortable({\n id,\n })\n\n return (\n <div\n aria-label={labelText}\n className={[\n `${baseClass}__item`,\n !active && `${baseClass}__item--inactive`,\n isDragging && `${baseClass}__item--dragging`,\n isOver && isSorting && !isDragging && `${baseClass}__item--over`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={setNodeRef}\n style={{\n // Keep item in place while dragging - don't apply transform\n transform: isDragging ? undefined : transform,\n ...attributes.style,\n }}\n {...attributes}\n >\n <span\n aria-label={t('general:dragToReorder')}\n className={`${baseClass}__drag-handle`}\n {...listeners}\n >\n <AlignJustifiedIcon size={16} />\n </span>\n <span className={`${baseClass}__item-label`}>\n <NestedLabel label={labelText} />\n </span>\n <Switch checked={active} onChange={onToggle} />\n </div>\n )\n}\n\nexport const ColumnSelector: React.FC<Props> = ({ collectionSlug, onClose }) => {\n const { columns, moveColumn, toggleColumn } = useTableColumns()\n const { i18n, t } = useTranslation()\n\n const uuid = useId()\n const editDepth = useEditDepth()\n const [searchQuery, setSearchQuery] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const [lockedWidth, setLockedWidth] = useState<null | number>(null)\n\n // Lock the width when search starts to prevent layout shift\n useLayoutEffect(() => {\n if (!containerRef.current) {\n return\n }\n\n if (searchQuery && lockedWidth === null) {\n // Capture width when search starts\n setLockedWidth(containerRef.current.offsetWidth)\n } else if (!searchQuery && lockedWidth !== null) {\n // Release width lock when search is cleared\n setLockedWidth(null)\n }\n }, [searchQuery, lockedWidth])\n\n const filteredColumns = useMemo(\n () =>\n columns?.filter(\n (col) =>\n !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) &&\n !isFieldDisabled(col.field, 'column'),\n ),\n [columns],\n )\n\n const columnItems = useMemo(() => {\n if (!filteredColumns) {\n return { all: [], hidden: [], shown: [] }\n }\n\n const items = filteredColumns.map((col, i) => {\n const { accessor, active, field } = col\n\n const label =\n 'labelWithPrefix' in field && field.labelWithPrefix !== undefined\n ? field.labelWithPrefix\n : 'label' in field && field.label !== undefined && field.label !== false\n ? field.label\n : 'name' in field && field.name !== undefined\n ? field.name\n : accessor\n\n const labelText =\n typeof label === 'string' ? label : getTranslation(label as StaticLabel, i18n)\n\n return {\n id: `${collectionSlug}-${accessor}-${i}${editDepth ? `-${editDepth}-` : ''}${uuid}`,\n accessor,\n active,\n index: i,\n label,\n labelText,\n }\n })\n\n // Filter by search query\n const filtered = searchQuery\n ? items.filter((item) => item.labelText.toLowerCase().includes(searchQuery.toLowerCase()))\n : items\n\n return {\n all: items,\n hidden: filtered.filter((item) => !item.active),\n shown: filtered.filter((item) => item.active),\n }\n }, [collectionSlug, editDepth, filteredColumns, i18n, searchQuery, uuid])\n\n const handleDragEnd = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex) {\n return\n }\n\n // All shown items first, then all hidden items\n const allItems = [...columnItems.shown, ...columnItems.hidden]\n const shownCount = columnItems.shown.length\n const fromItem = allItems[moveFromIndex]\n const toItem = allItems[moveToIndex]\n\n if (!fromItem || !toItem) {\n return\n }\n\n // Determine if crossing sections\n const fromIsShown = moveFromIndex < shownCount\n const toIsShown = moveToIndex < shownCount\n\n if (fromIsShown !== toIsShown) {\n // Cross-section move: just toggle the column's active state (show/hide)\n void toggleColumn(fromItem.accessor)\n // Don't reorder when crossing sections - the toggle handles the change\n return\n }\n\n // Same-section move: perform the reorder\n void moveColumn({\n fromIndex: fromItem.index,\n toIndex: toItem.index,\n })\n },\n [columnItems.shown, columnItems.hidden, moveColumn, toggleColumn],\n )\n\n if (!filteredColumns) {\n return null\n }\n\n // Combined IDs: shown items first, then hidden items\n const allIds = [...columnItems.shown, ...columnItems.hidden].map((item) => item.id)\n\n const containerStyle = lockedWidth\n ? ({ '--column-selector-locked-width': `${lockedWidth}px` } as React.CSSProperties)\n : undefined\n\n return (\n <div\n className={baseClass}\n data-popup-prevent-close\n data-width-locked={lockedWidth ? 'true' : undefined}\n ref={containerRef}\n style={containerStyle}\n >\n <div className={`${baseClass}__header`}>\n <span className={`${baseClass}__title`}>{t('general:editColumns')}</span>\n {onClose && (\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__close`}\n icon={<XIcon size={24} />}\n onClick={onClose}\n />\n )}\n </div>\n <div className={`${baseClass}__search`}>\n <div className={`${baseClass}__search-bar`}>\n <SearchIcon size={24} />\n <input\n aria-label={t('general:searchColumns')}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={t('general:searchColumns')}\n type=\"text\"\n value={searchQuery}\n />\n </div>\n </div>\n <div className={`${baseClass}__content`}>\n <DraggableSortable ids={allIds} onDragEnd={handleDragEnd}>\n {columnItems.shown.length === 0 && columnItems.hidden.length === 0 && searchQuery && (\n <div className={`${baseClass}__no-results`}>{t('general:noMatchesFound')}</div>\n )}\n {columnItems.shown.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:shownInTable')}</div>\n {columnItems.shown.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n {columnItems.hidden.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:notShownInTable')}</div>\n {columnItems.hidden.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n </DraggableSortable>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -94,7 +94,7 @@
94
94
  display: flex;
95
95
  flex-direction: column;
96
96
  gap: var(--spacer-3);
97
- padding-top: var(--spacer-5);
97
+ padding-top: var(--spacer-4);
98
98
  padding-left: var(--gutter-h);
99
99
  padding-right: var(--gutter-h);
100
100
  padding-bottom: var(--spacing-view-bottom);
@@ -14,4 +14,29 @@ export declare const DrawerDepthProvider: React.FC<{
14
14
  children: React.ReactNode;
15
15
  }>;
16
16
  export declare const useDrawerDepth: () => number;
17
+ type DrawerStackContextType = {
18
+ /** Depths of every currently-open drawer, used to compute layer offsets. */
19
+ openDrawerDepths: number[];
20
+ registerDrawer: (uid: string, depth: number) => void;
21
+ unregisterDrawer: (uid: string) => void;
22
+ };
23
+ /**
24
+ * Tracks the depths of all currently-open drawers so each drawer can compute
25
+ * its leftward offset relative to the rest of the open stack.
26
+ *
27
+ * Why this is needed: drawers are anchored to the right edge and stack as real
28
+ * layers. When a child drawer opens on top of its parent(s), every drawer
29
+ * beneath it must slide left to peek out from underneath the active (topmost)
30
+ * drawer — and slide back when that child closes. A drawer's own depth is
31
+ * static, so it cannot know on its own whether something deeper is currently
32
+ * open; that requires shared runtime state about the whole open stack.
33
+ *
34
+ * We track real `Drawer` instances (rather than scanning modal state by slug
35
+ * name) so confirmation modals like `leave-without-saving-...` never count, and
36
+ * so stacking never depends on slug naming conventions.
37
+ */
38
+ export declare const DrawerStackProvider: React.FC<{
39
+ children: React.ReactNode;
40
+ }>;
41
+ export declare const useDrawerStack: () => DrawerStackContextType;
17
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAqE,MAAM,OAAO,CAAA;AAEzF,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKrD,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,WAAW,MAAM,CAAA;AAO9B,eAAO,MAAM,gBAAgB,GAAI,iBAAiB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,MACzD,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwChD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAIlC,CAAA;AAwGD,eAAO,MAAM,kBAAkB,uBAAmB,CAAA;AAElD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAKvE,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Drawer/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KASN,MAAM,OAAO,CAAA;AAEd,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKrD,OAAO,aAAa,CAAA;AAIpB,eAAO,MAAM,WAAW,MAAM,CAAA;AAE9B,eAAO,MAAM,gBAAgB,GAAI,iBAAiB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAG,MACzD,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwChD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAIlC,CAAA;AA2GD,eAAO,MAAM,kBAAkB,uBAAmB,CAAA;AAElD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CAKvE,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,MAAiC,CAAA;AAEnE,KAAK,sBAAsB,GAAG;IAC5B,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC,CAAA;AAQD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CA6BvE,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,sBAAiD,CAAA"}
@@ -3,17 +3,13 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { Modal, useModal } from '@faceless-ui/modal';
6
- import React, { createContext, use, useCallback, useLayoutEffect, useState } from 'react';
6
+ import React, { createContext, use, useCallback, useEffect, useId, useLayoutEffect, useMemo, useState } from 'react';
7
7
  import { ChevronIcon } from '../../icons/Chevron/index.js';
8
8
  import { useTranslation } from '../../providers/Translation/index.js';
9
9
  import { Button } from '../Button/index.js';
10
10
  import './index.css';
11
11
  const baseClass = 'drawer';
12
12
  export const drawerZBase = 100;
13
- // Slug prefixes for every real drawer variant (base, document, list). Used to
14
- // count stacked drawers without matching confirmation modals like
15
- // `leave-without-saving-...`.
16
- const drawerSlugPrefixes = ['drawer_', 'doc-drawer_', 'list-drawer_'];
17
13
  export const formatDrawerSlug = ({
18
14
  slug,
19
15
  depth
@@ -74,7 +70,7 @@ export const Drawer = props => /*#__PURE__*/_jsx(DrawerDepthProvider, {
74
70
  })
75
71
  });
76
72
  const DrawerInner = t0 => {
77
- const $ = _c(21);
73
+ const $ = _c(28);
78
74
  const {
79
75
  slug,
80
76
  children,
@@ -92,57 +88,84 @@ const DrawerInner = t0 => {
92
88
  modalState
93
89
  } = useModal();
94
90
  const drawerDepth = useDrawerDepth();
91
+ const uid = useId();
92
+ const {
93
+ openDrawerDepths,
94
+ registerDrawer,
95
+ unregisterDrawer
96
+ } = useDrawerStack();
95
97
  const isOpen = !!modalState[slug]?.isOpen;
96
- const openDrawerCount = Object.entries(modalState).filter(_temp).length;
97
- const layersFromTop = Math.max(openDrawerCount - drawerDepth, 0);
98
- const [animateIn, setAnimateIn] = useState(isOpen);
99
98
  let t1;
100
99
  let t2;
101
- if ($[0] !== isOpen) {
100
+ if ($[0] !== drawerDepth || $[1] !== isOpen || $[2] !== registerDrawer || $[3] !== uid || $[4] !== unregisterDrawer) {
102
101
  t1 = () => {
102
+ if (isOpen) {
103
+ registerDrawer(uid, drawerDepth);
104
+ return () => unregisterDrawer(uid);
105
+ }
106
+ };
107
+ t2 = [isOpen, uid, drawerDepth, registerDrawer, unregisterDrawer];
108
+ $[0] = drawerDepth;
109
+ $[1] = isOpen;
110
+ $[2] = registerDrawer;
111
+ $[3] = uid;
112
+ $[4] = unregisterDrawer;
113
+ $[5] = t1;
114
+ $[6] = t2;
115
+ } else {
116
+ t1 = $[5];
117
+ t2 = $[6];
118
+ }
119
+ useEffect(t1, t2);
120
+ const layersFromTop = openDrawerDepths.filter(depth => depth > drawerDepth).length;
121
+ const [animateIn, setAnimateIn] = useState(isOpen);
122
+ let t3;
123
+ let t4;
124
+ if ($[7] !== isOpen) {
125
+ t3 = () => {
103
126
  setAnimateIn(isOpen);
104
127
  };
105
- t2 = [isOpen];
106
- $[0] = isOpen;
107
- $[1] = t1;
108
- $[2] = t2;
128
+ t4 = [isOpen];
129
+ $[7] = isOpen;
130
+ $[8] = t3;
131
+ $[9] = t4;
109
132
  } else {
110
- t1 = $[1];
111
- t2 = $[2];
133
+ t3 = $[8];
134
+ t4 = $[9];
112
135
  }
113
- useLayoutEffect(t1, t2);
136
+ useLayoutEffect(t3, t4);
114
137
  if (isOpen) {
115
- const t3 = animateIn && `${baseClass}--is-open`;
116
- let t4;
117
- if ($[3] !== className || $[4] !== t3) {
118
- t4 = [className, baseClass, t3].filter(Boolean);
119
- $[3] = className;
120
- $[4] = t3;
121
- $[5] = t4;
138
+ const t5 = animateIn && `${baseClass}--is-open`;
139
+ let t6;
140
+ if ($[10] !== className || $[11] !== t5) {
141
+ t6 = [className, baseClass, t5].filter(Boolean);
142
+ $[10] = className;
143
+ $[11] = t5;
144
+ $[12] = t6;
122
145
  } else {
123
- t4 = $[5];
146
+ t6 = $[12];
124
147
  }
125
- const t5 = t4.join(" ");
126
- const t6 = `calc(${layersFromTop} * var(--spacer-3))`;
127
- const t7 = drawerZBase + drawerDepth;
128
- let t8;
129
- if ($[6] !== Header || $[7] !== children || $[8] !== closeModal || $[9] !== headerActions || $[10] !== hoverTitle || $[11] !== slug || $[12] !== t || $[13] !== t5 || $[14] !== t6 || $[15] !== t7 || $[16] !== title) {
130
- let t9;
131
- if ($[18] !== closeModal || $[19] !== slug) {
132
- t9 = () => closeModal(slug);
133
- $[18] = closeModal;
134
- $[19] = slug;
135
- $[20] = t9;
148
+ const t7 = t6.join(" ");
149
+ const t8 = `calc(${layersFromTop} * var(--spacer-3))`;
150
+ const t9 = drawerZBase + drawerDepth;
151
+ let t10;
152
+ if ($[13] !== Header || $[14] !== children || $[15] !== closeModal || $[16] !== headerActions || $[17] !== hoverTitle || $[18] !== slug || $[19] !== t || $[20] !== t7 || $[21] !== t8 || $[22] !== t9 || $[23] !== title) {
153
+ let t11;
154
+ if ($[25] !== closeModal || $[26] !== slug) {
155
+ t11 = () => closeModal(slug);
156
+ $[25] = closeModal;
157
+ $[26] = slug;
158
+ $[27] = t11;
136
159
  } else {
137
- t9 = $[20];
160
+ t11 = $[27];
138
161
  }
139
- t8 = _jsxs(Modal, {
140
- className: t5,
162
+ t10 = _jsxs(Modal, {
163
+ className: t7,
141
164
  closeOnBlur: false,
142
165
  slug,
143
166
  style: {
144
- "--drawer-layer-offset": t6,
145
- zIndex: t7
167
+ "--drawer-layer-offset": t8,
168
+ zIndex: t9
146
169
  },
147
170
  children: [_jsx("div", {
148
171
  className: `${baseClass}__blur-bg`
@@ -150,7 +173,7 @@ const DrawerInner = t0 => {
150
173
  "aria-label": t("general:close"),
151
174
  className: `${baseClass}__close`,
152
175
  id: `close-drawer__${slug}`,
153
- onClick: t9,
176
+ onClick: t11,
154
177
  type: "button"
155
178
  }), _jsxs("div", {
156
179
  className: `${baseClass}__content`,
@@ -175,28 +198,28 @@ const DrawerInner = t0 => {
175
198
  children: title
176
199
  }), headerActions && headerActions.length > 0 && _jsx("div", {
177
200
  className: `${baseClass}__header__actions`,
178
- children: headerActions.map(_temp2)
201
+ children: headerActions.map(_temp)
179
202
  })]
180
203
  }), children]
181
204
  })]
182
205
  })]
183
206
  });
184
- $[6] = Header;
185
- $[7] = children;
186
- $[8] = closeModal;
187
- $[9] = headerActions;
188
- $[10] = hoverTitle;
189
- $[11] = slug;
190
- $[12] = t;
191
- $[13] = t5;
192
- $[14] = t6;
193
- $[15] = t7;
194
- $[16] = title;
195
- $[17] = t8;
207
+ $[13] = Header;
208
+ $[14] = children;
209
+ $[15] = closeModal;
210
+ $[16] = headerActions;
211
+ $[17] = hoverTitle;
212
+ $[18] = slug;
213
+ $[19] = t;
214
+ $[20] = t7;
215
+ $[21] = t8;
216
+ $[22] = t9;
217
+ $[23] = title;
218
+ $[24] = t10;
196
219
  } else {
197
- t8 = $[17];
220
+ t10 = $[24];
198
221
  }
199
- return t8;
222
+ return t10;
200
223
  }
201
224
  return null;
202
225
  };
@@ -223,11 +246,60 @@ export const DrawerDepthProvider = t0 => {
223
246
  return t1;
224
247
  };
225
248
  export const useDrawerDepth = () => use(DrawerDepthContext);
226
- function _temp(t0) {
227
- const [modalSlug, state] = t0;
228
- return state?.isOpen && drawerSlugPrefixes.some(p => modalSlug.startsWith(p));
229
- }
230
- function _temp2(action, i) {
249
+ const DrawerStackContext = /*#__PURE__*/createContext({
250
+ openDrawerDepths: [],
251
+ registerDrawer: () => {},
252
+ unregisterDrawer: () => {}
253
+ });
254
+ /**
255
+ * Tracks the depths of all currently-open drawers so each drawer can compute
256
+ * its leftward offset relative to the rest of the open stack.
257
+ *
258
+ * Why this is needed: drawers are anchored to the right edge and stack as real
259
+ * layers. When a child drawer opens on top of its parent(s), every drawer
260
+ * beneath it must slide left to peek out from underneath the active (topmost)
261
+ * drawer — and slide back when that child closes. A drawer's own depth is
262
+ * static, so it cannot know on its own whether something deeper is currently
263
+ * open; that requires shared runtime state about the whole open stack.
264
+ *
265
+ * We track real `Drawer` instances (rather than scanning modal state by slug
266
+ * name) so confirmation modals like `leave-without-saving-...` never count, and
267
+ * so stacking never depends on slug naming conventions.
268
+ */
269
+ export const DrawerStackProvider = ({
270
+ children
271
+ }) => {
272
+ const [openDrawers, setOpenDrawers] = useState({});
273
+ const registerDrawer = useCallback((uid, depth) => {
274
+ setOpenDrawers(prev => prev[uid] === depth ? prev : {
275
+ ...prev,
276
+ [uid]: depth
277
+ });
278
+ }, []);
279
+ const unregisterDrawer = useCallback(uid_0 => {
280
+ setOpenDrawers(prev_0 => {
281
+ if (!(uid_0 in prev_0)) {
282
+ return prev_0;
283
+ }
284
+ const next = {
285
+ ...prev_0
286
+ };
287
+ delete next[uid_0];
288
+ return next;
289
+ });
290
+ }, []);
291
+ const value = useMemo(() => ({
292
+ openDrawerDepths: Object.values(openDrawers),
293
+ registerDrawer,
294
+ unregisterDrawer
295
+ }), [openDrawers, registerDrawer, unregisterDrawer]);
296
+ return /*#__PURE__*/_jsx(DrawerStackContext, {
297
+ value: value,
298
+ children: children
299
+ });
300
+ };
301
+ export const useDrawerStack = () => use(DrawerStackContext);
302
+ function _temp(action, i) {
231
303
  return _jsx(Button, {
232
304
  buttonStyle: action.style || "secondary",
233
305
  disabled: action.disabled,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","Modal","useModal","React","createContext","use","useCallback","useLayoutEffect","useState","ChevronIcon","useTranslation","Button","baseClass","drawerZBase","drawerSlugPrefixes","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","t0","$","buttonStyle","children","className","disabled","onClick","rest","openModal","t1","e","handleClick","_jsx","type","Drawer","props","DrawerDepthProvider","DrawerInner","Header","headerActions","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","isOpen","openDrawerCount","Object","entries","filter","_temp","length","layersFromTop","Math","max","animateIn","setAnimateIn","t2","t3","t4","Boolean","t5","join","t6","t7","t8","t9","_jsxs","closeOnBlur","style","zIndex","id","undefined","icon","direction","size","map","_temp2","DrawerDepthContext","parentDepth","value","modalSlug","state","some","p","startsWith","action","i","margin","label"],"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, { createContext, use, useCallback, useLayoutEffect, useState } from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.css'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\n// Slug prefixes for every real drawer variant (base, document, list). Used to\n// count stacked drawers without matching confirmation modals like\n// `leave-without-saving-...`.\nconst drawerSlugPrefixes = ['drawer_', 'doc-drawer_', 'list-drawer_']\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n buttonStyle,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n if (buttonStyle) {\n return (\n <Button\n buttonStyle={buttonStyle}\n className={className}\n disabled={disabled}\n onClick={handleClick}\n {...rest}\n >\n {children}\n </Button>\n )\n }\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = (props) => (\n <DrawerDepthProvider>\n <DrawerInner {...props} />\n </DrawerDepthProvider>\n)\n\nconst DrawerInner: React.FC<Props> = ({\n slug,\n children,\n className,\n Header,\n headerActions,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n // Nested drawers stack as real layers: each ancestor stays visible and is\n // pushed 16px left per drawer on top of it. Every drawer paints its own\n // backdrop scrim, so deeper layers stack more scrims and appear darker.\n const openDrawerCount = Object.entries(modalState).filter(\n ([modalSlug, state]) =>\n state?.isOpen && drawerSlugPrefixes.some((p) => modalSlug.startsWith(p)),\n ).length\n const layersFromTop = Math.max(openDrawerCount - drawerDepth, 0)\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <Modal\n className={[className, baseClass, animateIn && `${baseClass}--is-open`]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n slug={slug}\n style={\n {\n '--drawer-layer-offset': `calc(${layersFromTop} * var(--spacer-3))`,\n zIndex: drawerZBase + drawerDepth,\n } as React.CSSProperties\n }\n >\n <div className={`${baseClass}__blur-bg`} />\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__blur-bg-content`} />\n <div className={`${baseClass}__content-children`}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(slug)}\n />\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {headerActions && headerActions.length > 0 && (\n <div className={`${baseClass}__header__actions`}>\n {headerActions.map((action, i) => (\n <Button\n buttonStyle={action.style || 'secondary'}\n disabled={action.disabled}\n key={i}\n margin={false}\n onClick={action.onClick}\n size=\"medium\"\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </Modal>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(0)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","Modal","useModal","React","createContext","use","useCallback","useEffect","useId","useLayoutEffect","useMemo","useState","ChevronIcon","useTranslation","Button","baseClass","drawerZBase","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","t0","$","buttonStyle","children","className","disabled","onClick","rest","openModal","t1","e","handleClick","_jsx","type","Drawer","props","DrawerDepthProvider","DrawerInner","Header","headerActions","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","uid","openDrawerDepths","registerDrawer","unregisterDrawer","useDrawerStack","isOpen","t2","layersFromTop","filter","length","animateIn","setAnimateIn","t3","t4","t5","t6","Boolean","t7","join","t8","t9","t10","t11","_jsxs","closeOnBlur","style","zIndex","id","undefined","icon","direction","size","map","_temp","DrawerDepthContext","parentDepth","value","DrawerStackContext","DrawerStackProvider","openDrawers","setOpenDrawers","prev","next","Object","values","action","i","margin","label"],"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, {\n createContext,\n use,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport './index.css'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n buttonStyle,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n if (buttonStyle) {\n return (\n <Button\n buttonStyle={buttonStyle}\n className={className}\n disabled={disabled}\n onClick={handleClick}\n {...rest}\n >\n {children}\n </Button>\n )\n }\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = (props) => (\n <DrawerDepthProvider>\n <DrawerInner {...props} />\n </DrawerDepthProvider>\n)\n\nconst DrawerInner: React.FC<Props> = ({\n slug,\n children,\n className,\n Header,\n headerActions,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n const uid = useId()\n const { openDrawerDepths, registerDrawer, unregisterDrawer } = useDrawerStack()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n useEffect(() => {\n if (isOpen) {\n registerDrawer(uid, drawerDepth)\n\n return () => unregisterDrawer(uid)\n }\n }, [isOpen, uid, drawerDepth, registerDrawer, unregisterDrawer])\n\n const layersFromTop = openDrawerDepths.filter((depth) => depth > drawerDepth).length\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <Modal\n className={[className, baseClass, animateIn && `${baseClass}--is-open`]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n slug={slug}\n style={\n {\n '--drawer-layer-offset': `calc(${layersFromTop} * var(--spacer-3))`,\n zIndex: drawerZBase + drawerDepth,\n } as React.CSSProperties\n }\n >\n <div className={`${baseClass}__blur-bg`} />\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div className={`${baseClass}__content`}>\n <div className={`${baseClass}__blur-bg-content`} />\n <div className={`${baseClass}__content-children`}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__header__close`}\n icon={<ChevronIcon direction=\"left\" size={24} />}\n onClick={() => closeModal(slug)}\n />\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {headerActions && headerActions.length > 0 && (\n <div className={`${baseClass}__header__actions`}>\n {headerActions.map((action, i) => (\n <Button\n buttonStyle={action.style || 'secondary'}\n disabled={action.disabled}\n key={i}\n margin={false}\n onClick={action.onClick}\n size=\"medium\"\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n )}\n {children}\n </div>\n </div>\n </Modal>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(0)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n\ntype DrawerStackContextType = {\n /** Depths of every currently-open drawer, used to compute layer offsets. */\n openDrawerDepths: number[]\n registerDrawer: (uid: string, depth: number) => void\n unregisterDrawer: (uid: string) => void\n}\n\nconst DrawerStackContext = createContext<DrawerStackContextType>({\n openDrawerDepths: [],\n registerDrawer: () => {},\n unregisterDrawer: () => {},\n})\n\n/**\n * Tracks the depths of all currently-open drawers so each drawer can compute\n * its leftward offset relative to the rest of the open stack.\n *\n * Why this is needed: drawers are anchored to the right edge and stack as real\n * layers. When a child drawer opens on top of its parent(s), every drawer\n * beneath it must slide left to peek out from underneath the active (topmost)\n * drawer — and slide back when that child closes. A drawer's own depth is\n * static, so it cannot know on its own whether something deeper is currently\n * open; that requires shared runtime state about the whole open stack.\n *\n * We track real `Drawer` instances (rather than scanning modal state by slug\n * name) so confirmation modals like `leave-without-saving-...` never count, and\n * so stacking never depends on slug naming conventions.\n */\nexport const DrawerStackProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [openDrawers, setOpenDrawers] = useState<Record<string, number>>({})\n\n const registerDrawer = useCallback((uid: string, depth: number) => {\n setOpenDrawers((prev) => (prev[uid] === depth ? prev : { ...prev, [uid]: depth }))\n }, [])\n\n const unregisterDrawer = useCallback((uid: string) => {\n setOpenDrawers((prev) => {\n if (!(uid in prev)) {\n return prev\n }\n\n const next = { ...prev }\n delete next[uid]\n return next\n })\n }, [])\n\n const value = useMemo<DrawerStackContextType>(\n () => ({\n openDrawerDepths: Object.values(openDrawers),\n registerDrawer,\n unregisterDrawer,\n }),\n [openDrawers, registerDrawer, unregisterDrawer],\n )\n\n return <DrawerStackContext value={value}>{children}</DrawerStackContext>\n}\n\nexport const useDrawerStack = (): DrawerStackContextType => use(DrawerStackContext)\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,KAAK,EAAEC,QAAQ,QAAQ;AAChC,OAAOC,KAAA,IACLC,aAAa,EACbC,GAAG,EACHC,WAAW,EACXC,SAAS,EACTC,KAAK,EACLC,eAAe,EACfC,OAAO,EACPC,QAAQ,QACH;AAIP,SAASC,WAAW,QAAQ;AAC5B,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,WAAA,GAAc;AAE3B,OAAO,MAAMC,gBAAA,GAAmBA,CAAC;EAAEC,IAAI;EAAEC;AAAK,CAAmC,KAC/E,UAAUA,KAAA,IAASD,IAAA,EAAM;AAE3B,SAASE,aAAa,QAAQ;AAE9B,OAAO,MAAMC,aAAA,GAAwCC,EAAA;EAAA,MAAAC,CAAA,GAAAvB,EAAA;EAAC;IAAAkB,IAAA;IAAAM,WAAA;IAAAC,QAAA;IAAAC,SAAA;IAAAC,QAAA;IAAAC,OAAA;IAAA,GAAAC;EAAA,IAAAP,EAQrD;EACC;IAAAQ;EAAA,IAAsB5B,QAAA;EAAA,IAAA6B,EAAA;EAAA,IAAAR,CAAA,QAAAK,OAAA,IAAAL,CAAA,QAAAO,SAAA,IAAAP,CAAA,QAAAL,IAAA;IAGpBa,EAAA,GAAAC,CAAA;MACEF,SAAA,CAAUZ,IAAA;MAAA,IACN,OAAOU,OAAA,KAAY;QACrBA,OAAA,CAAQI,CAAA;MAAA;IAAA;IAEZT,CAAA,MAAAK,OAAA;IAAAL,CAAA,MAAAO,SAAA;IAAAP,CAAA,MAAAL,IAAA;IAAAK,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EANF,MAAAU,WAAA,GAAoBF,EAOQ;EAAA,IAGxBP,WAAA;IAAA,OAEAU,IAAA,CAAApB,MAAA;MAAAU,WAAA;MAAAE,SAAA;MAAAC,QAAA;MAAAC,OAAA,EAIWK,WAAA;MAAA,GACLJ,IAAI;MAAAJ;IAAA,C;;SAQZS,IAAA,CAAC;IAAAR,SAAA;IAAAC,QAAA;IAAAC,OAAA,EAA0DK,WAAA;IAAAE,IAAA,EAAkB;IAAA,GAAaN,IAAI;IAAAJ;EAAA,C;CAIlG;AAEA,OAAO,MAAMW,MAAA,GAA2BC,KAAA,iBACtCH,IAAA,CAACI,mBAAA;YACC,aAAAJ,IAAA,CAACK,WAAA;IAAa,GAAGF;;;AAIrB,MAAME,WAAA,GAA+BjB,EAAA;EAAA,MAAAC,CAAA,GAAAvB,EAAA;EAAC;IAAAkB,IAAA;IAAAO,QAAA;IAAAC,SAAA;IAAAc,MAAA;IAAAC,aAAA;IAAAC,UAAA;IAAAC;EAAA,IAAArB,EAQrC;EACC;IAAAsB;EAAA,IAAc/B,cAAA;EACd;IAAAgC,UAAA;IAAAC;EAAA,IAAmC5C,QAAA;EACnC,MAAA6C,WAAA,GAAoBC,cAAA;EACpB,MAAAC,GAAA,GAAYzC,KAAA;EACZ;IAAA0C,gBAAA;IAAAC,cAAA;IAAAC;EAAA,IAA+DC,cAAA;EAE/D,MAAAC,MAAA,KAAiBR,UAAU,CAAC5B,IAAA,GAAAoC,MAAA;EAAO,IAAAvB,EAAA;EAAA,IAAAwB,EAAA;EAAA,IAAAhC,CAAA,QAAAwB,WAAA,IAAAxB,CAAA,QAAA+B,MAAA,IAAA/B,CAAA,QAAA4B,cAAA,IAAA5B,CAAA,QAAA0B,GAAA,IAAA1B,CAAA,QAAA6B,gBAAA;IAEzBrB,EAAA,GAAAA,CAAA;MAAA,IACJuB,MAAA;QACFH,cAAA,CAAeF,GAAA,EAAKF,WAAA;QAAA,aAEPK,gBAAA,CAAiBH,GAAA;MAAA;IAAA;IAE/BM,EAAA,IAACD,MAAA,EAAQL,GAAA,EAAKF,WAAA,EAAaI,cAAA,EAAgBC,gBAAA;IAAiB7B,CAAA,MAAAwB,WAAA;IAAAxB,CAAA,MAAA+B,MAAA;IAAA/B,CAAA,MAAA4B,cAAA;IAAA5B,CAAA,MAAA0B,GAAA;IAAA1B,CAAA,MAAA6B,gBAAA;IAAA7B,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAgC,EAAA;EAAA;IAAAxB,EAAA,GAAAR,CAAA;IAAAgC,EAAA,GAAAhC,CAAA;EAAA;EAN/DhB,SAAA,CAAUwB,EAMV,EAAGwB,EAA4D;EAE/D,MAAAC,aAAA,GAAsBN,gBAAA,CAAAO,MAAA,CAAAtC,KAAA,IAAmCA,KAAA,GAAQ4B,WAAA,EAAAW,MAAA;EAEjE,OAAAC,SAAA,EAAAC,YAAA,IAAkCjD,QAAA,CAAS2C,MAAA;EAAA,IAAAO,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAvC,CAAA,QAAA+B,MAAA;IAE3BO,EAAA,GAAAA,CAAA;MACdD,YAAA,CAAaN,MAAA;IAAA;IACZQ,EAAA,IAACR,MAAA;IAAO/B,CAAA,MAAA+B,MAAA;IAAA/B,CAAA,MAAAsC,EAAA;IAAAtC,CAAA,MAAAuC,EAAA;EAAA;IAAAD,EAAA,GAAAtC,CAAA;IAAAuC,EAAA,GAAAvC,CAAA;EAAA;EAFXd,eAAA,CAAgBoD,EAEhB,EAAGC,EAAQ;EAAA,IAEPR,MAAA;IAIoC,MAAAS,EAAA,GAAAJ,SAAA,IAAa,GAAA5C,SAAA,WAAuB;IAAA,IAAAiD,EAAA;IAAA,IAAAzC,CAAA,SAAAG,SAAA,IAAAH,CAAA,SAAAwC,EAAA;MAA3DC,EAAA,IAACtC,SAAA,EAAAX,SAAA,EAAsBgD,EAAoC,EAAAN,MAAA,CAAAQ,OAC5D;MAAA1C,CAAA,OAAAG,SAAA;MAAAH,CAAA,OAAAwC,EAAA;MAAAxC,CAAA,OAAAyC,EAAA;IAAA;MAAAA,EAAA,GAAAzC,CAAA;IAAA;IADC,MAAA2C,EAAA,GAAAF,EACD,CAAAG,IAAA,CACF;IAMqB,MAAAC,EAAA,WAAQZ,aAAA,qBAAkC;IAC3D,MAAAa,EAAA,GAAArD,WAAA,GAAc+B,WAAA;IAAA,IAAAuB,GAAA;IAAA,IAAA/C,CAAA,SAAAiB,MAAA,IAAAjB,CAAA,SAAAE,QAAA,IAAAF,CAAA,SAAAsB,UAAA,IAAAtB,CAAA,SAAAkB,aAAA,IAAAlB,CAAA,SAAAmB,UAAA,IAAAnB,CAAA,SAAAL,IAAA,IAAAK,CAAA,SAAAqB,CAAA,IAAArB,CAAA,SAAA2C,EAAA,IAAA3C,CAAA,SAAA6C,EAAA,IAAA7C,CAAA,SAAA8C,EAAA,IAAA9C,CAAA,SAAAoB,KAAA;MAAA,IAAA4B,GAAA;MAAA,IAAAhD,CAAA,SAAAsB,UAAA,IAAAtB,CAAA,SAAAL,IAAA;QASfqD,GAAA,GAAAA,CAAA,KAAM1B,UAAA,CAAW3B,IAAA;QAAAK,CAAA,OAAAsB,UAAA;QAAAtB,CAAA,OAAAL,IAAA;QAAAK,CAAA,OAAAgD,GAAA;MAAA;QAAAA,GAAA,GAAAhD,CAAA;MAAA;MAnB9B+C,GAAA,GAAAE,KAAA,CAAAvE,KAAA;QAAAyB,SAAA,EACawC,EAEH;QAAAO,WAAA;QAAAvD,IAAA;QAAAwD,KAAA;UAAA,yBAMqBN,EAA0C;UAAAO,MAAA,EAC3DN;QAAc;QAAA5C,QAAA,GAI1BS,IAAA,CAAC;UAAAR,SAAA,EAAe,GAAAX,SAAA;QAAuB,C,GACvCmB,IAAA,CAAC;UAAA,cACaU,CAAA,CAAE;UAAAlB,SAAA,EACH,GAAAX,SAAA,SAAqB;UAAA6D,EAAA,EAC5B,iBAAiB1D,IAAA,EAAM;UAAAU,OAAA,EAClB2C,GAAiB;UAAApC,IAAA,EACrB;QAAA,C,GAEPqC,KAAA,CAAC;UAAA9C,SAAA,EAAe,GAAAX,SAAA,WAAuB;UAAAU,QAAA,GACrCS,IAAA,CAAC;YAAAR,SAAA,EAAe,GAAAX,SAAA;UAA+B,C,GAC/CyD,KAAA,CAAC;YAAA9C,SAAA,EAAe,GAAAX,SAAA,oBAAgC;YAAAU,QAAA,GAC7Ce,MAAA,EACAA,MAAA,KAAAqC,SAAW,IACVL,KAAA,CAAC;cAAA9C,SAAA,EAAe,GAAAX,SAAA,UAAsB;cAAAU,QAAA,GAIpCS,IAAA,CAAApB,MAAA;gBAAA,cACc8B,CAAA,CAAE;gBAAApB,WAAA,EACF;gBAAAE,SAAA,EACD,GAAAX,SAAA,iBAA6B;gBAAA+D,IAAA,EAClC5C,IAAA,CAAAtB,WAAA;kBAAAmE,SAAA,EAAuB;kBAAAC,IAAA;gBAAA,C;+BACdnC,UAAA,CAAW3B,IAAA;cAAA,C,GAE5BgB,IAAA,CAAC;gBAAAR,SAAA,EAAc,GAAAX,SAAA,iBAA6B;gBAAA4B,KAAA,EAASD,UAAA,GAAaC,KAAA,OAAQ;gBAAAlB,QAAA,EACvEkB;cAAA,C,GAEFF,aAAA,IAAiBA,aAAA,CAAAiB,MAAA,IAAuB,IACvCxB,IAAA,CAAC;gBAAAR,SAAA,EAAe,GAAAX,SAAA,mBAA+B;gBAAAU,QAAA,EAC5CgB,aAAA,CAAAwC,GAAA,CAAAC,KAIQ;cAAA,C;gBAYhBzD,QAAA;UAAA,C;;;;;;;;;;;;;;;;;;WA3DP6C,G;;;CAmEN;AAEA,OAAO,MAAMa,kBAAA,gBAAqB/E,aAAA,CAAc;AAEhD,OAAO,MAAMkC,mBAAA,GAA+DhB,EAAA;EAAA,MAAAC,CAAA,GAAAvB,EAAA;EAAC;IAAAyB;EAAA,IAAAH,EAAY;EACvF,MAAA8D,WAAA,GAAoBpC,cAAA;EACpB,MAAA7B,KAAA,GAAciE,WAAA,IAAc;EAAA,IAAArD,EAAA;EAAA,IAAAR,CAAA,QAAAE,QAAA,IAAAF,CAAA,QAAAJ,KAAA;IAErBY,EAAA,GAAAG,IAAA,CAAAiD,kBAAA;MAAAE,KAAA,EAA2BlE,KAAA;MAAAM;IAAA,C;;;;;;;SAA3BM,E;CACT;AAEA,OAAO,MAAMiB,cAAA,GAAiBA,CAAA,KAAc3C,GAAA,CAAI8E,kBAAA;AAShD,MAAMG,kBAAA,gBAAqBlF,aAAA,CAAsC;EAC/D8C,gBAAA,EAAkB,EAAE;EACpBC,cAAA,EAAgBA,CAAA,MAAO;EACvBC,gBAAA,EAAkBA,CAAA,MAAO;AAC3B;AAEA;;;;;;;;;;;;;;;AAeA,OAAO,MAAMmC,mBAAA,GAA+DA,CAAC;EAAE9D;AAAQ,CAAE;EACvF,MAAM,CAAC+D,WAAA,EAAaC,cAAA,CAAe,GAAG9E,QAAA,CAAiC,CAAC;EAExE,MAAMwC,cAAA,GAAiB7C,WAAA,CAAY,CAAC2C,GAAA,EAAa9B,KAAA;IAC/CsE,cAAA,CAAgBC,IAAA,IAAUA,IAAI,CAACzC,GAAA,CAAI,KAAK9B,KAAA,GAAQuE,IAAA,GAAO;MAAE,GAAGA,IAAI;MAAE,CAACzC,GAAA,GAAM9B;IAAM;EACjF,GAAG,EAAE;EAEL,MAAMiC,gBAAA,GAAmB9C,WAAA,CAAa2C,KAAA;IACpCwC,cAAA,CAAgBC,MAAA;MACd,IAAI,EAAEzC,KAAA,IAAOyC,MAAG,GAAI;QAClB,OAAOA,MAAA;MACT;MAEA,MAAMC,IAAA,GAAO;QAAE,GAAGD;MAAK;MACvB,OAAOC,IAAI,CAAC1C,KAAA,CAAI;MAChB,OAAO0C,IAAA;IACT;EACF,GAAG,EAAE;EAEL,MAAMN,KAAA,GAAQ3E,OAAA,CACZ,OAAO;IACLwC,gBAAA,EAAkB0C,MAAA,CAAOC,MAAM,CAACL,WAAA;IAChCrC,cAAA;IACAC;EACF,IACA,CAACoC,WAAA,EAAarC,cAAA,EAAgBC,gBAAA,CAAiB;EAGjD,oBAAOlB,IAAA,CAACoD,kBAAA;IAAmBD,KAAA,EAAOA,KAAA;cAAQ5D;;AAC5C;AAEA,OAAO,MAAM4B,cAAA,GAAiBA,CAAA,KAA8BhD,GAAA,CAAIiF,kBAAA;AA/K3B,SAAAJ,MAAAY,MAAA,EAAAC,CAAA;EAAA,OAgFf7D,IAAA,CAAApB,MAAA;IAAAU,WAAA,EACesE,MAAA,CAAApB,KAAA,IAAgB;IAAA/C,QAAA,EACnBmE,MAAA,CAAAnE,QAAA;IAAAqE,MAAA;IAAApE,OAAA,EAGDkE,MAAA,CAAAlE,OAAA;IAAAoD,IAAA,EACJ;IAAAvD,QAAA,EAEJqE,MAAA,CAAAG;EAAA,GALIF,CAAA;AAAA","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ @layer payload-default {
2
+ .file-details-draggable {
3
+ display: flex;
4
+ gap: var(--spacer-2);
5
+ align-items: center;
6
+ background: var(--color-bg-secondary);
7
+ border-radius: var(--radius-small);
8
+ padding: var(--spacer-2-5);
9
+ }
10
+
11
+ .file-details-draggable--drag-wrapper {
12
+ display: flex;
13
+ gap: var(--spacer-2);
14
+ align-items: center;
15
+ }
16
+
17
+ .file-details-draggable__thumbnail {
18
+ max-width: var(--spacer-4);
19
+ }
20
+
21
+ .file-details-draggable__actions {
22
+ flex-grow: 2;
23
+ display: flex;
24
+ gap: var(--spacer-2);
25
+ align-items: center;
26
+ justify-content: flex-end;
27
+ }
28
+
29
+ .file-details-draggable__remove.btn--style-icon-label {
30
+ margin: 0;
31
+ }
32
+ }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import './index.scss';
2
+ import './index.css';
3
3
  import type { Data, FileSizes, SanitizedCollectionConfig } from 'payload';
4
4
  export type DraggableFileDetailsProps = {
5
5
  collectionSlug: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/FileDetails/DraggableFileDetails/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAOzE,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvC,GAAG,EAAE;QACH,KAAK,CAAC,EAAE,SAAS,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA4EpE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/FileDetails/DraggableFileDetails/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,aAAa,CAAA;AAIpB,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAOzE,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvC,GAAG,EAAE;QACH,KAAK,CAAC,EAAE,SAAS,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA6EpE,CAAA"}
@@ -5,14 +5,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import React from 'react';
6
6
  import { Button } from '../../Button/index.js';
7
7
  import { Thumbnail } from '../../Thumbnail/index.js';
8
- import './index.scss';
8
+ import './index.css';
9
9
  const baseClass = 'file-details-draggable';
10
10
  import { DraggableSortableItem } from '../../../elements/DraggableSortable/DraggableSortableItem/index.js';
11
11
  import { AlignJustifiedIcon } from '../../../icons/AlignJustified/index.js';
12
12
  import { EditIcon } from '../../../icons/Edit/index.js';
13
13
  import { useDocumentDrawer } from '../../DocumentDrawer/index.js';
14
14
  export const DraggableFileDetails = props => {
15
- const $ = _c(20);
15
+ const $ = _c(21);
16
16
  const {
17
17
  collectionSlug,
18
18
  doc,
@@ -43,7 +43,7 @@ export const DraggableFileDetails = props => {
43
43
  }
44
44
  const [DocumentDrawer, DocumentDrawerToggler] = useDocumentDrawer(t0);
45
45
  let t1;
46
- if ($[3] !== DocumentDrawer || $[4] !== DocumentDrawerToggler || $[5] !== collectionSlug || $[6] !== doc || $[7] !== filename || $[8] !== hideRemoveFile || $[9] !== imageCacheTag || $[10] !== isSortable || $[11] !== removeItem || $[12] !== rowIndex || $[13] !== thumbnailURL || $[14] !== uploadConfig || $[15] !== url) {
46
+ if ($[3] !== DocumentDrawer || $[4] !== DocumentDrawerToggler || $[5] !== collectionSlug || $[6] !== doc || $[7] !== filename || $[8] !== hideRemoveFile || $[9] !== id || $[10] !== imageCacheTag || $[11] !== isSortable || $[12] !== removeItem || $[13] !== rowIndex || $[14] !== thumbnailURL || $[15] !== uploadConfig || $[16] !== url) {
47
47
  t1 = draggableSortableItemProps => _jsxs("div", {
48
48
  className: [baseClass, draggableSortableItemProps && isSortable && `${baseClass}--has-drag-handle`].filter(Boolean).join(" "),
49
49
  ref: draggableSortableItemProps.setNodeRef,
@@ -82,35 +82,36 @@ export const DraggableFileDetails = props => {
82
82
  round: true
83
83
  })]
84
84
  })]
85
- });
85
+ }, id);
86
86
  $[3] = DocumentDrawer;
87
87
  $[4] = DocumentDrawerToggler;
88
88
  $[5] = collectionSlug;
89
89
  $[6] = doc;
90
90
  $[7] = filename;
91
91
  $[8] = hideRemoveFile;
92
- $[9] = imageCacheTag;
93
- $[10] = isSortable;
94
- $[11] = removeItem;
95
- $[12] = rowIndex;
96
- $[13] = thumbnailURL;
97
- $[14] = uploadConfig;
98
- $[15] = url;
99
- $[16] = t1;
92
+ $[9] = id;
93
+ $[10] = imageCacheTag;
94
+ $[11] = isSortable;
95
+ $[12] = removeItem;
96
+ $[13] = rowIndex;
97
+ $[14] = thumbnailURL;
98
+ $[15] = uploadConfig;
99
+ $[16] = url;
100
+ $[17] = t1;
100
101
  } else {
101
- t1 = $[16];
102
+ t1 = $[17];
102
103
  }
103
104
  let t2;
104
- if ($[17] !== id || $[18] !== t1) {
105
+ if ($[18] !== id || $[19] !== t1) {
105
106
  t2 = _jsx(DraggableSortableItem, {
106
107
  id,
107
108
  children: t1
108
109
  }, id);
109
- $[17] = id;
110
- $[18] = t1;
111
- $[19] = t2;
110
+ $[18] = id;
111
+ $[19] = t1;
112
+ $[20] = t2;
112
113
  } else {
113
- t2 = $[19];
114
+ t2 = $[20];
114
115
  }
115
116
  return t2;
116
117
  };