@strapi/upload 5.50.2 → 5.51.1

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 (154) hide show
  1. package/dist/admin/future/pages/Assets/AssetsPage.js +201 -137
  2. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  3. package/dist/admin/future/pages/Assets/AssetsPage.mjs +202 -138
  4. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  5. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -30
  6. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  7. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +163 -32
  8. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  9. package/dist/admin/future/pages/Assets/components/AssetsTable.js +222 -59
  10. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  11. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +223 -60
  12. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  13. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +252 -0
  14. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
  15. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +250 -0
  16. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
  17. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
  18. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
  19. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
  20. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
  21. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +111 -36
  22. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  23. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +113 -38
  24. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  25. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
  26. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
  28. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
  30. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
  31. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
  32. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
  33. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
  34. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
  35. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
  36. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
  38. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
  40. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
  42. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  43. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +19 -25
  44. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  45. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
  46. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
  47. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
  48. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
  49. package/dist/admin/future/pages/Assets/components/EmptyState.js +63 -0
  50. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -0
  51. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +61 -0
  52. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -0
  53. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +120 -22
  54. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +121 -23
  56. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
  58. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
  59. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
  60. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
  61. package/dist/admin/future/pages/Assets/components/SortMenu.js +165 -0
  62. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
  63. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +163 -0
  64. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
  65. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +59 -0
  66. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
  67. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +55 -0
  68. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
  69. package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
  70. package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
  72. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
  74. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
  75. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
  76. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
  77. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
  78. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
  79. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
  80. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
  81. package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
  82. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
  83. package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
  84. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
  85. package/dist/admin/future/services/assets.js +33 -1
  86. package/dist/admin/future/services/assets.js.map +1 -1
  87. package/dist/admin/future/services/assets.mjs +33 -2
  88. package/dist/admin/future/services/assets.mjs.map +1 -1
  89. package/dist/admin/future/services/folders.js +3 -3
  90. package/dist/admin/future/services/folders.js.map +1 -1
  91. package/dist/admin/future/services/folders.mjs +3 -3
  92. package/dist/admin/future/services/folders.mjs.map +1 -1
  93. package/dist/admin/future/services/uploadFileViaXHR.js +23 -2
  94. package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
  95. package/dist/admin/future/services/uploadFileViaXHR.mjs +23 -2
  96. package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
  97. package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
  98. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
  99. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
  100. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
  101. package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
  102. package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
  103. package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
  104. package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
  105. package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
  106. package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
  107. package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
  108. package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
  109. package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
  110. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
  111. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
  112. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
  113. package/dist/admin/future/utils/getFolderLabel.js +31 -0
  114. package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
  115. package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
  116. package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
  117. package/dist/admin/hooks/useUpload.js +15 -9
  118. package/dist/admin/hooks/useUpload.js.map +1 -1
  119. package/dist/admin/hooks/useUpload.mjs +17 -11
  120. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  121. package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +1 -1
  122. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
  123. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +1 -0
  124. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
  125. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
  126. package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
  127. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
  128. package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
  129. package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
  130. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
  131. package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
  132. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +11 -0
  133. package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
  134. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +17 -0
  135. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +39 -0
  136. package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
  137. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +30 -0
  138. package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
  139. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
  140. package/dist/admin/src/future/services/assets.d.ts +4 -1
  141. package/dist/admin/src/future/services/folders.d.ts +4 -1
  142. package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +1 -17
  143. package/dist/admin/src/future/types/dnd.d.ts +5 -0
  144. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
  145. package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
  146. package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
  147. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
  148. package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
  149. package/dist/admin/translations/en.json.js +36 -0
  150. package/dist/admin/translations/en.json.js.map +1 -1
  151. package/dist/admin/translations/en.json.mjs +36 -0
  152. package/dist/admin/translations/en.json.mjs.map +1 -1
  153. package/dist/shared/contracts/folders.d.ts +1 -1
  154. package/package.json +8 -8
@@ -10,7 +10,9 @@ var files = require('../../../utils/files.js');
10
10
  var getAssetIcon = require('../../../utils/getAssetIcon.js');
11
11
  var translations = require('../../../utils/translations.js');
12
12
  var constants = require('../constants.js');
13
+ var useAssetSelection = require('../hooks/useAssetSelection.js');
13
14
  var useFolderNavigation = require('../hooks/useFolderNavigation.js');
15
+ var selection = require('../utils/selection.js');
14
16
  var AssetsDndProvider = require('./Dnd/AssetsDndProvider.js');
15
17
  var useAssetDnd = require('./Dnd/useAssetDnd.js');
16
18
 
@@ -40,7 +42,8 @@ const StyledTd = styledComponents.styled(designSystem.RawTd)`
40
42
  `;
41
43
  const StyledTr = styledComponents.styled.tr`
42
44
  height: 48px;
43
- background: ${({ theme })=>theme.colors.neutral0};
45
+ user-select: none;
46
+ background: ${({ theme, $isSelected })=>$isSelected ? theme.colors.primary100 : theme.colors.neutral0};
44
47
  cursor: ${({ $isMovePending, $isInvalidDropTarget })=>{
45
48
  if ($isMovePending) {
46
49
  return 'wait';
@@ -71,10 +74,39 @@ const StyledTr = styledComponents.styled.tr`
71
74
  }
72
75
  }
73
76
  `;
74
- const StyledBodyTd = styledComponents.styled(designSystem.RawTd)`
75
- padding: ${({ theme })=>theme.spaces[4]};
76
- border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
77
+ // Leading checkbox column. Narrow + centred so the control sits flush against the
78
+ // row's left edge.
79
+ const CheckboxTd = styledComponents.styled(StyledTd)`
80
+ width: 1%;
81
+ white-space: nowrap;
82
+ `;
83
+ const CheckboxTh = styledComponents.styled(StyledTh)`
84
+ width: 1%;
85
+ white-space: nowrap;
86
+ `;
87
+ // The asset filename is its own interactive element: clicking it opens the
88
+ // details drawer instead of selecting the row.
89
+ const NameButton = styledComponents.styled.button`
90
+ display: inline-flex;
91
+ max-width: 100%;
92
+ border: none;
93
+ background: transparent;
94
+ padding: 0;
95
+ margin: 0;
96
+ cursor: pointer;
97
+ text-align: left;
98
+ color: inherit;
99
+ font: inherit;
100
+
101
+ &:focus-visible {
102
+ outline: 2px solid ${({ theme })=>theme.colors.primary600};
103
+ outline-offset: 2px;
104
+ border-radius: 2px;
105
+ }
77
106
  `;
107
+ const stopRowEvent = (e)=>{
108
+ e.stopPropagation();
109
+ };
78
110
  const AssetPreviewCell = ({ asset })=>{
79
111
  const { ext, mime } = asset;
80
112
  const DocIcon = getAssetIcon.getAssetIcon(mime, ext);
@@ -92,17 +124,48 @@ const AssetPreviewCell = ({ asset })=>{
92
124
  })
93
125
  });
94
126
  };
95
- const AssetRow = ({ asset, onAssetItemClick })=>{
127
+ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
96
128
  const isMobile = strapiAdmin.useIsMobile();
97
129
  const { formatDate, formatMessage } = reactIntl.useIntl();
98
130
  const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
99
131
  isMovePending: false
100
132
  };
101
133
  const { attributes, listeners, setNodeRef, isDragging } = useAssetDnd.useFileDraggable(asset);
134
+ const { isSelected, toggle, selectRange } = useAssetSelection.useAssetSelection();
135
+ const key = selection.assetKey(asset.id);
136
+ const selected = isSelected(key);
137
+ // Plain click opens the asset details; pointer selection lives on the
138
+ // checkbox only. Modifier clicks keep the selection semantics: shift selects
139
+ // a range, cmd/ctrl toggles.
140
+ const handleRowClick = (e)=>{
141
+ if (e.shiftKey) {
142
+ selectRange(orderedItemKeys, key);
143
+ } else if (e.metaKey || e.ctrlKey) {
144
+ toggle(key);
145
+ } else {
146
+ onAssetItemClick(asset.id);
147
+ }
148
+ };
149
+ // Desktop: Space toggles selection (additive), Enter opens the details drawer.
102
150
  const handleKeyDown = (e)=>{
103
- if (e.key === 'Enter' || e.key === ' ') {
151
+ if (e.key === 'Enter') {
104
152
  e.preventDefault();
105
153
  onAssetItemClick(asset.id);
154
+ } else if (e.key === ' ') {
155
+ e.preventDefault();
156
+ toggle(key);
157
+ }
158
+ };
159
+ const handleNameClick = (e)=>{
160
+ e.stopPropagation();
161
+ onAssetItemClick(asset.id);
162
+ };
163
+ const handleCheckboxClick = (e)=>{
164
+ e.stopPropagation();
165
+ if (e.shiftKey) {
166
+ selectRange(orderedItemKeys, key);
167
+ } else {
168
+ toggle(key);
106
169
  }
107
170
  };
108
171
  return /*#__PURE__*/ jsxRuntime.jsxs(StyledTr, {
@@ -111,12 +174,29 @@ const AssetRow = ({ asset, onAssetItemClick })=>{
111
174
  ...listeners,
112
175
  $isDragging: isDragging,
113
176
  $isMovePending: isMovePending,
177
+ $isSelected: selected,
114
178
  tabIndex: 0,
115
179
  role: "row",
116
180
  onDragStart: (e)=>e.preventDefault(),
117
- onClick: ()=>onAssetItemClick(asset.id),
181
+ onClick: handleRowClick,
118
182
  onKeyDown: handleKeyDown,
119
183
  children: [
184
+ !isMobile && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTd, {
185
+ onClick: stopRowEvent,
186
+ onKeyDown: stopRowEvent,
187
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
188
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
189
+ checked: selected,
190
+ onClick: handleCheckboxClick,
191
+ "aria-label": formatMessage({
192
+ id: translations.getTranslationKey('list.table.row.select'),
193
+ defaultMessage: 'Select {name}'
194
+ }, {
195
+ name: asset.name
196
+ })
197
+ })
198
+ })
199
+ }),
120
200
  /*#__PURE__*/ jsxRuntime.jsx(StyledTd, {
121
201
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
122
202
  gap: 3,
@@ -128,12 +208,17 @@ const AssetRow = ({ asset, onAssetItemClick })=>{
128
208
  /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
129
209
  direction: "column",
130
210
  alignItems: "flex-start",
211
+ minWidth: 0,
131
212
  children: [
132
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
133
- textColor: "neutral800",
134
- fontWeight: "semiBold",
135
- ellipsis: true,
136
- children: asset.name
213
+ /*#__PURE__*/ jsxRuntime.jsx(NameButton, {
214
+ type: "button",
215
+ onClick: handleNameClick,
216
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
217
+ textColor: "neutral800",
218
+ fontWeight: "semiBold",
219
+ ellipsis: true,
220
+ children: asset.name
221
+ })
137
222
  }),
138
223
  isMobile && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
139
224
  textColor: "neutral600",
@@ -193,18 +278,43 @@ const FolderTr = styledComponents.styled(StyledTr)`
193
278
  background: ${({ theme })=>theme.colors.primary100};
194
279
  }
195
280
  `;
196
- const FolderRow = ({ folder })=>{
281
+ const FolderRow = ({ folder, orderedItemKeys })=>{
197
282
  const isMobile = strapiAdmin.useIsMobile();
198
283
  const { formatDate, formatMessage } = reactIntl.useIntl();
199
284
  const { navigateToFolder } = useFolderNavigation.useFolderNavigation();
285
+ const { isSelected, toggle, selectRange } = useAssetSelection.useAssetSelection();
200
286
  const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
201
287
  isMovePending: false
202
288
  };
203
289
  const { draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging }, droppable: { setNodeRef: setDropRef }, showValidDropHighlight, showInvalidDropCursor } = useAssetDnd.useFolderDraggableDroppable(folder);
290
+ const key = selection.folderKey(folder.id);
291
+ // Folders share the selection mechanism with assets. Only the plain-click
292
+ // semantic differs: it navigates into the folder instead of selecting it.
293
+ const handleRowClick = (e)=>{
294
+ if (e.shiftKey) {
295
+ selectRange(orderedItemKeys, key);
296
+ } else if (e.metaKey || e.ctrlKey) {
297
+ toggle(key);
298
+ } else {
299
+ navigateToFolder(folder);
300
+ }
301
+ };
302
+ // Enter navigates into the folder, Space toggles selection (same as assets).
204
303
  const handleKeyDown = (e)=>{
205
- if (e.key === 'Enter' || e.key === ' ') {
304
+ if (e.key === 'Enter') {
206
305
  e.preventDefault();
207
306
  navigateToFolder(folder);
307
+ } else if (e.key === ' ') {
308
+ e.preventDefault();
309
+ toggle(key);
310
+ }
311
+ };
312
+ const handleCheckboxClick = (e)=>{
313
+ e.stopPropagation();
314
+ if (e.shiftKey) {
315
+ selectRange(orderedItemKeys, key);
316
+ } else {
317
+ toggle(key);
208
318
  }
209
319
  };
210
320
  return /*#__PURE__*/ jsxRuntime.jsxs(FolderTr, {
@@ -218,12 +328,29 @@ const FolderRow = ({ folder })=>{
218
328
  $isMovePending: isMovePending,
219
329
  $isValidDropTarget: showValidDropHighlight,
220
330
  $isInvalidDropTarget: showInvalidDropCursor,
331
+ $isSelected: isSelected(key),
221
332
  tabIndex: 0,
222
333
  role: "row",
223
334
  onDragStart: (e)=>e.preventDefault(),
224
- onClick: ()=>navigateToFolder(folder),
335
+ onClick: handleRowClick,
225
336
  onKeyDown: handleKeyDown,
226
337
  children: [
338
+ !isMobile && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTd, {
339
+ onClick: stopRowEvent,
340
+ onKeyDown: stopRowEvent,
341
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
342
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
343
+ checked: isSelected(key),
344
+ onClick: handleCheckboxClick,
345
+ "aria-label": formatMessage({
346
+ id: translations.getTranslationKey('list.table.row.select'),
347
+ defaultMessage: 'Select {name}'
348
+ }, {
349
+ name: folder.name
350
+ })
351
+ })
352
+ })
353
+ }),
227
354
  /*#__PURE__*/ jsxRuntime.jsx(StyledTd, {
228
355
  children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
229
356
  gap: 3,
@@ -294,63 +421,99 @@ const FolderRow = ({ folder })=>{
294
421
  ]
295
422
  });
296
423
  };
297
- const AssetsTable = ({ assets, folders = [], onAssetItemClick })=>{
424
+ const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick })=>{
298
425
  const isMobile = strapiAdmin.useIsMobile();
299
426
  const { formatMessage } = reactIntl.useIntl();
427
+ const { selectedKeys, selectAll, clear } = useAssetSelection.useAssetSelection();
300
428
  const visibleHeaders = isMobile ? constants.TABLE_HEADERS.filter((h)=>h.name === 'name' || h.name === 'actions') : constants.TABLE_HEADERS;
429
+ // The checkbox column is a dedicated structural column (not part of
430
+ // TABLE_HEADERS) and is hidden on mobile.
431
+ const showCheckboxColumn = !isMobile;
432
+ const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);
301
433
  const totalRows = folders.length + assets.length;
434
+ // Render order — folders first by default, or the interleaved mixed order.
435
+ // Range selection follows it.
436
+ const orderedItemKeys = mixedItems ? mixedItems.map((item)=>item.kind === 'folder' ? selection.folderKey(item.folder.id) : selection.assetKey(item.asset.id)) : [
437
+ ...folders.map((folder)=>selection.folderKey(folder.id)),
438
+ ...assets.map((asset)=>selection.assetKey(asset.id))
439
+ ];
440
+ const { allSelected, isIndeterminate } = selection.getSelectAllState(selectedKeys, orderedItemKeys);
441
+ const handleSelectAll = ()=>{
442
+ if (allSelected) {
443
+ clear();
444
+ } else {
445
+ selectAll(orderedItemKeys);
446
+ }
447
+ };
448
+ // The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an
449
+ // empty table renders nothing at all, not headers over an empty body.
450
+ if (totalRows === 0) {
451
+ return null;
452
+ }
302
453
  return /*#__PURE__*/ jsxRuntime.jsxs(StyledTable, {
303
- colCount: visibleHeaders.length,
304
- rowCount: totalRows + 1,
454
+ colCount: colCount,
455
+ rowCount: (mixedItems ? mixedItems.length : totalRows) + 1,
305
456
  children: [
306
457
  /*#__PURE__*/ jsxRuntime.jsx(StyledThead, {
307
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.RawTr, {
308
- children: visibleHeaders.map((header)=>{
309
- const tableHeaderLabel = formatMessage(header.label);
310
- const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;
311
- if (isVisuallyHidden) {
312
- return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
313
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
314
- children: formatMessage({
315
- id: translations.getTranslationKey('table.header.actions'),
316
- defaultMessage: 'actions'
458
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.RawTr, {
459
+ children: [
460
+ showCheckboxColumn && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTh, {
461
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
462
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
463
+ checked: isIndeterminate ? 'indeterminate' : allSelected,
464
+ disabled: orderedItemKeys.length === 0,
465
+ onCheckedChange: handleSelectAll,
466
+ "aria-label": formatMessage({
467
+ id: translations.getTranslationKey('list.table.header.select-all'),
468
+ defaultMessage: 'Select all'
317
469
  })
318
470
  })
319
- }, header.name);
320
- }
321
- return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
322
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
323
- textColor: "neutral600",
324
- variant: "sigma",
325
- children: tableHeaderLabel
326
- })
327
- }, header.name);
328
- })
329
- })
330
- }),
331
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.RawTbody, {
332
- children: totalRows === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.RawTr, {
333
- children: /*#__PURE__*/ jsxRuntime.jsx(StyledBodyTd, {
334
- colSpan: visibleHeaders.length,
335
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
336
- textColor: "neutral600",
337
- children: formatMessage({
338
- id: 'app.components.EmptyStateLayout.content-document',
339
- defaultMessage: 'No content found'
340
471
  })
472
+ }),
473
+ visibleHeaders.map((header)=>{
474
+ const tableHeaderLabel = formatMessage(header.label);
475
+ const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;
476
+ if (isVisuallyHidden) {
477
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
478
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
479
+ children: formatMessage({
480
+ id: translations.getTranslationKey('table.header.actions'),
481
+ defaultMessage: 'actions'
482
+ })
483
+ })
484
+ }, header.name);
485
+ }
486
+ return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
487
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
488
+ textColor: "neutral600",
489
+ variant: "sigma",
490
+ children: tableHeaderLabel
491
+ })
492
+ }, header.name);
341
493
  })
342
- })
343
- }) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
344
- children: [
345
- folders.map((folder)=>/*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
346
- folder: folder
347
- }, `folder-${folder.id}`)),
348
- assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
349
- asset: asset,
350
- onAssetItemClick: onAssetItemClick
351
- }, asset.id))
352
494
  ]
353
495
  })
496
+ }),
497
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.RawTbody, {
498
+ children: [
499
+ mixedItems?.map((item)=>item.kind === 'folder' ? /*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
500
+ folder: item.folder,
501
+ orderedItemKeys: orderedItemKeys
502
+ }, `folder-${item.folder.id}`) : /*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
503
+ asset: item.asset,
504
+ orderedItemKeys: orderedItemKeys,
505
+ onAssetItemClick: onAssetItemClick
506
+ }, item.asset.id)),
507
+ !mixedItems && folders.map((folder)=>/*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
508
+ folder: folder,
509
+ orderedItemKeys: orderedItemKeys
510
+ }, `folder-${folder.id}`)),
511
+ !mixedItems && assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
512
+ asset: asset,
513
+ orderedItemKeys: orderedItemKeys,
514
+ onAssetItemClick: onAssetItemClick
515
+ }, asset.id))
516
+ ]
354
517
  })
355
518
  ]
356
519
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst StyledTh = styled(RawTh)`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n}>`\n height: 48px;\n background: ${({ theme }) => theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\nconst StyledBodyTd = styled(RawTd)`\n padding: ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, onAssetItemClick }: AssetRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={() => onAssetItemClick(asset.id)}\n onKeyDown={handleKeyDown}\n >\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n}\n\nconst FolderRow = ({ folder }: FolderRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateToFolder(folder);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={() => navigateToFolder(folder)}\n onKeyDown={handleKeyDown}\n >\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({ assets, folders = [], onAssetItemClick }: AssetsTableProps) => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n const totalRows = folders.length + assets.length;\n\n return (\n <StyledTable colCount={visibleHeaders.length} rowCount={totalRows + 1}>\n <StyledThead>\n <RawTr>\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {totalRows === 0 ? (\n <RawTr>\n <StyledBodyTd colSpan={visibleHeaders.length}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </StyledBodyTd>\n </RawTr>\n ) : (\n <>\n {folders.map((folder) => (\n <FolderRow key={`folder-${folder.id}`} folder={folder} />\n ))}\n {assets.map((asset) => (\n <AssetRow key={asset.id} asset={asset} onAssetItemClick={onAssetItemClick} />\n ))}\n </>\n )}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary100","primary600","StyledBodyTd","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","handleKeyDown","e","key","preventDefault","id","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","gap","direction","Typography","textColor","fontWeight","ellipsis","name","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","getTranslationKey","defaultMessage","stopPropagation","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","node","FolderIcon","AssetsTable","assets","folders","visibleHeaders","TABLE_HEADERS","filter","h","totalRows","length","colCount","rowCount","RawTr","map","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody","colSpan"],"mappings":"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"}
1
+ {"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst StyledTh = styled(RawTh)`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n $isSelected?: boolean;\n}>`\n height: 48px;\n user-select: none;\n background: ${({ theme, $isSelected }) =>\n $isSelected ? theme.colors.primary100 : theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\n// Leading checkbox column. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\n`;\n\n// The asset filename is its own interactive element: clicking it opens the\n// details drawer instead of selecting the row.\nconst NameButton = styled.button`\n display: inline-flex;\n max-width: 100%;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n text-align: left;\n color: inherit;\n font: inherit;\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n border-radius: 2px;\n }\n`;\n\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\n};\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n orderedItemKeys: ItemKey[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, orderedItemKeys, onAssetItemClick }: AssetRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\n\n // Plain click opens the asset details; pointer selection lives on the\n // checkbox only. Modifier clicks keep the selection semantics: shift selects\n // a range, cmd/ctrl toggles.\n const handleRowClick = (e: React.MouseEvent) => {\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n onAssetItemClick(asset.id);\n }\n };\n\n // Desktop: Space toggles selection (additive), Enter opens the details drawer.\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleNameClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAssetItemClick(asset.id);\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* TODO:? no checkbox column on mobile — multi-select on mobile is deferred. */}\n {!isMobile && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={selected}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: asset.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n orderedItemKeys: ItemKey[];\n}\n\nconst FolderRow = ({ folder, orderedItemKeys }: FolderRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const key = folderKey(folder.id);\n\n // Folders share the selection mechanism with assets. Only the plain-click\n // semantic differs: it navigates into the folder instead of selecting it.\n const handleRowClick = (e: React.MouseEvent) => {\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n navigateToFolder(folder);\n }\n };\n\n // Enter navigates into the folder, Space toggles selection (same as assets).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n navigateToFolder(folder);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n $isSelected={isSelected(key)}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={isSelected(key)}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: folder.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n /**\n * When set (\"Folders: Mixed with files\"), rows render in this interleaved\n * order instead of folders-first. Range selection follows the same order.\n */\n mixedItems?: MixedItem[] | null;\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({\n assets,\n folders = [],\n mixedItems = null,\n onAssetItemClick,\n}: AssetsTableProps) => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS) and is hidden on mobile.\n const showCheckboxColumn = !isMobile;\n const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);\n\n const totalRows = folders.length + assets.length;\n\n // Render order — folders first by default, or the interleaved mixed order.\n // Range selection follows it.\n const orderedItemKeys: ItemKey[] = mixedItems\n ? mixedItems.map((item) =>\n item.kind === 'folder' ? folderKey(item.folder.id) : assetKey(item.asset.id)\n )\n : [\n ...folders.map((folder) => folderKey(folder.id)),\n ...assets.map((asset) => assetKey(asset.id)),\n ];\n const { allSelected, isIndeterminate } = getSelectAllState(selectedKeys, orderedItemKeys);\n\n const handleSelectAll = () => {\n if (allSelected) {\n clear();\n } else {\n selectAll(orderedItemKeys);\n }\n };\n\n // The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an\n // empty table renders nothing at all, not headers over an empty body.\n if (totalRows === 0) {\n return null;\n }\n\n return (\n <StyledTable colCount={colCount} rowCount={(mixedItems ? mixedItems.length : totalRows) + 1}>\n <StyledThead>\n <RawTr>\n {showCheckboxColumn && (\n <CheckboxTh>\n <Flex>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : allSelected}\n disabled={orderedItemKeys.length === 0}\n onCheckedChange={handleSelectAll}\n aria-label={formatMessage({\n id: getTranslationKey('list.table.header.select-all'),\n defaultMessage: 'Select all',\n })}\n />\n </Flex>\n </CheckboxTh>\n )}\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {mixedItems?.map((item) =>\n item.kind === 'folder' ? (\n <FolderRow\n key={`folder-${item.folder.id}`}\n folder={item.folder}\n orderedItemKeys={orderedItemKeys}\n />\n ) : (\n <AssetRow\n key={item.asset.id}\n asset={item.asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n )\n )}\n {!mixedItems &&\n folders.map((folder) => (\n <FolderRow\n key={`folder-${folder.id}`}\n folder={folder}\n orderedItemKeys={orderedItemKeys}\n />\n ))}\n {!mixedItems &&\n assets.map((asset) => (\n <AssetRow\n key={asset.id}\n asset={asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n ))}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","visibleHeaders","TABLE_HEADERS","filter","h","showCheckboxColumn","colCount","length","totalRows","map","item","kind","allSelected","isIndeterminate","getSelectAllState","handleSelectAll","rowCount","RawTr","disabled","onCheckedChange","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody"],"mappings":";;;;;;;;;;;;;;;;;;AAiCA,MAAMA,WAAAA,GAAcC,uBAAAA,CAAOC,qBAAAA,CAAS;;;;oBAIhB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;AAG7D,CAAC;AAED,MAAMC,WAAAA,GAAcL,uBAAAA,CAAOM,qBAAAA,CAAS;cACtB,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACI,UAAU,CAAC;;;6BAG1B,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEtE,CAAC;AAED,MAAMI,QAAAA,GAAWR,uBAAAA,CAAOS,kBAAAA,CAAM;;aAEjB,EAAE,CAAC,EAAEP,KAAK,EAAE,GAAKA,KAAAA,CAAMQ,MAAM,CAAC,CAAA,CAAE,CAAC;;AAE9C,CAAC;AAED,MAAMC,QAAAA,GAAWX,uBAAAA,CAAOY,kBAAAA,CAAM;aACjB,EAAE,CAAC,EAAEV,KAAK,EAAE,GAAKA,KAAAA,CAAMQ,MAAM,CAAC,CAAA,CAAE,CAAC;2BACnB,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;AACpE,CAAC;AAED,MAAMS,QAAAA,GAAWb,uBAAAA,CAAOc,EAMtB;;;AAGY,cAAA,EAAE,CAAC,EAAEZ,KAAK,EAAEa,WAAW,EAAE,GACnCA,WAAAA,GAAcb,KAAAA,CAAMC,MAAM,CAACa,UAAU,GAAGd,MAAMC,MAAM,CAACc,QAAQ,CAAC;AACxD,UAAA,EAAE,CAAC,EAAEC,cAAc,EAAEC,oBAAoB,EAAE,GAAA;AACjD,IAAA,IAAID,cAAAA,EAAgB;QAClB,OAAO,MAAA;AACT,IAAA;AAEA,IAAA,OAAOC,uBAAuB,aAAA,GAAgB,SAAA;AAChD,CAAA,CAAE;AACO,WAAA,EAAE,CAAC,EAAEC,WAAW,EAAE,GAAMA,WAAAA,GAAc,MAAM,CAAA,CAAG;AACxC,kBAAA,EAAE,CAAC,EAAEF,cAAc,EAAE,GAAMA,cAAAA,GAAiB,SAAS,MAAA,CAAQ;;EAE7E,EAAE,CAAC,EAAEG,kBAAkB,EAAEnB,KAAK,EAAE,GAC9BmB,kBAAAA,IACAC,oBAAG;AACW,kBAAA,EAAEpB,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;AAClB,0BAAA,EAAEd,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;AAEhD,IAAA,CAAC;;;gBAGW,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;;;;uBAIlC,EAAE,CAAC,EAAEd,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;;;;AAK5D,IAAA,EAAEZ,QAAAA,CAAS;;;;AAIf,CAAC;AAED;AACA;AACA,MAAMa,UAAAA,GAAaxB,uBAAAA,CAAOW,QAAAA,CAAS;;;AAGnC,CAAC;AAED,MAAMc,UAAAA,GAAazB,uBAAAA,CAAOQ,QAAAA,CAAS;;;AAGnC,CAAC;AAED;AACA;AACA,MAAMkB,UAAAA,GAAa1B,uBAAAA,CAAO2B,MAAM;;;;;;;;;;;;;uBAaT,EAAE,CAAC,EAAEzB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;;;AAIhE,CAAC;AAED,MAAMK,eAAe,CAACC,CAAAA,GAAAA;AACpBA,IAAAA,CAAAA,CAAEC,eAAe,EAAA;AACnB,CAAA;AAMA,MAAMC,gBAAAA,GAAmB,CAAC,EAAEC,KAAK,EAAyB,GAAA;AACxD,IAAA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGF,KAAAA;IAEtB,MAAMG,OAAAA,GAAUC,0BAAaF,IAAAA,EAAMD,GAAAA,CAAAA;AAEnC,IAAA,qBACEI,cAAA,CAACC,iBAAAA,EAAAA;QACCC,cAAAA,EAAe,QAAA;QACfC,UAAAA,EAAW,QAAA;QACXC,YAAAA,EAAa,KAAA;QACbC,KAAAA,EAAM,YAAA;QACNC,KAAAA,EAAM,QAAA;QACNC,MAAAA,EAAO,QAAA;QACPC,MAAAA,EAAQ,CAAA;AAER,QAAA,QAAA,gBAAAR,cAAA,CAACF,OAAAA,EAAAA;YAAQQ,KAAAA,EAAO,EAAA;YAAIC,MAAAA,EAAQ;;;AAGlC,CAAA;AAQA,MAAME,QAAAA,GAAW,CAAC,EAAEd,KAAK,EAAEe,eAAe,EAAEC,gBAAgB,EAAiB,GAAA;AAC3E,IAAA,MAAMC,QAAAA,GAAWC,uBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AACtC,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAGC,sCAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;IAC3E,MAAM,EAAEE,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,4BAAAA,CAAiB5B,KAAAA,CAAAA;AAC3E,IAAA,MAAM,EAAE6B,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,mCAAAA,EAAAA;IAE5C,MAAMC,GAAAA,GAAMC,kBAAAA,CAASlC,KAAAA,CAAMmC,EAAE,CAAA;AAC7B,IAAA,MAAMC,WAAWP,UAAAA,CAAWI,GAAAA,CAAAA;;;;AAK5B,IAAA,MAAMI,iBAAiB,CAACxC,CAAAA,GAAAA;QACtB,IAAIA,CAAAA,CAAEyC,QAAQ,EAAE;AACdP,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBkB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAIpC,CAAAA,CAAE0C,OAAO,IAAI1C,CAAAA,CAAE2C,OAAO,EAAE;YACjCV,MAAAA,CAAOG,GAAAA,CAAAA;QACT,CAAA,MAAO;AACLjB,YAAAA,gBAAAA,CAAiBhB,MAAMmC,EAAE,CAAA;AAC3B,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMM,gBAAgB,CAAC5C,CAAAA,GAAAA;QACrB,IAAIA,CAAAA,CAAEoC,GAAG,KAAK,OAAA,EAAS;AACrBpC,YAAAA,CAAAA,CAAE6C,cAAc,EAAA;AAChB1B,YAAAA,gBAAAA,CAAiBhB,MAAMmC,EAAE,CAAA;AAC3B,QAAA,CAAA,MAAO,IAAItC,CAAAA,CAAEoC,GAAG,KAAK,GAAA,EAAK;AACxBpC,YAAAA,CAAAA,CAAE6C,cAAc,EAAA;YAChBZ,MAAAA,CAAOG,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMU,kBAAkB,CAAC9C,CAAAA,GAAAA;AACvBA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;AACjBkB,QAAAA,gBAAAA,CAAiBhB,MAAMmC,EAAE,CAAA;AAC3B,IAAA,CAAA;AAEA,IAAA,MAAMS,sBAAsB,CAAC/C,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAID,CAAAA,CAAEyC,QAAQ,EAAE;AACdP,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBkB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLH,MAAAA,CAAOG,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEY,eAAA,CAAChE,QAAAA,EAAAA;QACCiE,GAAAA,EAAKpB,UAAAA;AACJ,QAAA,GAAGF,UAAU;AACb,QAAA,GAAGC,SAAS;QACbrC,WAAAA,EAAauC,UAAAA;QACbzC,cAAAA,EAAgBoC,aAAAA;QAChBvC,WAAAA,EAAaqD,QAAAA;QACbW,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;QACLC,WAAAA,EAAa,CAACpD,CAAAA,GAAMA,CAAAA,CAAE6C,cAAc,EAAA;QACpCQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;;AAGV,YAAA,CAACxB,0BACAZ,cAAA,CAACb,UAAAA,EAAAA;gBAAW0D,OAAAA,EAAStD,YAAAA;gBAAcuD,SAAAA,EAAWvD,YAAAA;AAC5C,gBAAA,QAAA,gBAAAS,cAAA,CAACC,iBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,cAAA,CAAC+C,qBAAAA,EAAAA;wBACCC,OAAAA,EAASjB,QAAAA;wBACTc,OAAAA,EAASN,mBAAAA;AACTU,wBAAAA,YAAAA,EAAYlC,aAAAA,CACV;AACEe,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEC,4BAAAA,IAAAA,EAAMzD,MAAMyD;AAAK,yBAAA;;;;0BAM7BpD,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAkE,eAAA,CAACvC,iBAAAA,EAAAA;oBAAKoD,GAAAA,EAAK,CAAA;oBAAGlD,UAAAA,EAAW,QAAA;;sCACvBH,cAAA,CAACN,gBAAAA,EAAAA;4BAAiBC,KAAAA,EAAOA;;sCACzB6C,eAAA,CAACvC,iBAAAA,EAAAA;4BAAKqD,SAAAA,EAAU,QAAA;4BAASnD,UAAAA,EAAW,YAAA;4BAAaoD,QAAAA,EAAU,CAAA;;8CACzDvD,cAAA,CAACX,UAAAA,EAAAA;oCAAWmE,IAAAA,EAAK,QAAA;oCAASX,OAAAA,EAASP,eAAAA;AACjC,oCAAA,QAAA,gBAAAtC,cAAA,CAACyD,uBAAAA,EAAAA;wCAAWC,SAAAA,EAAU,YAAA;wCAAaC,UAAAA,EAAW,UAAA;wCAAWC,QAAQ,EAAA,IAAA;AAC9DjE,wCAAAA,QAAAA,EAAAA,KAAAA,CAAMyD;;;AAGVxC,gCAAAA,QAAAA,kBACCZ,cAAA,CAACyD,uBAAAA,EAAAA;oCAAWC,SAAAA,EAAU,YAAA;oCAAaG,OAAAA,EAAQ,IAAA;AACxClE,oCAAAA,QAAAA,EAAAA,KAAAA,CAAMmE,IAAI,GAAGC,iBAAAA,CAAYpE,KAAAA,CAAMmE,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;;;AAMpD,YAAA,CAAClD,QAAAA,kBACA4B,eAAA,CAAAwB,mBAAA,EAAA;;kCACEhE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnB/D,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMsE,SAAS,GAAGnD,UAAAA,CAAW,IAAIoD,IAAAA,CAAKvE,KAAAA,CAAMsE,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFnE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnB/D,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMyE,SAAS,GAAGtD,UAAAA,CAAW,IAAIoD,IAAAA,CAAKvE,KAAAA,CAAMyE,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFnE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnB/D,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMmE,IAAI,GAAGC,iBAAAA,CAAYpE,KAAAA,CAAMmE,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;0BAKnD9D,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA0B,cAAA,CAACC,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,cAAA,CAACqE,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOvD,aAAAA,CAAc;AACnBe,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,2BAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAU,OAAAA,EAAQ,OAAA;wBACRhB,OAAAA,EAAS,CAACrD,CAAAA,GAAwBA,CAAAA,CAAEC,eAAe,EAAA;AAEnD,wBAAA,QAAA,gBAAAO,cAAA,CAACuE,UAAAA,EAAAA,EAAAA;;;;;;AAMb,CAAA;AAEA,MAAMC,QAAAA,GAAW7G,uBAAAA,CAAOa,QAAAA,CAAS;;gBAEjB,EAAE,CAAC,EAAEX,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;;AAEzD,CAAC;AAOD,MAAM8F,YAAY,CAAC,EAAEC,MAAM,EAAEhE,eAAe,EAAkB,GAAA;AAC5D,IAAA,MAAME,QAAAA,GAAWC,uBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IACtC,MAAM,EAAE2D,gBAAgB,EAAE,GAAGC,uCAAAA,EAAAA;AAC7B,IAAA,MAAM,EAAEpD,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,mCAAAA,EAAAA;AAC5C,IAAA,MAAM,EAAEV,aAAa,EAAE,GAAGC,sCAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;IAC3E,MAAM,EACJ4D,SAAAA,EAAW,EAAE1D,UAAU,EAAEC,SAAS,EAAEC,UAAAA,EAAYyD,UAAU,EAAExD,UAAU,EAAE,EACxEyD,SAAAA,EAAW,EAAE1D,UAAAA,EAAY2D,UAAU,EAAE,EACrCC,sBAAsB,EACtBC,qBAAqB,EACtB,GAAGC,uCAAAA,CAA4BT,MAAAA,CAAAA;IAEhC,MAAM9C,GAAAA,GAAMwD,mBAAAA,CAAUV,MAAAA,CAAO5C,EAAE,CAAA;;;AAI/B,IAAA,MAAME,iBAAiB,CAACxC,CAAAA,GAAAA;QACtB,IAAIA,CAAAA,CAAEyC,QAAQ,EAAE;AACdP,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBkB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAIpC,CAAAA,CAAE0C,OAAO,IAAI1C,CAAAA,CAAE2C,OAAO,EAAE;YACjCV,MAAAA,CAAOG,GAAAA,CAAAA;QACT,CAAA,MAAO;YACL+C,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMtC,gBAAgB,CAAC5C,CAAAA,GAAAA;QACrB,IAAIA,CAAAA,CAAEoC,GAAG,KAAK,OAAA,EAAS;AACrBpC,YAAAA,CAAAA,CAAE6C,cAAc,EAAA;YAChBsC,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA,CAAA,MAAO,IAAIlF,CAAAA,CAAEoC,GAAG,KAAK,GAAA,EAAK;AACxBpC,YAAAA,CAAAA,CAAE6C,cAAc,EAAA;YAChBZ,MAAAA,CAAOG,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMW,sBAAsB,CAAC/C,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAID,CAAAA,CAAEyC,QAAQ,EAAE;AACdP,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBkB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLH,MAAAA,CAAOG,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEY,eAAA,CAACgC,QAAAA,EAAAA;AACC/B,QAAAA,GAAAA,EAAK,CAAC4C,IAAAA,GAAAA;YACJP,UAAAA,CAAWO,IAAAA,CAAAA;YACXL,UAAAA,CAAWK,IAAAA,CAAAA;AACb,QAAA,CAAA;AACC,QAAA,GAAGlE,UAAU;AACb,QAAA,GAAGC,SAAS;QACbrC,WAAAA,EAAauC,UAAAA;QACbzC,cAAAA,EAAgBoC,aAAAA;QAChBjC,kBAAAA,EAAoBiG,sBAAAA;QACpBnG,oBAAAA,EAAsBoG,qBAAAA;AACtBxG,QAAAA,WAAAA,EAAa8C,UAAAA,CAAWI,GAAAA,CAAAA;QACxBc,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;QACLC,WAAAA,EAAa,CAACpD,CAAAA,GAAMA,CAAAA,CAAE6C,cAAc,EAAA;QACpCQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;;AAEV,YAAA,CAACxB,0BACAZ,cAAA,CAACb,UAAAA,EAAAA;gBAAW0D,OAAAA,EAAStD,YAAAA;gBAAcuD,SAAAA,EAAWvD,YAAAA;AAC5C,gBAAA,QAAA,gBAAAS,cAAA,CAACC,iBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,cAAA,CAAC+C,qBAAAA,EAAAA;AACCC,wBAAAA,OAAAA,EAASxB,UAAAA,CAAWI,GAAAA,CAAAA;wBACpBiB,OAAAA,EAASN,mBAAAA;AACTU,wBAAAA,YAAAA,EAAYlC,aAAAA,CACV;AACEe,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEC,4BAAAA,IAAAA,EAAMsB,OAAOtB;AAAK,yBAAA;;;;0BAM9BpD,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAkE,eAAA,CAACvC,iBAAAA,EAAAA;oBAAKoD,GAAAA,EAAK,CAAA;oBAAGlD,UAAAA,EAAW,QAAA;;sCACvBH,cAAA,CAACC,iBAAAA,EAAAA;4BACCC,cAAAA,EAAe,QAAA;4BACfC,UAAAA,EAAW,QAAA;4BACXC,YAAAA,EAAa,KAAA;4BACbC,KAAAA,EAAM,YAAA;4BACNC,KAAAA,EAAM,QAAA;4BACNC,MAAAA,EAAO,QAAA;4BACPC,MAAAA,EAAQ,CAAA;AAER,4BAAA,QAAA,gBAAAR,cAAA,CAACsF,YAAAA,EAAAA;gCAAWhF,KAAAA,EAAO,EAAA;gCAAIC,MAAAA,EAAQ;;;sCAEjCP,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;4BAAaC,UAAAA,EAAW,UAAA;4BAAWC,QAAQ,EAAA,IAAA;AAC9Dc,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOtB;;;;;AAIb,YAAA,CAACxC,QAAAA,kBACA4B,eAAA,CAAAwB,mBAAA,EAAA;;kCACEhE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOT,SAAS,GACbnD,UAAAA,CAAW,IAAIoD,IAAAA,CAAKQ,MAAAA,CAAOT,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRnE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAON,SAAS,GACbtD,UAAAA,CAAW,IAAIoD,IAAAA,CAAKQ,MAAAA,CAAON,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRnE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAACyD,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AAAa,4BAAA,QAAA,EAAA;;;;;0BAIzC1D,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA0B,cAAA,CAACC,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,cAAA,CAACqE,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOvD,aAAAA,CAAc;AACnBe,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,2BAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAU,OAAAA,EAAQ,OAAA;wBACRhB,OAAAA,EAAS,CAACrD,CAAAA,GAAwBA,CAAAA,CAAEC,eAAe,EAAA;AAEnD,wBAAA,QAAA,gBAAAO,cAAA,CAACuE,UAAAA,EAAAA,EAAAA;;;;;;AAMb,CAAA;AAaO,MAAMgB,WAAAA,GAAc,CAAC,EAC1BC,MAAM,EACNC,OAAAA,GAAU,EAAE,EACZC,UAAAA,GAAa,IAAI,EACjB/E,gBAAgB,EACC,GAAA;AACjB,IAAA,MAAMC,QAAAA,GAAWC,uBAAAA,EAAAA;IACjB,MAAM,EAAEE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAE2E,YAAY,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAGlE,mCAAAA,EAAAA;AAE3C,IAAA,MAAMmE,cAAAA,GAAiBlF,QAAAA,GACnBmF,uBAAAA,CAAcC,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAE7C,IAAI,KAAK,MAAA,IAAU6C,CAAAA,CAAE7C,IAAI,KAAK,SAAA,CAAA,GAC5D2C,uBAAAA;;;AAIJ,IAAA,MAAMG,qBAAqB,CAACtF,QAAAA;AAC5B,IAAA,MAAMuF,WAAWL,cAAAA,CAAeM,MAAM,IAAIF,kBAAAA,GAAqB,IAAI,CAAA,CAAA;AAEnE,IAAA,MAAMG,SAAAA,GAAYZ,OAAAA,CAAQW,MAAM,GAAGZ,OAAOY,MAAM;;;IAIhD,MAAM1F,eAAAA,GAA6BgF,aAC/BA,UAAAA,CAAWY,GAAG,CAAC,CAACC,IAAAA,GACdA,IAAAA,CAAKC,IAAI,KAAK,QAAA,GAAWpB,oBAAUmB,IAAAA,CAAK7B,MAAM,CAAC5C,EAAE,CAAA,GAAID,mBAAS0E,IAAAA,CAAK5G,KAAK,CAACmC,EAAE,CAAA,CAAA,GAE7E;AACK2D,QAAAA,GAAAA,OAAAA,CAAQa,GAAG,CAAC,CAAC5B,MAAAA,GAAWU,mBAAAA,CAAUV,OAAO5C,EAAE,CAAA,CAAA;AAC3C0D,QAAAA,GAAAA,MAAAA,CAAOc,GAAG,CAAC,CAAC3G,KAAAA,GAAUkC,kBAAAA,CAASlC,MAAMmC,EAAE,CAAA;AAC3C,KAAA;AACL,IAAA,MAAM,EAAE2E,WAAW,EAAEC,eAAe,EAAE,GAAGC,4BAAkBhB,YAAAA,EAAcjF,eAAAA,CAAAA;AAEzE,IAAA,MAAMkG,eAAAA,GAAkB,IAAA;AACtB,QAAA,IAAIH,WAAAA,EAAa;AACfZ,YAAAA,KAAAA,EAAAA;QACF,CAAA,MAAO;YACLD,SAAAA,CAAUlF,eAAAA,CAAAA;AACZ,QAAA;AACF,IAAA,CAAA;;;AAIA,IAAA,IAAI2F,cAAc,CAAA,EAAG;QACnB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACE7D,eAAA,CAAC9E,WAAAA,EAAAA;QAAYyI,QAAAA,EAAUA,QAAAA;AAAUU,QAAAA,QAAAA,EAAU,CAACnB,UAAAA,GAAaA,WAAWU,MAAM,GAAGC,SAAQ,IAAK,CAAA;;0BACxFrG,cAAA,CAAChC,WAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAwE,eAAA,CAACsE,kBAAAA,EAAAA;;AACEZ,wBAAAA,kBAAAA,kBACClG,cAAA,CAACZ,UAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAY,cAAA,CAACC,iBAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAD,cAAA,CAAC+C,qBAAAA,EAAAA;AACCC,oCAAAA,OAAAA,EAAS0D,kBAAkB,eAAA,GAAkBD,WAAAA;oCAC7CM,QAAAA,EAAUrG,eAAAA,CAAgB0F,MAAM,KAAK,CAAA;oCACrCY,eAAAA,EAAiBJ,eAAAA;AACjB3D,oCAAAA,YAAAA,EAAYlC,aAAAA,CAAc;AACxBe,wCAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,8BAAA,CAAA;wCACtBC,cAAAA,EAAgB;AAClB,qCAAA;;;;wBAKP2C,cAAAA,CAAeQ,GAAG,CAAC,CAACW,MAAAA,GAAAA;4BACnB,MAAMC,gBAAAA,GAAmBnG,aAAAA,CAAckG,MAAAA,CAAO3C,KAAK,CAAA;AACnD,4BAAA,MAAM6C,gBAAAA,GAAmB,kBAAA,IAAsBF,MAAAA,IAAUA,MAAAA,CAAOE,gBAAgB;AAEhF,4BAAA,IAAIA,gBAAAA,EAAkB;AACpB,gCAAA,qBACEnH,cAAA,CAAC7B,QAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAA6B,cAAA,CAACoH,2BAAAA,EAAAA;kDACErG,aAAAA,CAAc;AACbe,4CAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,sBAAA,CAAA;4CACtBC,cAAAA,EAAgB;AAClB,yCAAA;;AALW8D,iCAAAA,EAAAA,MAAAA,CAAO7D,IAAI,CAAA;AAS9B,4BAAA;AAEA,4BAAA,qBACEpD,cAAA,CAAC7B,QAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA6B,cAAA,CAACyD,uBAAAA,EAAAA;oCAAWC,SAAAA,EAAU,YAAA;oCAAaG,OAAAA,EAAQ,OAAA;AACxCqD,oCAAAA,QAAAA,EAAAA;;AAFUD,6BAAAA,EAAAA,MAAAA,CAAO7D,IAAI,CAAA;AAM9B,wBAAA,CAAA;;;;0BAGJZ,eAAA,CAAC6E,qBAAAA,EAAAA;;AACE3B,oBAAAA,UAAAA,EAAYY,IAAI,CAACC,IAAAA,GAChBA,KAAKC,IAAI,KAAK,yBACZxG,cAAA,CAACyE,SAAAA,EAAAA;AAECC,4BAAAA,MAAAA,EAAQ6B,KAAK7B,MAAM;4BACnBhE,eAAAA,EAAiBA;2BAFZ,CAAC,OAAO,EAAE6F,IAAAA,CAAK7B,MAAM,CAAC5C,EAAE,CAAA,CAAE,kBAKjC9B,cAAA,CAACS,QAAAA,EAAAA;AAECd,4BAAAA,KAAAA,EAAO4G,KAAK5G,KAAK;4BACjBe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;2BAHb4F,IAAAA,CAAK5G,KAAK,CAACmC,EAAE,CAAA,CAAA;AAOvB,oBAAA,CAAC4D,cACAD,OAAAA,CAAQa,GAAG,CAAC,CAAC5B,uBACX1E,cAAA,CAACyE,SAAAA,EAAAA;4BAECC,MAAAA,EAAQA,MAAAA;4BACRhE,eAAAA,EAAiBA;AAFZ,yBAAA,EAAA,CAAC,OAAO,EAAEgE,MAAAA,CAAO5C,EAAE,CAAA,CAAE,CAAA,CAAA;AAK/B,oBAAA,CAAC4D,cACAF,MAAAA,CAAOc,GAAG,CAAC,CAAC3G,sBACVK,cAAA,CAACS,QAAAA,EAAAA;4BAECd,KAAAA,EAAOA,KAAAA;4BACPe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;AAHbhB,yBAAAA,EAAAA,KAAAA,CAAMmC,EAAE,CAAA;;;;;AAS3B;;;;"}