@mano8/astro-media-m8 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +54 -11
  2. package/dist/src/integration.d.ts.map +1 -1
  3. package/dist/src/integration.js +1 -0
  4. package/dist/src/integration.js.map +1 -1
  5. package/dist/src/runtime/api/categories.d.ts +14 -8
  6. package/dist/src/runtime/api/categories.d.ts.map +1 -1
  7. package/dist/src/runtime/api/categories.js +21 -8
  8. package/dist/src/runtime/api/categories.js.map +1 -1
  9. package/dist/src/runtime/api/index.d.ts +8 -0
  10. package/dist/src/runtime/api/index.d.ts.map +1 -1
  11. package/dist/src/runtime/api/index.js +8 -0
  12. package/dist/src/runtime/api/index.js.map +1 -1
  13. package/dist/src/runtime/api/transfer.d.ts +19 -0
  14. package/dist/src/runtime/api/transfer.d.ts.map +1 -0
  15. package/dist/src/runtime/api/transfer.js +48 -0
  16. package/dist/src/runtime/api/transfer.js.map +1 -0
  17. package/dist/src/runtime/client.d.ts.map +1 -1
  18. package/dist/src/runtime/client.js +7 -1
  19. package/dist/src/runtime/client.js.map +1 -1
  20. package/dist/src/runtime/compatibility.d.ts +6 -6
  21. package/dist/src/runtime/compatibility.d.ts.map +1 -1
  22. package/dist/src/runtime/compatibility.js +59 -7
  23. package/dist/src/runtime/compatibility.js.map +1 -1
  24. package/dist/src/runtime/errors.d.ts +20 -2
  25. package/dist/src/runtime/errors.d.ts.map +1 -1
  26. package/dist/src/runtime/errors.js +53 -2
  27. package/dist/src/runtime/errors.js.map +1 -1
  28. package/dist/src/runtime/hooks/index.d.ts +2 -0
  29. package/dist/src/runtime/hooks/index.d.ts.map +1 -1
  30. package/dist/src/runtime/hooks/index.js +2 -0
  31. package/dist/src/runtime/hooks/index.js.map +1 -1
  32. package/dist/src/runtime/hooks/useMediaCategories.d.ts +30 -0
  33. package/dist/src/runtime/hooks/useMediaCategories.d.ts.map +1 -0
  34. package/dist/src/runtime/hooks/useMediaCategories.js +56 -0
  35. package/dist/src/runtime/hooks/useMediaCategories.js.map +1 -0
  36. package/dist/src/runtime/hooks/useMediaObjects.d.ts.map +1 -1
  37. package/dist/src/runtime/hooks/useMediaObjects.js +14 -2
  38. package/dist/src/runtime/hooks/useMediaObjects.js.map +1 -1
  39. package/dist/src/runtime/hooks/useMediaTransfer.d.ts +42 -0
  40. package/dist/src/runtime/hooks/useMediaTransfer.d.ts.map +1 -0
  41. package/dist/src/runtime/hooks/useMediaTransfer.js +106 -0
  42. package/dist/src/runtime/hooks/useMediaTransfer.js.map +1 -0
  43. package/dist/src/runtime/queryKeys.d.ts +2 -0
  44. package/dist/src/runtime/queryKeys.d.ts.map +1 -1
  45. package/dist/src/runtime/queryKeys.js +2 -0
  46. package/dist/src/runtime/queryKeys.js.map +1 -1
  47. package/dist/src/runtime/react/CategoryManager.d.ts +10 -0
  48. package/dist/src/runtime/react/CategoryManager.d.ts.map +1 -0
  49. package/dist/src/runtime/react/CategoryManager.js +194 -0
  50. package/dist/src/runtime/react/CategoryManager.js.map +1 -0
  51. package/dist/src/runtime/react/CategoryMultiSelect.d.ts +73 -0
  52. package/dist/src/runtime/react/CategoryMultiSelect.d.ts.map +1 -0
  53. package/dist/src/runtime/react/CategoryMultiSelect.js +179 -0
  54. package/dist/src/runtime/react/CategoryMultiSelect.js.map +1 -0
  55. package/dist/src/runtime/react/MediaCategoryTreePane.d.ts +22 -0
  56. package/dist/src/runtime/react/MediaCategoryTreePane.d.ts.map +1 -0
  57. package/dist/src/runtime/react/MediaCategoryTreePane.js +244 -0
  58. package/dist/src/runtime/react/MediaCategoryTreePane.js.map +1 -0
  59. package/dist/src/runtime/react/MediaErrorBoundary.d.ts +53 -0
  60. package/dist/src/runtime/react/MediaErrorBoundary.d.ts.map +1 -0
  61. package/dist/src/runtime/react/MediaErrorBoundary.js +58 -0
  62. package/dist/src/runtime/react/MediaErrorBoundary.js.map +1 -0
  63. package/dist/src/runtime/react/MediaLibrary.d.ts +16 -1
  64. package/dist/src/runtime/react/MediaLibrary.d.ts.map +1 -1
  65. package/dist/src/runtime/react/MediaLibrary.js +75 -110
  66. package/dist/src/runtime/react/MediaLibrary.js.map +1 -1
  67. package/dist/src/runtime/react/MediaObjectViews.d.ts +47 -0
  68. package/dist/src/runtime/react/MediaObjectViews.d.ts.map +1 -0
  69. package/dist/src/runtime/react/MediaObjectViews.js +131 -0
  70. package/dist/src/runtime/react/MediaObjectViews.js.map +1 -0
  71. package/dist/src/runtime/react/MediaTransferPanel.d.ts +17 -0
  72. package/dist/src/runtime/react/MediaTransferPanel.d.ts.map +1 -0
  73. package/dist/src/runtime/react/MediaTransferPanel.js +93 -0
  74. package/dist/src/runtime/react/MediaTransferPanel.js.map +1 -0
  75. package/dist/src/runtime/react/MediaUploadDropzone.d.ts +36 -1
  76. package/dist/src/runtime/react/MediaUploadDropzone.d.ts.map +1 -1
  77. package/dist/src/runtime/react/MediaUploadDropzone.js +63 -3
  78. package/dist/src/runtime/react/MediaUploadDropzone.js.map +1 -1
  79. package/dist/src/runtime/react/ObjectDetail.d.ts.map +1 -1
  80. package/dist/src/runtime/react/ObjectDetail.js +51 -1
  81. package/dist/src/runtime/react/ObjectDetail.js.map +1 -1
  82. package/dist/src/runtime/react/categoryBranch.d.ts +38 -0
  83. package/dist/src/runtime/react/categoryBranch.d.ts.map +1 -0
  84. package/dist/src/runtime/react/categoryBranch.js +37 -0
  85. package/dist/src/runtime/react/categoryBranch.js.map +1 -0
  86. package/dist/src/runtime/react/default-ui/index.d.ts +6 -2
  87. package/dist/src/runtime/react/default-ui/index.d.ts.map +1 -1
  88. package/dist/src/runtime/react/default-ui/index.js +14 -9
  89. package/dist/src/runtime/react/default-ui/index.js.map +1 -1
  90. package/dist/src/runtime/react/index.d.ts +5 -2
  91. package/dist/src/runtime/react/index.d.ts.map +1 -1
  92. package/dist/src/runtime/react/index.js +3 -0
  93. package/dist/src/runtime/react/index.js.map +1 -1
  94. package/dist/src/runtime/react/mediaLibraryLabels.d.ts +93 -0
  95. package/dist/src/runtime/react/mediaLibraryLabels.d.ts.map +1 -0
  96. package/dist/src/runtime/react/mediaLibraryLabels.js +100 -0
  97. package/dist/src/runtime/react/mediaLibraryLabels.js.map +1 -0
  98. package/dist/src/runtime/react/mediaLibraryStyles.d.ts +44 -0
  99. package/dist/src/runtime/react/mediaLibraryStyles.d.ts.map +1 -0
  100. package/dist/src/runtime/react/mediaLibraryStyles.js +82 -0
  101. package/dist/src/runtime/react/mediaLibraryStyles.js.map +1 -0
  102. package/dist/src/runtime/routes.d.ts +2 -0
  103. package/dist/src/runtime/routes.d.ts.map +1 -1
  104. package/dist/src/runtime/routes.js +2 -0
  105. package/dist/src/runtime/routes.js.map +1 -1
  106. package/dist/src/runtime/schemas.d.ts +265 -0
  107. package/dist/src/runtime/schemas.d.ts.map +1 -1
  108. package/dist/src/runtime/schemas.js +173 -6
  109. package/dist/src/runtime/schemas.js.map +1 -1
  110. package/dist/src/runtime/upload/uploadController.d.ts +7 -0
  111. package/dist/src/runtime/upload/uploadController.d.ts.map +1 -1
  112. package/dist/src/runtime/upload/uploadController.js +10 -5
  113. package/dist/src/runtime/upload/uploadController.js.map +1 -1
  114. package/package.json +37 -30
  115. package/registry/r/media-category-tree.json +21 -0
  116. package/registry/r/media-dashboard-overview.json +1 -1
  117. package/registry/r/media-library-tree.json +25 -0
  118. package/registry/r/media-maintenance-panel.json +3 -2
  119. package/registry/r/media-transfer-dialog.json +26 -0
  120. package/registry/r/registry.json +18 -0
  121. package/registry.json +61 -1
  122. package/src/routes/categories.astro +12 -0
  123. package/src/scaffold/styles/media.css +395 -5
@@ -0,0 +1,244 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * The tree view's left pane: the caller's nested user categories, their counts,
4
+ * and the full `role="tree"` keyboard contract (`U7`).
5
+ */
6
+ import { useId, useMemo, useRef, useState } from "react";
7
+ import { useCategoryTree } from "../hooks/useMediaCategories.js";
8
+ import { selectedTreeNodeStyle, treeNodeRowClassName, treePaneClassName, treeToggleClassName, treeToggleSpacerClassName } from "./mediaLibraryStyles.js";
9
+ /**
10
+ * Stable pane key for a selection. It addresses the rows for keyboard
11
+ * navigation and seeds each row's generated `aria` ids, so it is derived from
12
+ * the selection rather than taken from the server node.
13
+ */
14
+ function branchKey(selection) {
15
+ return selection.kind === "category" ? `category-${selection.id}` : selection.kind;
16
+ }
17
+ /**
18
+ * "All media" / "Uncategorized": the two rows in the pane that are not a
19
+ * server category. They are plain level-1 treeitems with no count badge — the
20
+ * server node counts are per-category, and inventing a total here would be a
21
+ * second, unverifiable source for a number the tree already owns.
22
+ */
23
+ const PSEUDO_ROWS = [
24
+ { selection: { kind: "all" } },
25
+ { selection: { kind: "uncategorized" } }
26
+ ];
27
+ function collectBranchRows(nodes, expandedIds, level, parentKey, out) {
28
+ for (const node of nodes) {
29
+ const key = `category-${node.id}`;
30
+ const hasChildren = node.children.length > 0;
31
+ const expanded = hasChildren && expandedIds.has(node.id);
32
+ out.push({
33
+ key,
34
+ selection: { kind: "category", id: node.id },
35
+ level,
36
+ parentKey,
37
+ hasChildren,
38
+ expanded
39
+ });
40
+ if (expanded)
41
+ collectBranchRows(node.children, expandedIds, level + 1, key, out);
42
+ }
43
+ }
44
+ function flattenPaneRows(tree, expandedIds) {
45
+ const rows = PSEUDO_ROWS.map(({ selection }) => ({
46
+ key: branchKey(selection),
47
+ selection,
48
+ level: 1,
49
+ parentKey: null,
50
+ hasChildren: false,
51
+ expanded: false
52
+ }));
53
+ collectBranchRows(tree, expandedIds, 1, null, rows);
54
+ return rows;
55
+ }
56
+ /**
57
+ * One `role="treeitem"` row — a pseudo-row or a category — plus, when it is an
58
+ * expanded branch, the `role="group"` holding its children.
59
+ *
60
+ * The `<li>` carries the tab stop, not the row inside it: a treeitem must not
61
+ * hold its own focusable descendants, so the row that used to be a `<button>`
62
+ * is a non-focusable `<span>` and the pane's keyboard contract covers what the
63
+ * button did. The focus ring is drawn on that row rather than on the `<li>` so
64
+ * it does not wrap the whole subtree.
65
+ */
66
+ function MediaCategoryTreeItem({ controller, selection, label, level, count, countTitle, hasChildren, expanded, children }) {
67
+ const key = branchKey(selection);
68
+ const isSelected = branchKey(controller.selection) === key;
69
+ const labelId = `${controller.baseId}-${key}-label`;
70
+ const countId = `${controller.baseId}-${key}-count`;
71
+ const modifier = selection.kind === "category" ? "" : ` fa-media-tree-node--${selection.kind}`;
72
+ // Read out of the union once, into a `const`, so the toggle handler keeps a
73
+ // narrowing that a closure over the parameter itself would lose.
74
+ const categoryId = selection.kind === "category" ? selection.id : null;
75
+ return (_jsxs("li", { ref: (element) => {
76
+ controller.registerItem(key, element);
77
+ }, className: `fa-media-tree-node${modifier} rounded-md outline-none`, role: "treeitem", tabIndex: controller.activeKey === key ? 0 : -1, "aria-level": level, "aria-selected": isSelected, "aria-expanded": hasChildren ? expanded : undefined, "aria-labelledby": count === undefined ? labelId : `${labelId} ${countId}`, onKeyDown: (event) => controller.onItemKeyDown(event, key), onFocus: (event) => controller.onItemFocus(event, key), children: [_jsxs("span", { className: treeNodeRowClassName, style: isSelected ? selectedTreeNodeStyle : undefined, onPointerDown: () => controller.onItemPointerDown(key), onClick: () => controller.select(selection), children: [hasChildren && categoryId !== null ? (_jsx("span", { className: treeToggleClassName, "aria-hidden": "true", title: expanded ? controller.labels.collapse(label) : controller.labels.expand(label), onClick: (event) => {
78
+ event.stopPropagation();
79
+ controller.toggle(categoryId);
80
+ }, children: expanded ? "▾" : "▸" })) : (_jsx("span", { className: treeToggleSpacerClassName, "aria-hidden": "true" })), _jsx("span", { id: labelId, className: "fa-media-tree-name whitespace-nowrap", children: label }), count === undefined ? null : (_jsx("span", { id: countId, className: "fa-media-badge fa-media-category-count ml-auto shrink-0", title: countTitle, children: count }))] }), hasChildren && expanded ? (_jsx("ul", { role: "group", className: "fa-media-tree-children m-0 ml-1 list-none border-l border-border p-0 pl-3", children: children })) : null] }));
81
+ }
82
+ /**
83
+ * One category row plus its subtree in the browse pane.
84
+ *
85
+ * Counts come straight from the server node: the badge shows
86
+ * `total_object_count` (this branch including everything under it) and names
87
+ * both numbers in its `title`, since a parent whose own `object_count` is 0
88
+ * still browses to a non-empty branch.
89
+ */
90
+ function MediaCategoryBranch({ node, depth, controller }) {
91
+ const hasChildren = node.children.length > 0;
92
+ const expanded = hasChildren && controller.expandedIds.has(node.id);
93
+ return (_jsx(MediaCategoryTreeItem, { controller: controller, selection: { kind: "category", id: node.id }, label: node.name, level: depth, count: node.total_object_count, countTitle: controller.labels.countTitle(node.object_count, node.total_object_count, node.name), hasChildren: hasChildren, expanded: expanded, children: expanded
94
+ ? node.children.map((child) => (_jsx(MediaCategoryBranch, { node: child, depth: depth + 1, controller: controller }, child.id)))
95
+ : null }));
96
+ }
97
+ /**
98
+ * The left pane of the tree view: the caller's nested user categories with
99
+ * their counts.
100
+ *
101
+ * `useCategoryTree()` lives **here** rather than in `MediaLibrary` so the
102
+ * category request is only issued once the user actually opens the tree view —
103
+ * the list/grid/masonry views must not pay for a fetch they never render.
104
+ *
105
+ * The a11y contract matches `astro-ui-m8`'s `tree-view` registry block so the
106
+ * runtime pane and the registry skin do not diverge: `role="tree"` /
107
+ * `role="group"` / `role="treeitem"`, `aria-level`, `aria-selected`,
108
+ * `aria-expanded` on parents, a roving tabindex holding exactly one tab stop,
109
+ * and ArrowUp/ArrowDown/Home/End/ArrowRight/ArrowLeft/Enter/Space.
110
+ */
111
+ export function MediaCategoryTreePane({ selection, onSelect, labels }) {
112
+ const { tree, loading, error } = useCategoryTree();
113
+ const baseId = useId();
114
+ const headingId = `${baseId}-heading`;
115
+ // Expanded ids, not collapsed ones: the pane opens with every branch shut,
116
+ // so a deep tree presents its roots rather than its whole depth at once and
117
+ // the pane starts at the width it can actually show. An empty set is the
118
+ // honest seed for that — the inverted `collapsed` set this replaced could
119
+ // only mean "all open" on first render, because the ids it would have to
120
+ // hold are not known until the tree resolves.
121
+ const [expandedIds, setExpandedIds] = useState(() => new Set());
122
+ const [focusedKey, setFocusedKey] = useState(null);
123
+ const itemsRef = useRef(new Map());
124
+ const rows = useMemo(() => flattenPaneRows(tree, expandedIds), [tree, expandedIds]);
125
+ // Roving tabindex: exactly one treeitem is tabbable — the last focused row
126
+ // while it stays visible, else the selected row, else the first row.
127
+ const selectedKey = branchKey(selection);
128
+ const isVisible = (key) => key !== null && rows.some((row) => row.key === key);
129
+ let activeKey = rows[0]?.key ?? null;
130
+ if (isVisible(focusedKey))
131
+ activeKey = focusedKey;
132
+ else if (isVisible(selectedKey))
133
+ activeKey = selectedKey;
134
+ function registerItem(key, element) {
135
+ if (element === null)
136
+ itemsRef.current.delete(key);
137
+ else
138
+ itemsRef.current.set(key, element);
139
+ }
140
+ function focusItem(key) {
141
+ setFocusedKey(key);
142
+ itemsRef.current.get(key)?.focus();
143
+ }
144
+ // `.at()` rather than an index read, and a negative guard because `.at(-1)`
145
+ // wraps to the end of the list — ArrowUp on the first row must stay put, not
146
+ // jump to the last one.
147
+ function focusAt(index) {
148
+ if (index < 0)
149
+ return;
150
+ const row = rows.at(index);
151
+ if (row !== undefined)
152
+ focusItem(row.key);
153
+ }
154
+ function setExpansion(id, expand) {
155
+ setExpandedIds((previous) => {
156
+ if (previous.has(id) === expand)
157
+ return previous;
158
+ const next = new Set(previous);
159
+ if (expand)
160
+ next.add(id);
161
+ else
162
+ next.delete(id);
163
+ return next;
164
+ });
165
+ }
166
+ // ArrowRight opens a closed branch, then steps into it; a leaf is a no-op.
167
+ function expandOrEnter(row, index) {
168
+ if (!row.hasChildren || row.selection.kind !== "category")
169
+ return false;
170
+ if (row.expanded)
171
+ focusAt(index + 1);
172
+ else
173
+ setExpansion(row.selection.id, true);
174
+ return true;
175
+ }
176
+ // ArrowLeft closes an open branch, else steps out to the parent.
177
+ function collapseOrLeave(row) {
178
+ if (row.hasChildren && row.expanded && row.selection.kind === "category") {
179
+ setExpansion(row.selection.id, false);
180
+ return true;
181
+ }
182
+ if (row.parentKey === null)
183
+ return false;
184
+ focusItem(row.parentKey);
185
+ return true;
186
+ }
187
+ function applyKey(key, row, index) {
188
+ switch (key) {
189
+ case "ArrowDown":
190
+ focusAt(index + 1);
191
+ return true;
192
+ case "ArrowUp":
193
+ focusAt(index - 1);
194
+ return true;
195
+ case "Home":
196
+ focusAt(0);
197
+ return true;
198
+ case "End":
199
+ focusAt(rows.length - 1);
200
+ return true;
201
+ case "ArrowRight":
202
+ return expandOrEnter(row, index);
203
+ case "ArrowLeft":
204
+ return collapseOrLeave(row);
205
+ case "Enter":
206
+ case " ":
207
+ onSelect(row.selection);
208
+ return true;
209
+ default:
210
+ return false;
211
+ }
212
+ }
213
+ const controller = {
214
+ baseId,
215
+ labels,
216
+ selection,
217
+ activeKey,
218
+ expandedIds,
219
+ registerItem,
220
+ select: onSelect,
221
+ toggle: (id) => setExpansion(id, !expandedIds.has(id)),
222
+ onItemKeyDown: (event, key) => {
223
+ // Only the treeitem that actually holds focus reacts; the event bubbles
224
+ // through every ancestor treeitem on its way out.
225
+ if (event.target !== event.currentTarget)
226
+ return;
227
+ const index = rows.findIndex((row) => row.key === key);
228
+ const row = rows.at(index);
229
+ if (index === -1 || row === undefined)
230
+ return;
231
+ if (applyKey(event.key, row, index))
232
+ event.preventDefault();
233
+ },
234
+ onItemFocus: (event, key) => {
235
+ if (event.target === event.currentTarget)
236
+ setFocusedKey(key);
237
+ },
238
+ // A pointer press moves the roving tabindex with it, so a later Tab leaves
239
+ // the pane from the row the user last touched.
240
+ onItemPointerDown: (key) => focusItem(key)
241
+ };
242
+ return (_jsxs("aside", { className: treePaneClassName, "aria-label": labels.regionLabel, children: [_jsx("h3", { id: headingId, children: labels.title }), error ? (_jsx("p", { role: "alert", className: "fa-media-tree-error", children: labels.loadError })) : null, loading && tree.length === 0 ? _jsx("p", { className: "fa-media-category-hint", children: labels.loading }) : null, !loading && !error && tree.length === 0 ? (_jsx("p", { className: "fa-media-category-hint", children: labels.empty })) : null, _jsxs("ul", { role: "tree", "aria-labelledby": headingId, className: "fa-media-tree-nodes m-0 min-w-max list-none p-0", children: [PSEUDO_ROWS.map((row) => (_jsx(MediaCategoryTreeItem, { controller: controller, selection: row.selection, label: row.selection.kind === "all" ? labels.allMedia : labels.uncategorized, level: 1, hasChildren: false, expanded: false }, branchKey(row.selection)))), tree.map((node) => (_jsx(MediaCategoryBranch, { node: node, depth: 1, controller: controller }, node.id)))] })] }));
243
+ }
244
+ //# sourceMappingURL=MediaCategoryTreePane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaCategoryTreePane.js","sourceRoot":"","sources":["../../../../src/runtime/react/MediaCategoryTreePane.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Island-root error boundary for the media plugin (`A-C3`).
4
+ *
5
+ * Every media view is mounted as an Astro island. A render throw anywhere
6
+ * inside one unmounts the entire island tree, so the route is left with a blank
7
+ * region and a console trace — the same failure the plugin already handles
8
+ * gracefully when a *request* fails, and handled not at all when a *render*
9
+ * fails. This boundary closes that gap.
10
+ *
11
+ * A class on purpose: `getDerivedStateFromError`/`componentDidCatch` still have
12
+ * no hook equivalent.
13
+ *
14
+ * The prop contract mirrors `@mano8/astro-ui-m8`'s canonical `error-boundary`
15
+ * registry block deliberately, so the two can be collapsed onto one
16
+ * implementation once that block is reachable from this package. It is not
17
+ * reachable today: the block ships in an unpublished `astro-ui-m8`, and copied
18
+ * registry items are consumer-side artifacts rather than package runtime.
19
+ */
20
+ export interface MediaErrorBoundaryFallbackProps {
21
+ error: Error;
22
+ reset: () => void;
23
+ }
24
+ export interface MediaErrorBoundaryLabels {
25
+ title: string;
26
+ description: string;
27
+ retry: string;
28
+ }
29
+ export interface MediaErrorBoundaryProps {
30
+ children: React.ReactNode;
31
+ /** Replaces the default surface. Receives the error and a `reset`. */
32
+ fallback?: (props: MediaErrorBoundaryFallbackProps) => React.ReactNode;
33
+ /** Reporting hook. The boundary never logs on its own. */
34
+ onError?: (error: Error, info: {
35
+ componentStack: string;
36
+ }) => void;
37
+ /** Clears the boundary when any member changes, compared by `Object.is`. */
38
+ resetKeys?: readonly unknown[];
39
+ labels?: Partial<MediaErrorBoundaryLabels>;
40
+ }
41
+ interface MediaErrorBoundaryState {
42
+ error: Error | null;
43
+ }
44
+ export declare class MediaErrorBoundary extends React.Component<MediaErrorBoundaryProps, MediaErrorBoundaryState> {
45
+ state: MediaErrorBoundaryState;
46
+ static getDerivedStateFromError(thrown: unknown): MediaErrorBoundaryState;
47
+ componentDidCatch(thrown: unknown, info: React.ErrorInfo): void;
48
+ componentDidUpdate(previous: MediaErrorBoundaryProps): void;
49
+ reset: () => void;
50
+ render(): React.ReactNode;
51
+ }
52
+ export {};
53
+ //# sourceMappingURL=MediaErrorBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaErrorBoundary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/MediaErrorBoundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAQD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,KAAK,CAAC,SAAS,CAAC;IACvE,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,4EAA4E;IAC5E,SAAS,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC5C;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAkBD,qBAAa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CACrD,uBAAuB,EACvB,uBAAuB,CACxB;IACU,KAAK,EAAE,uBAAuB,CAAmB;IAE1D,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,uBAAuB;IAIhE,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI;IAM/D,kBAAkB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI;IAMpE,KAAK,QAAO,IAAI,CAEd;IAEO,MAAM,IAAI,KAAK,CAAC,SAAS;CA4BnC"}
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ const DEFAULT_LABELS = {
4
+ title: "This view stopped responding",
5
+ description: "The page hit an unexpected error and could not finish rendering.",
6
+ retry: "Reload this view"
7
+ };
8
+ /** `throw "boom"` is legal, so normalize before handing anything on. */
9
+ function toError(thrown) {
10
+ if (thrown instanceof Error)
11
+ return thrown;
12
+ if (typeof thrown === "string")
13
+ return new Error(thrown);
14
+ return new Error("The view failed to render.");
15
+ }
16
+ function resetKeysChanged(previous, next) {
17
+ if (previous === undefined || next === undefined)
18
+ return false;
19
+ if (previous.length !== next.length)
20
+ return true;
21
+ return previous.some((value, index) => !Object.is(value, next[index]));
22
+ }
23
+ export class MediaErrorBoundary extends React.Component {
24
+ state = { error: null };
25
+ static getDerivedStateFromError(thrown) {
26
+ return { error: toError(thrown) };
27
+ }
28
+ componentDidCatch(thrown, info) {
29
+ this.props.onError?.(toError(thrown), {
30
+ componentStack: info.componentStack ?? ""
31
+ });
32
+ }
33
+ componentDidUpdate(previous) {
34
+ if (this.state.error === null)
35
+ return;
36
+ if (!resetKeysChanged(previous.resetKeys, this.props.resetKeys))
37
+ return;
38
+ this.reset();
39
+ }
40
+ reset = () => {
41
+ this.setState({ error: null });
42
+ };
43
+ render() {
44
+ const { error } = this.state;
45
+ if (error === null)
46
+ return this.props.children;
47
+ if (this.props.fallback) {
48
+ return this.props.fallback({ error, reset: this.reset });
49
+ }
50
+ const labels = { ...DEFAULT_LABELS, ...this.props.labels };
51
+ // The caught message is deliberately not rendered: a render throw carries
52
+ // whatever the failing code put in it — an object key, a URL, a parse
53
+ // fragment — and this is a user-facing surface. A host that wants the
54
+ // detail reads it from `onError` or passes its own `fallback`.
55
+ return (_jsxs("section", { className: "fa-media-panel", "data-media-error-boundary": "fallback", children: [_jsx("h2", { children: labels.title }), _jsx("p", { role: "alert", children: labels.description }), _jsx("button", { type: "button", "data-media-error-boundary-retry": "", onClick: this.reset, children: labels.retry })] }));
56
+ }
57
+ }
58
+ //# sourceMappingURL=MediaErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaErrorBoundary.js","sourceRoot":"","sources":["../../../../src/runtime/react/MediaErrorBoundary.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,21 @@
1
+ import { type MediaUploadDropzoneLabels } from "./MediaUploadDropzone.js";
2
+ import { type MediaLibraryLabels } from "./mediaLibraryLabels.js";
1
3
  import type { ObjectListParams } from "../schemas.js";
2
- export declare function MediaLibrary({ objectHref, initial }: {
4
+ export type { MediaLibraryLabels };
5
+ export declare function MediaLibrary({ objectHref, initial, initialUploadOpen, labels: labelOverrides }: {
3
6
  objectHref?: (id: string) => string;
4
7
  initial?: ObjectListParams;
8
+ /** Open the library's upload dialog on first render (legacy upload routes). */
9
+ initialUploadOpen?: boolean;
10
+ labels?: Partial<Omit<MediaLibraryLabels, "views" | "categories" | "statuses" | "tree" | "transfer" | "upload">> & {
11
+ views?: Partial<MediaLibraryLabels["views"]>;
12
+ categories?: Partial<MediaLibraryLabels["categories"]>;
13
+ statuses?: Partial<MediaLibraryLabels["statuses"]>;
14
+ tree?: Partial<MediaLibraryLabels["tree"]>;
15
+ transfer?: Partial<MediaLibraryLabels["transfer"]>;
16
+ upload?: Partial<Omit<MediaLibraryLabels["upload"], "form">> & {
17
+ form?: Partial<MediaUploadDropzoneLabels>;
18
+ };
19
+ };
5
20
  }): import("react").JSX.Element;
6
21
  //# sourceMappingURL=MediaLibrary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaLibrary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/MediaLibrary.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuD,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAkM3G,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,OAAY,EACb,EAAE;IACD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,+BA6IA"}
1
+ {"version":3,"file":"MediaLibrary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/MediaLibrary.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAgB/F,OAAO,EAAkB,KAAK,kBAAkB,EAAyB,MAAM,yBAAyB,CAAC;AAmBzG,OAAO,KAAK,EAAuD,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE3G,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAanC,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,OAAY,EACZ,iBAAyB,EACzB,MAAM,EAAE,cAAc,EACvB,EAAE;IACD,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG;QACjH,KAAK,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,UAAU,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QACvD,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;YAC7D,IAAI,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;SAC3C,CAAC;KACH,CAAC;CACH,+BA+OA"}