sherick-ui 2.0.0 → 2.1.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.
- package/README.md +55 -199
- package/dist/cjs/components/Breadcrumb.cjs +47 -0
- package/dist/cjs/components/Breadcrumb.cjs.map +1 -0
- package/dist/cjs/components/Calendar.cjs +298 -0
- package/dist/cjs/components/Calendar.cjs.map +1 -0
- package/dist/cjs/components/Combobox.cjs +1 -1
- package/dist/cjs/components/Combobox.cjs.map +1 -1
- package/dist/cjs/components/Command.cjs +81 -0
- package/dist/cjs/components/Command.cjs.map +1 -0
- package/dist/cjs/components/CommandPalette.cjs +52 -0
- package/dist/cjs/components/CommandPalette.cjs.map +1 -0
- package/dist/cjs/components/DatePicker.cjs +107 -0
- package/dist/cjs/components/DatePicker.cjs.map +1 -0
- package/dist/cjs/components/DateRangePicker.cjs +165 -0
- package/dist/cjs/components/DateRangePicker.cjs.map +1 -0
- package/dist/cjs/components/DialogSurface.cjs +6 -5
- package/dist/cjs/components/DialogSurface.cjs.map +1 -1
- package/dist/cjs/components/FileUpload.cjs +203 -0
- package/dist/cjs/components/FileUpload.cjs.map +1 -0
- package/dist/cjs/components/Media.cjs +27 -0
- package/dist/cjs/components/Media.cjs.map +1 -0
- package/dist/cjs/components/Pagination.cjs +115 -0
- package/dist/cjs/components/Pagination.cjs.map +1 -0
- package/dist/cjs/components/Select.cjs +1 -1
- package/dist/cjs/components/Select.cjs.map +1 -1
- package/dist/cjs/components/Stepper.cjs +40 -0
- package/dist/cjs/components/Stepper.cjs.map +1 -0
- package/dist/cjs/components/Tabs.cjs +1 -1
- package/dist/cjs/components/Tabs.cjs.map +1 -1
- package/dist/cjs/components/TreeView.cjs +247 -0
- package/dist/cjs/components/TreeView.cjs.map +1 -0
- package/dist/cjs/components/date-family.cjs +191 -0
- package/dist/cjs/components/date-family.cjs.map +1 -0
- package/dist/cjs/components/date-field.cjs +90 -0
- package/dist/cjs/components/date-field.cjs.map +1 -0
- package/dist/cjs/components/fileUpload.rules.cjs +121 -0
- package/dist/cjs/components/fileUpload.rules.cjs.map +1 -0
- package/dist/cjs/components/tree.cjs +95 -0
- package/dist/cjs/components/tree.cjs.map +1 -0
- package/dist/cjs/components/ui.common.cjs +27 -7
- package/dist/cjs/components/ui.common.cjs.map +1 -1
- package/dist/cjs/components/ui.motion.cjs +3 -3
- package/dist/cjs/components/ui.motion.cjs.map +1 -1
- package/dist/cjs/dev.cjs +5 -0
- package/dist/cjs/dev.cjs.map +1 -1
- package/dist/cjs/index.cjs +22 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/components/Breadcrumb.js +43 -0
- package/dist/esm/components/Breadcrumb.js.map +1 -0
- package/dist/esm/components/Calendar.js +294 -0
- package/dist/esm/components/Calendar.js.map +1 -0
- package/dist/esm/components/Combobox.js +2 -2
- package/dist/esm/components/Combobox.js.map +1 -1
- package/dist/esm/components/Command.js +77 -0
- package/dist/esm/components/Command.js.map +1 -0
- package/dist/esm/components/CommandPalette.js +48 -0
- package/dist/esm/components/CommandPalette.js.map +1 -0
- package/dist/esm/components/DatePicker.js +103 -0
- package/dist/esm/components/DatePicker.js.map +1 -0
- package/dist/esm/components/DateRangePicker.js +161 -0
- package/dist/esm/components/DateRangePicker.js.map +1 -0
- package/dist/esm/components/DialogSurface.js +6 -5
- package/dist/esm/components/DialogSurface.js.map +1 -1
- package/dist/esm/components/FileUpload.js +199 -0
- package/dist/esm/components/FileUpload.js.map +1 -0
- package/dist/esm/components/Media.js +25 -0
- package/dist/esm/components/Media.js.map +1 -0
- package/dist/esm/components/Pagination.js +111 -0
- package/dist/esm/components/Pagination.js.map +1 -0
- package/dist/esm/components/Select.js +2 -2
- package/dist/esm/components/Select.js.map +1 -1
- package/dist/esm/components/Stepper.js +36 -0
- package/dist/esm/components/Stepper.js.map +1 -0
- package/dist/esm/components/Tabs.js +2 -2
- package/dist/esm/components/Tabs.js.map +1 -1
- package/dist/esm/components/TreeView.js +243 -0
- package/dist/esm/components/TreeView.js.map +1 -0
- package/dist/esm/components/date-family.js +173 -0
- package/dist/esm/components/date-family.js.map +1 -0
- package/dist/esm/components/date-field.js +84 -0
- package/dist/esm/components/date-field.js.map +1 -0
- package/dist/esm/components/fileUpload.rules.js +114 -0
- package/dist/esm/components/fileUpload.rules.js.map +1 -0
- package/dist/esm/components/tree.js +88 -0
- package/dist/esm/components/tree.js.map +1 -0
- package/dist/esm/components/ui.common.js +23 -8
- package/dist/esm/components/ui.common.js.map +1 -1
- package/dist/esm/components/ui.motion.js +3 -3
- package/dist/esm/components/ui.motion.js.map +1 -1
- package/dist/esm/dev.js +1 -1
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/styles.css +365 -20
- package/dist/theme.css +15 -9
- package/dist/types/dev.d.cts +8 -3
- package/dist/types/dev.d.ts +8 -3
- package/dist/types/index.d.cts +600 -66
- package/dist/types/index.d.ts +600 -66
- package/package.json +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var button = require('@base-ui/react/button');
|
|
8
|
+
var field = require('@base-ui/react/field');
|
|
9
|
+
var lucideReact = require('lucide-react');
|
|
10
|
+
var React = require('react');
|
|
11
|
+
var utils = require('../libs/utils.cjs');
|
|
12
|
+
var Button = require('./Button.cjs');
|
|
13
|
+
var ui_common = require('./ui.common.cjs');
|
|
14
|
+
var ui_motion = require('./ui.motion.cjs');
|
|
15
|
+
var fileUpload_rules = require('./fileUpload.rules.cjs');
|
|
16
|
+
|
|
17
|
+
const FileUpload = React.forwardRef(({ label, description, error, files, defaultFiles, onFilesChange, multiple = false, accept, maxSize, maxFiles, disabled = false, onReject, selectLabel = "Select files", removeLabel, clearLabel = "Clear files", className, ...rootProps }, forwardedRef) => {
|
|
18
|
+
const baseId = React.useId();
|
|
19
|
+
const hintId = `${baseId}-hint`;
|
|
20
|
+
const inputRef = React.useRef(null);
|
|
21
|
+
const removalRefs = React.useRef(new Map());
|
|
22
|
+
const clearRef = React.useRef(null);
|
|
23
|
+
const dragDepth = React.useRef(0);
|
|
24
|
+
const [pendingAction, setPendingAction] = React.useState(null);
|
|
25
|
+
const [attempt, setAttempt] = React.useState(0);
|
|
26
|
+
const [dragging, setDragging] = React.useState(false);
|
|
27
|
+
const [announcement, setAnnouncement] = React.useState("");
|
|
28
|
+
const [rejections, setRejections] = React.useState([]);
|
|
29
|
+
const [uncontrolledFiles, setUncontrolledFiles] = React.useState(() => defaultFiles !== null && defaultFiles !== void 0 ? defaultFiles : []);
|
|
30
|
+
const controlled = files !== undefined;
|
|
31
|
+
const selected = controlled ? files : uncontrolledFiles;
|
|
32
|
+
const limits = {
|
|
33
|
+
accept,
|
|
34
|
+
maxSize: fileUpload_rules.resolveMaxSize(maxSize),
|
|
35
|
+
maxFiles: fileUpload_rules.resolveMaxFiles(maxFiles, multiple),
|
|
36
|
+
multiple,
|
|
37
|
+
};
|
|
38
|
+
// A request gets exactly its next committed render. Rejection expires it even if files
|
|
39
|
+
// stays referentially identical, so a later external update cannot consume stale effects.
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
var _a;
|
|
42
|
+
if (!pendingAction)
|
|
43
|
+
return;
|
|
44
|
+
setPendingAction(null);
|
|
45
|
+
const { before, next, focus } = pendingAction;
|
|
46
|
+
const accepted = selected.length === next.length &&
|
|
47
|
+
selected.every((file, index) => fileUpload_rules.fileKey(file) === fileUpload_rules.fileKey(next[index]));
|
|
48
|
+
if (!accepted)
|
|
49
|
+
return;
|
|
50
|
+
const beforeKeys = new Set(before.map(fileUpload_rules.fileKey));
|
|
51
|
+
const afterKeys = new Set(selected.map(fileUpload_rules.fileKey));
|
|
52
|
+
const added = selected.filter((file) => !beforeKeys.has(fileUpload_rules.fileKey(file))).length;
|
|
53
|
+
const removed = before.filter((file) => !afterKeys.has(fileUpload_rules.fileKey(file)));
|
|
54
|
+
const parts = [];
|
|
55
|
+
if (removed.length === 1)
|
|
56
|
+
parts.push(`Removed ${removed[0].name}.`);
|
|
57
|
+
else if (removed.length > 1)
|
|
58
|
+
parts.push(`Removed ${removed.length} files.`);
|
|
59
|
+
if (added > 0)
|
|
60
|
+
parts.push(`Added ${added} file${added === 1 ? "" : "s"}.`);
|
|
61
|
+
setAnnouncement(parts.join(" "));
|
|
62
|
+
if (!focus || removed.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
const document = focus.source.ownerDocument;
|
|
65
|
+
if (document.activeElement !== focus.source &&
|
|
66
|
+
(focus.source.isConnected || document.activeElement !== document.body))
|
|
67
|
+
return;
|
|
68
|
+
const row = focus.kind === "row" ? selected[Math.min(focus.index, selected.length - 1)] : null;
|
|
69
|
+
(_a = (row ? removalRefs.current.get(fileUpload_rules.fileKey(row)) : inputRef.current)) === null || _a === void 0 ? void 0 : _a.focus();
|
|
70
|
+
}, [selected, pendingAction]);
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
if (disabled) {
|
|
73
|
+
dragDepth.current = 0;
|
|
74
|
+
setDragging(false);
|
|
75
|
+
}
|
|
76
|
+
}, [disabled]);
|
|
77
|
+
const commit = (next, focus) => {
|
|
78
|
+
setPendingAction({ before: selected, next, focus });
|
|
79
|
+
if (!controlled)
|
|
80
|
+
setUncontrolledFiles(next);
|
|
81
|
+
onFilesChange === null || onFilesChange === void 0 ? void 0 : onFilesChange(next);
|
|
82
|
+
};
|
|
83
|
+
const beginAttempt = () => {
|
|
84
|
+
setAttempt((previous) => previous + 1);
|
|
85
|
+
setAnnouncement("");
|
|
86
|
+
};
|
|
87
|
+
const ingest = (incoming) => {
|
|
88
|
+
if (disabled || incoming.length === 0)
|
|
89
|
+
return;
|
|
90
|
+
beginAttempt();
|
|
91
|
+
const { files: next, rejections: refused, accepted } = fileUpload_rules.selectFiles({
|
|
92
|
+
incoming,
|
|
93
|
+
current: selected,
|
|
94
|
+
limits,
|
|
95
|
+
});
|
|
96
|
+
setRejections(refused);
|
|
97
|
+
if (refused.length > 0)
|
|
98
|
+
onReject === null || onReject === void 0 ? void 0 : onReject(refused);
|
|
99
|
+
if (accepted > 0) {
|
|
100
|
+
commit(next);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const handlePickerChange = (event) => {
|
|
104
|
+
var _a;
|
|
105
|
+
const input = event.currentTarget;
|
|
106
|
+
/* Read the batch before emptying the picker: clearing its value empties its file list too,
|
|
107
|
+
and the `File` objects stay valid afterwards. The picker is never the selection's source
|
|
108
|
+
of truth, so it is emptied after every read and the same file can be chosen again. */
|
|
109
|
+
const incoming = Array.from((_a = input.files) !== null && _a !== void 0 ? _a : []);
|
|
110
|
+
ingest(incoming);
|
|
111
|
+
input.value = "";
|
|
112
|
+
};
|
|
113
|
+
/* Only a drag that carries files is a drop this zone owns: a text or link drag keeps whatever
|
|
114
|
+
the page's own handlers say, and only this element stops the browser from navigating to a
|
|
115
|
+
dropped file. */
|
|
116
|
+
const carriesFiles = (event) => Array.from(event.dataTransfer.types).includes("Files");
|
|
117
|
+
const handleDragEnter = (event) => {
|
|
118
|
+
if (!carriesFiles(event))
|
|
119
|
+
return;
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
if (disabled)
|
|
122
|
+
return;
|
|
123
|
+
dragDepth.current += 1;
|
|
124
|
+
setDragging(true);
|
|
125
|
+
};
|
|
126
|
+
const handleDragOver = (event) => {
|
|
127
|
+
if (!carriesFiles(event))
|
|
128
|
+
return;
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
event.dataTransfer.dropEffect = disabled ? "none" : "copy";
|
|
131
|
+
};
|
|
132
|
+
const handleDragLeave = () => {
|
|
133
|
+
dragDepth.current = Math.max(0, dragDepth.current - 1);
|
|
134
|
+
if (dragDepth.current === 0)
|
|
135
|
+
setDragging(false);
|
|
136
|
+
};
|
|
137
|
+
const handleDrop = (event) => {
|
|
138
|
+
var _a;
|
|
139
|
+
if (!carriesFiles(event))
|
|
140
|
+
return;
|
|
141
|
+
event.preventDefault();
|
|
142
|
+
dragDepth.current = 0;
|
|
143
|
+
setDragging(false);
|
|
144
|
+
ingest(Array.from((_a = event.dataTransfer.files) !== null && _a !== void 0 ? _a : []));
|
|
145
|
+
};
|
|
146
|
+
const removeFile = (index) => {
|
|
147
|
+
const file = selected[index];
|
|
148
|
+
if (disabled || !file)
|
|
149
|
+
return;
|
|
150
|
+
const control = removalRefs.current.get(fileUpload_rules.fileKey(file));
|
|
151
|
+
const focus = control && control === control.ownerDocument.activeElement
|
|
152
|
+
? { kind: "row", index, source: control } : undefined;
|
|
153
|
+
beginAttempt();
|
|
154
|
+
setRejections([]);
|
|
155
|
+
commit(selected.filter((_, position) => position !== index), focus);
|
|
156
|
+
};
|
|
157
|
+
const clearFiles = () => {
|
|
158
|
+
if (disabled)
|
|
159
|
+
return;
|
|
160
|
+
const control = clearRef.current;
|
|
161
|
+
const focus = control && control === control.ownerDocument.activeElement
|
|
162
|
+
? { kind: "clear", source: control } : undefined;
|
|
163
|
+
beginAttempt();
|
|
164
|
+
setRejections([]);
|
|
165
|
+
commit([], focus);
|
|
166
|
+
};
|
|
167
|
+
const acceptedTypes = accept === null || accept === void 0 ? void 0 : accept.split(",").map((type) => {
|
|
168
|
+
const value = type.trim();
|
|
169
|
+
if (value.startsWith("."))
|
|
170
|
+
return value.slice(1).toUpperCase();
|
|
171
|
+
if (value === "image/*")
|
|
172
|
+
return "Images";
|
|
173
|
+
if (value === "application/pdf")
|
|
174
|
+
return "PDF";
|
|
175
|
+
return value;
|
|
176
|
+
}).filter(Boolean).join(", ");
|
|
177
|
+
const hint = [
|
|
178
|
+
acceptedTypes || null,
|
|
179
|
+
limits.maxSize !== undefined ? `Up to ${fileUpload_rules.formatBytes(limits.maxSize)} per file` : null,
|
|
180
|
+
multiple
|
|
181
|
+
? limits.maxFiles !== undefined
|
|
182
|
+
? `Up to ${limits.maxFiles} file${limits.maxFiles === 1 ? "" : "s"}`
|
|
183
|
+
: null
|
|
184
|
+
: "One file",
|
|
185
|
+
]
|
|
186
|
+
.filter((part) => part !== null)
|
|
187
|
+
.join(" · ");
|
|
188
|
+
return (jsxRuntime.jsxs(field.Field.Root, { ...rootProps, disabled: disabled, invalid: Boolean(error), className: utils.cn(ui_common.fieldLayout, className), children: [jsxRuntime.jsx(field.Field.Label, { className: utils.cn("mb-2 text-sm font-medium", ui_common.text.high), children: label }), jsxRuntime.jsxs("label", { className: utils.cn("relative z-10 flex min-w-0 flex-col items-center gap-2 px-4 py-4 text-center", ui_common.shape.control, ui_common.material.matteHigh, ui_motion.motionFeedback, ui_common.focusRingWithin, ui_common.focusRingDrag, !disabled && ui_common.state.enabled, !disabled && ui_common.stateLayer.quiet, !disabled && dragging && ui_common.tone.tonal.primary, disabled && ui_common.state.disabled), "data-dragging": dragging || undefined, onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-8 shrink-0 items-center justify-center [&>svg]:size-7", ui_common.text.medium), "aria-hidden": "true", children: jsxRuntime.jsx(lucideReact.Upload, {}) }), jsxRuntime.jsxs("span", { className: utils.cn("flex min-w-0 flex-col items-center gap-1"), children: [jsxRuntime.jsx("span", { className: utils.cn("text-base font-semibold", ui_common.text.high), children: dragging ? (multiple ? "Drop files here" : "Drop the file here") : selectLabel }), jsxRuntime.jsx("span", { className: utils.cn("text-sm leading-5", ui_common.text.medium), children: multiple ? "or drag and drop files" : "or drag and drop a file" })] }), jsxRuntime.jsx(field.Field.Control, { ref: forwardedRef, render: jsxRuntime.jsx("input", { ref: inputRef }), type: "file", multiple: multiple || undefined, accept: accept, "aria-describedby": hint ? hintId : undefined, onChange: handlePickerChange, className: utils.cn("sr-only") })] }), selected.length > 0 && (jsxRuntime.jsxs("div", { className: utils.cn("mx-4 min-w-0 overflow-hidden", ui_common.shape.control, "rounded-t-none", ui_common.matteInset, ui_common.recessedTop), children: [jsxRuntime.jsx("ul", { role: "list", className: utils.cn("m-0 min-w-0 list-none px-3 pt-3"), children: selected.map((file, index) => {
|
|
189
|
+
const key = fileUpload_rules.fileKey(file);
|
|
190
|
+
const extension = file.name.includes(".") ? file.name.slice(file.name.lastIndexOf(".") + 1) : "";
|
|
191
|
+
const fileType = (extension || file.type.split("/").pop() || "File").toUpperCase();
|
|
192
|
+
return (jsxRuntime.jsxs("li", { className: utils.cn("flex min-w-0 items-start gap-3 py-2 ps-3", ui_common.edge.row, ui_common.text.high), children: [jsxRuntime.jsx("span", { "aria-hidden": "true", className: utils.cn("inline-flex h-11 w-5 shrink-0 items-center [&>svg]:size-5", ui_common.text.medium), children: file.type.startsWith("image/") ? jsxRuntime.jsx(lucideReact.Image, {}) : jsxRuntime.jsx(lucideReact.File, {}) }), jsxRuntime.jsxs("span", { className: utils.cn("flex min-w-0 flex-1 flex-col text-sm leading-6 [overflow-wrap:anywhere]"), children: [jsxRuntime.jsx("span", { children: file.name }), jsxRuntime.jsxs("span", { className: utils.cn("text-xs leading-5", ui_common.text.medium), children: [fileUpload_rules.formatBytes(file.size), " \u00B7 ", fileType] })] }), jsxRuntime.jsx(button.Button, { ref: (node) => {
|
|
193
|
+
if (node)
|
|
194
|
+
removalRefs.current.set(key, node);
|
|
195
|
+
else
|
|
196
|
+
removalRefs.current.delete(key);
|
|
197
|
+
}, type: "button", "aria-label": removeLabel ? removeLabel(file) : `Remove ${file.name}`, disabled: disabled, onClick: () => removeFile(index), className: utils.cn("group inline-flex shrink-0 items-center justify-center", ui_common.density.target, ui_common.shape.circle, ui_common.text.medium, !disabled && "hover:text-sherick-ink", ui_motion.motionFeedback, ui_common.focusRingInset, ui_common.stateLayer.quiet, disabled ? ui_common.state.disabled : ui_common.state.enabled), children: jsxRuntime.jsx("span", { className: utils.cn("inline-flex items-center justify-center", ui_motion.motionInkPress), children: jsxRuntime.jsx(lucideReact.X, { className: utils.cn("size-5"), "aria-hidden": "true" }) }) })] }, key));
|
|
198
|
+
}) }), jsxRuntime.jsx("div", { className: utils.cn("flex justify-end px-3 pb-2 pt-1"), children: jsxRuntime.jsx(Button.default, { ref: clearRef, type: "button", appearance: "text", variant: "danger", icon: jsxRuntime.jsx(lucideReact.Trash2, {}), size: "sm", disabled: disabled, onClick: clearFiles, children: clearLabel }) })] })), hint && (jsxRuntime.jsx("span", { id: hintId, className: utils.cn("mt-2 text-xs leading-5", ui_common.text.medium), children: hint })), description && (jsxRuntime.jsx(field.Field.Description, { className: utils.cn("mt-2 text-xs leading-5", ui_common.text.medium), children: description })), error ? (jsxRuntime.jsx(field.Field.Error, { match: true, className: utils.cn("mt-2 text-xs leading-5 text-sherick-danger"), children: error })) : null, jsxRuntime.jsxs("div", { role: "status", className: utils.cn(rejections.length > 0 && "mt-2 flex flex-col gap-1 text-xs leading-5"), children: [announcement !== "" && jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: announcement }), rejections.length > 0 && (jsxRuntime.jsx("span", { className: utils.cn("text-sherick-danger"), children: rejections.map((rejection) => rejection.message).join(" ") }, attempt))] })] }));
|
|
199
|
+
});
|
|
200
|
+
FileUpload.displayName = "FileUpload";
|
|
201
|
+
|
|
202
|
+
exports.default = FileUpload;
|
|
203
|
+
//# sourceMappingURL=FileUpload.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.cjs","sources":["../../../src/components/FileUpload.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button as BaseButton } from \"@base-ui/react/button\";\nimport { Field } from \"@base-ui/react/field\";\nimport { File as FileIcon, Image as ImageIcon, Trash2, Upload, X } from \"lucide-react\";\nimport React, {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type DragEvent,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport Button from \"./Button\";\nimport {\n density,\n edge,\n fieldLayout,\n focusRingInset,\n focusRingDrag,\n focusRingWithin,\n material,\n matteInset,\n shape,\n recessedTop,\n state,\n stateLayer,\n text,\n tone,\n} from \"./ui.common\";\nimport { motionFeedback, motionInkPress } from \"./ui.motion\";\nimport {\n fileKey,\n formatBytes,\n resolveMaxFiles,\n resolveMaxSize,\n selectFiles,\n type FileRejection,\n} from \"./fileUpload.rules\";\n\nexport type { FileRejection } from \"./fileUpload.rules\";\n\n/**\n * A labelled field that selects files from the native picker or by dropping them on its zone.\n *\n * `files` / `defaultFiles` own the *presented* selection. They are deliberately not the picker's\n * own value: the native input stays uncontrolled and is emptied after every read, so choosing the\n * same file twice still reports twice, and nothing this component does assigns files to it or\n * mirrors them into hidden inputs. There is therefore no `name`/`required` submission contract —\n * a consumer builds `FormData` from `onFilesChange`, which is the one place the selection is\n * reported.\n *\n * The chooser and the drop zone are the same door twice, so they answer to one policy\n * (`fileUpload.rules.ts`): a file refused by the picker's `accept` value cannot enter through a\n * drop, and a mixed batch keeps whatever was valid.\n */\nexport interface FileUploadProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onChange\" | \"defaultValue\"> {\n /** The field's label. It names the picker. */\n label: string;\n /** Supporting copy beneath the field. */\n description?: ReactNode;\n /**\n * The message shown while the field is invalid. Its presence is what makes the field invalid,\n * exactly as `error` does on the other fields in the library.\n */\n error?: ReactNode;\n /** The controlled selection. Undefined leaves the selection to the component. */\n files?: File[];\n /** The selection the field starts with when it is not controlled. */\n defaultFiles?: File[];\n /**\n * Reports the selection after every accepted change. The callback receives the next selection as\n * a whole, which is what a consumer builds `FormData` from.\n */\n onFilesChange?: (files: File[]) => void;\n /** Whether the field holds several files or replaces its selection with one. */\n multiple?: boolean;\n /** The native `accept` value: comma-separated MIME types and extensions. A UX restriction only. */\n accept?: string;\n /** Per-file byte limit. A larger file is refused and reported. */\n maxSize?: number;\n /** Total file limit. Only meaningful with `multiple`. */\n maxFiles?: number;\n /** Ignore user interaction. Removes the picker, the drop, the removals and the clear control. */\n disabled?: boolean;\n /** Reports the files a batch refused, with the reason for each. */\n onReject?: (items: FileRejection[]) => void;\n /** The copy on the zone's own affordance. */\n selectLabel?: string;\n /** The accessible name of one removal control. Defaults to `Remove <file name>`. */\n removeLabel?: (file: File) => string;\n /** The accessible name of the control that empties the selection. */\n clearLabel?: string;\n}\n\ntype FocusRequest =\n | { kind: \"row\"; index: number; source: HTMLButtonElement }\n | { kind: \"clear\"; source: HTMLButtonElement };\ntype FileAction = { before: File[]; next: File[]; focus?: FocusRequest };\n\nconst FileUpload = forwardRef<HTMLInputElement, FileUploadProps>(\n (\n {\n label,\n description,\n error,\n files,\n defaultFiles,\n onFilesChange,\n multiple = false,\n accept,\n maxSize,\n maxFiles,\n disabled = false,\n onReject,\n selectLabel = \"Select files\",\n removeLabel,\n clearLabel = \"Clear files\",\n className,\n ...rootProps\n },\n forwardedRef\n ) => {\n const baseId = useId();\n const hintId = `${baseId}-hint`;\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const removalRefs = useRef(new Map<string, HTMLButtonElement>());\n const clearRef = useRef<HTMLButtonElement | null>(null);\n const dragDepth = useRef(0);\n const [pendingAction, setPendingAction] = useState<FileAction | null>(null);\n const [attempt, setAttempt] = useState(0);\n\n const [dragging, setDragging] = useState(false);\n const [announcement, setAnnouncement] = useState(\"\");\n const [rejections, setRejections] = useState<FileRejection[]>([]);\n const [uncontrolledFiles, setUncontrolledFiles] = useState<File[]>(() => defaultFiles ?? []);\n\n const controlled = files !== undefined;\n const selected = controlled ? files : uncontrolledFiles;\n const limits = {\n accept,\n maxSize: resolveMaxSize(maxSize),\n maxFiles: resolveMaxFiles(maxFiles, multiple),\n multiple,\n };\n\n // A request gets exactly its next committed render. Rejection expires it even if files\n // stays referentially identical, so a later external update cannot consume stale effects.\n useEffect(() => {\n if (!pendingAction) return;\n setPendingAction(null);\n const { before, next, focus } = pendingAction;\n const accepted = selected.length === next.length &&\n selected.every((file, index) => fileKey(file) === fileKey(next[index]));\n if (!accepted) return;\n\n const beforeKeys = new Set(before.map(fileKey));\n const afterKeys = new Set(selected.map(fileKey));\n const added = selected.filter((file) => !beforeKeys.has(fileKey(file))).length;\n const removed = before.filter((file) => !afterKeys.has(fileKey(file)));\n const parts: string[] = [];\n if (removed.length === 1) parts.push(`Removed ${removed[0].name}.`);\n else if (removed.length > 1) parts.push(`Removed ${removed.length} files.`);\n if (added > 0) parts.push(`Added ${added} file${added === 1 ? \"\" : \"s\"}.`);\n setAnnouncement(parts.join(\" \"));\n\n if (!focus || removed.length === 0) return;\n const document = focus.source.ownerDocument;\n if (document.activeElement !== focus.source &&\n (focus.source.isConnected || document.activeElement !== document.body)) return;\n const row = focus.kind === \"row\" ? selected[Math.min(focus.index, selected.length - 1)] : null;\n (row ? removalRefs.current.get(fileKey(row)) : inputRef.current)?.focus();\n }, [selected, pendingAction]);\n\n useEffect(() => {\n if (disabled) {\n dragDepth.current = 0;\n setDragging(false);\n }\n }, [disabled]);\n\n const commit = (next: File[], focus?: FocusRequest) => {\n setPendingAction({ before: selected, next, focus });\n if (!controlled) setUncontrolledFiles(next);\n onFilesChange?.(next);\n };\n\n const beginAttempt = () => {\n setAttempt((previous) => previous + 1);\n setAnnouncement(\"\");\n };\n\n const ingest = (incoming: File[]) => {\n if (disabled || incoming.length === 0) return;\n beginAttempt();\n\n const { files: next, rejections: refused, accepted } = selectFiles({\n incoming,\n current: selected,\n limits,\n });\n\n setRejections(refused);\n if (refused.length > 0) onReject?.(refused);\n if (accepted > 0) {\n commit(next);\n }\n };\n\n const handlePickerChange = (event: ChangeEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n /* Read the batch before emptying the picker: clearing its value empties its file list too,\n and the `File` objects stay valid afterwards. The picker is never the selection's source\n of truth, so it is emptied after every read and the same file can be chosen again. */\n const incoming = Array.from(input.files ?? []);\n ingest(incoming);\n input.value = \"\";\n };\n\n /* Only a drag that carries files is a drop this zone owns: a text or link drag keeps whatever\n the page's own handlers say, and only this element stops the browser from navigating to a\n dropped file. */\n const carriesFiles = (event: DragEvent<HTMLLabelElement>) =>\n Array.from(event.dataTransfer.types).includes(\"Files\");\n\n const handleDragEnter = (event: DragEvent<HTMLLabelElement>) => {\n if (!carriesFiles(event)) return;\n event.preventDefault();\n if (disabled) return;\n dragDepth.current += 1;\n setDragging(true);\n };\n\n const handleDragOver = (event: DragEvent<HTMLLabelElement>) => {\n if (!carriesFiles(event)) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = disabled ? \"none\" : \"copy\";\n };\n\n const handleDragLeave = () => {\n dragDepth.current = Math.max(0, dragDepth.current - 1);\n if (dragDepth.current === 0) setDragging(false);\n };\n\n const handleDrop = (event: DragEvent<HTMLLabelElement>) => {\n if (!carriesFiles(event)) return;\n event.preventDefault();\n dragDepth.current = 0;\n setDragging(false);\n ingest(Array.from(event.dataTransfer.files ?? []));\n };\n\n const removeFile = (index: number) => {\n const file = selected[index];\n if (disabled || !file) return;\n const control = removalRefs.current.get(fileKey(file));\n const focus: FocusRequest | undefined = control && control === control.ownerDocument.activeElement\n ? { kind: \"row\", index, source: control } : undefined;\n beginAttempt();\n setRejections([]);\n commit(selected.filter((_, position) => position !== index), focus);\n };\n\n const clearFiles = () => {\n if (disabled) return;\n const control = clearRef.current;\n const focus: FocusRequest | undefined = control && control === control.ownerDocument.activeElement\n ? { kind: \"clear\", source: control } : undefined;\n beginAttempt();\n setRejections([]);\n commit([], focus);\n };\n\n const acceptedTypes = accept?.split(\",\").map((type) => {\n const value = type.trim();\n if (value.startsWith(\".\")) return value.slice(1).toUpperCase();\n if (value === \"image/*\") return \"Images\";\n if (value === \"application/pdf\") return \"PDF\";\n return value;\n }).filter(Boolean).join(\", \");\n const hint = [\n acceptedTypes || null,\n limits.maxSize !== undefined ? `Up to ${formatBytes(limits.maxSize)} per file` : null,\n multiple\n ? limits.maxFiles !== undefined\n ? `Up to ${limits.maxFiles} file${limits.maxFiles === 1 ? \"\" : \"s\"}`\n : null\n : \"One file\",\n ]\n .filter((part): part is string => part !== null)\n .join(\" · \");\n\n return (\n <Field.Root\n {...rootProps}\n disabled={disabled}\n invalid={Boolean(error)}\n className={cn(fieldLayout, className)}\n >\n <Field.Label className={cn(\"mb-2 text-sm font-medium\", text.high)}>{label}</Field.Label>\n\n {/* One compact chooser/drop surface. The native label retains picker and keyboard behavior;\n the matte fill and quiet state layer make the affordance readable without a large well. */}\n <label\n className={cn(\n \"relative z-10 flex min-w-0 flex-col items-center gap-2 px-4 py-4 text-center\",\n shape.control,\n material.matteHigh,\n motionFeedback,\n focusRingWithin,\n focusRingDrag,\n !disabled && state.enabled,\n !disabled && stateLayer.quiet,\n !disabled && dragging && tone.tonal.primary,\n disabled && state.disabled\n )}\n data-dragging={dragging || undefined}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <span\n className={cn(\"inline-flex size-8 shrink-0 items-center justify-center [&>svg]:size-7\", text.medium)}\n aria-hidden=\"true\"\n >\n <Upload />\n </span>\n <span className={cn(\"flex min-w-0 flex-col items-center gap-1\")}>\n <span className={cn(\"text-base font-semibold\", text.high)}>\n {dragging ? (multiple ? \"Drop files here\" : \"Drop the file here\") : selectLabel}\n </span>\n <span className={cn(\"text-sm leading-5\", text.medium)}>\n {multiple ? \"or drag and drop files\" : \"or drag and drop a file\"}\n </span>\n </span>\n\n {/* Uncontrolled by design, and never assigned a value: the selection is the component's\n own state, and the picker is only a way to ask the platform for files. */}\n <Field.Control\n ref={forwardedRef}\n render={<input ref={inputRef} />}\n type=\"file\"\n multiple={multiple || undefined}\n accept={accept}\n aria-describedby={hint ? hintId : undefined}\n onChange={handlePickerChange}\n className={cn(\"sr-only\")}\n />\n </label>\n\n {selected.length > 0 && (\n <div className={cn(\"mx-4 min-w-0 overflow-hidden\", shape.control, \"rounded-t-none\", matteInset, recessedTop)}>\n <ul role=\"list\" className={cn(\"m-0 min-w-0 list-none px-3 pt-3\")}>\n {selected.map((file, index) => {\n const key = fileKey(file);\n const extension = file.name.includes(\".\") ? file.name.slice(file.name.lastIndexOf(\".\") + 1) : \"\";\n const fileType = (extension || file.type.split(\"/\").pop() || \"File\").toUpperCase();\n return (\n <li\n key={key}\n className={cn(\"flex min-w-0 items-start gap-3 py-2 ps-3\", edge.row, text.high)}\n >\n <span aria-hidden=\"true\" className={cn(\"inline-flex h-11 w-5 shrink-0 items-center [&>svg]:size-5\", text.medium)}>\n {file.type.startsWith(\"image/\") ? <ImageIcon /> : <FileIcon />}\n </span>\n <span className={cn(\"flex min-w-0 flex-1 flex-col text-sm leading-6 [overflow-wrap:anywhere]\")}>\n <span>{file.name}</span>\n <span className={cn(\"text-xs leading-5\", text.medium)}>{formatBytes(file.size)} · {fileType}</span>\n </span>\n <BaseButton\n ref={(node: HTMLButtonElement | null) => {\n if (node) removalRefs.current.set(key, node);\n else removalRefs.current.delete(key);\n }}\n type=\"button\"\n aria-label={removeLabel ? removeLabel(file) : `Remove ${file.name}`}\n disabled={disabled}\n onClick={() => removeFile(index)}\n className={cn(\n \"group inline-flex shrink-0 items-center justify-center\",\n density.target,\n shape.circle,\n text.medium,\n !disabled && \"hover:text-sherick-ink\",\n motionFeedback,\n focusRingInset,\n stateLayer.quiet,\n disabled ? state.disabled : state.enabled\n )}\n >\n <span className={cn(\"inline-flex items-center justify-center\", motionInkPress)}>\n <X className={cn(\"size-5\")} aria-hidden=\"true\" />\n </span>\n </BaseButton>\n </li>\n );\n })}\n </ul>\n <div className={cn(\"flex justify-end px-3 pb-2 pt-1\")}>\n <Button\n ref={clearRef}\n type=\"button\"\n appearance=\"text\"\n variant=\"danger\"\n icon={<Trash2 />}\n size=\"sm\"\n disabled={disabled}\n onClick={clearFiles}\n >\n {clearLabel}\n </Button>\n </div>\n </div>\n )}\n\n {hint && (\n <span id={hintId} className={cn(\"mt-2 text-xs leading-5\", text.medium)}>\n {hint}\n </span>\n )}\n\n {description && (\n <Field.Description className={cn(\"mt-2 text-xs leading-5\", text.medium)}>\n {description}\n </Field.Description>\n )}\n\n {error ? (\n <Field.Error match className={cn(\"mt-2 text-xs leading-5 text-sherick-danger\")}>\n {error}\n </Field.Error>\n ) : null}\n\n {/* Selection changes are live feedback for screen readers, not a visible activity log.\n Rejections remain visible and are announced in the same mounted region. */}\n <div role=\"status\" className={cn(rejections.length > 0 && \"mt-2 flex flex-col gap-1 text-xs leading-5\")}>\n {announcement !== \"\" && <span className={cn(\"sr-only\")}>{announcement}</span>}\n {rejections.length > 0 && (\n <span key={attempt} className={cn(\"text-sherick-danger\")}>\n {rejections.map((rejection) => rejection.message).join(\" \")}\n </span>\n )}\n </div>\n </Field.Root>\n );\n }\n);\n\nFileUpload.displayName = \"FileUpload\";\n\nexport default FileUpload;\n"],"names":["forwardRef","useId","useRef","useState","resolveMaxSize","resolveMaxFiles","useEffect","fileKey","selectFiles","formatBytes","_jsxs","Field","cn","fieldLayout","_jsx","text","shape","material","motionFeedback","focusRingWithin","focusRingDrag","state","stateLayer","tone","Upload","matteInset","recessedTop","edge","ImageIcon","FileIcon","BaseButton","density","focusRingInset","motionInkPress","X","Button","Trash2"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var utils = require('../libs/utils.cjs');
|
|
6
|
+
var ui_common = require('./ui.common.cjs');
|
|
7
|
+
|
|
8
|
+
const aspects = {
|
|
9
|
+
auto: "",
|
|
10
|
+
square: "aspect-square",
|
|
11
|
+
portrait: "aspect-[3/4]",
|
|
12
|
+
landscape: "aspect-[4/3]",
|
|
13
|
+
video: "aspect-video",
|
|
14
|
+
wide: "aspect-[21/9]",
|
|
15
|
+
};
|
|
16
|
+
const fits = { cover: "object-cover", contain: "object-contain" };
|
|
17
|
+
const positions = { center: "object-center", top: "object-top", bottom: "object-bottom" };
|
|
18
|
+
const Image = React.forwardRef(function MediaImage({ aspect = "auto", fit = "cover", position = "center", radius = "default", className, decorative, alt, loading = "lazy", ...props }, ref) {
|
|
19
|
+
return (jsxRuntime.jsx("span", { className: utils.cn("relative inline-block max-w-full overflow-hidden align-top", aspect !== "auto" && "block w-full", aspects[aspect], radius === "default" && ui_common.shape.surface, ui_common.material.matteHigh, className), children: jsxRuntime.jsx("img", { ...props, ref: ref, alt: decorative ? "" : alt, loading: loading, className: utils.cn("block max-w-full", aspect === "auto" ? "h-auto" : "absolute inset-0 h-full w-full", fits[fit], positions[position]) }) }));
|
|
20
|
+
});
|
|
21
|
+
const Video = React.forwardRef(function MediaVideo({ aspect = "auto", fit = "contain", position = "center", radius = "default", className, decorative, controls, tabIndex, "aria-hidden": ariaHidden, playsInline = true, preload = "metadata", ...props }, ref) {
|
|
22
|
+
return (jsxRuntime.jsx("div", { className: utils.cn("relative w-full overflow-hidden", aspects[aspect], radius === "default" && ui_common.shape.surface, ui_common.mediaCanvas, !decorative && ui_common.focusRingWithin, className), children: jsxRuntime.jsx("video", { ...props, ref: ref, controls: decorative ? false : controls, "aria-hidden": decorative ? true : ariaHidden, tabIndex: decorative ? -1 : tabIndex, playsInline: playsInline, preload: preload, className: utils.cn("block w-full", aspect === "auto" ? "h-auto" : "absolute inset-0 h-full", fits[fit], positions[position]) }) }));
|
|
23
|
+
});
|
|
24
|
+
const Media = { Image, Video };
|
|
25
|
+
|
|
26
|
+
exports.Media = Media;
|
|
27
|
+
//# sourceMappingURL=Media.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Media.cjs","sources":["../../../src/components/Media.tsx"],"sourcesContent":["import React, { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { cn } from \"@/libs/utils\";\nimport { focusRingWithin, material, mediaCanvas, shape } from \"./ui.common\";\n\ntype Presentation = {\n aspect?: \"auto\" | \"square\" | \"portrait\" | \"landscape\" | \"video\" | \"wide\";\n fit?: \"cover\" | \"contain\";\n position?: \"center\" | \"top\" | \"bottom\";\n radius?: \"default\" | \"none\";\n /** Applied to the frame, not the native media element. */\n className?: string;\n};\n\nexport type MediaImageProps = Presentation &\n Omit<ComponentPropsWithRef<\"img\">, keyof Presentation | \"alt\"> &\n ({ alt: string; decorative?: false } | { decorative: true; alt?: never });\n\nexport type MediaVideoProps = Presentation &\n Omit<ComponentPropsWithRef<\"video\">, keyof Presentation | \"controls\" | \"tabIndex\" | \"aria-hidden\"> &\n ({ decorative?: false; controls?: boolean; tabIndex?: number; \"aria-hidden\"?: boolean | \"true\" | \"false\" }\n | { decorative: true; controls?: never; tabIndex?: never; \"aria-hidden\"?: never });\n\nconst aspects = {\n auto: \"\",\n square: \"aspect-square\",\n portrait: \"aspect-[3/4]\",\n landscape: \"aspect-[4/3]\",\n video: \"aspect-video\",\n wide: \"aspect-[21/9]\",\n} as const;\n\nconst fits = { cover: \"object-cover\", contain: \"object-contain\" } as const;\nconst positions = { center: \"object-center\", top: \"object-top\", bottom: \"object-bottom\" } as const;\n\nconst Image = forwardRef<HTMLImageElement, MediaImageProps>(function MediaImage({\n aspect = \"auto\", fit = \"cover\", position = \"center\", radius = \"default\",\n className, decorative, alt, loading = \"lazy\", ...props\n}, ref) {\n return (\n <span className={cn(\n \"relative inline-block max-w-full overflow-hidden align-top\",\n aspect !== \"auto\" && \"block w-full\",\n aspects[aspect], radius === \"default\" && shape.surface, material.matteHigh, className\n )}>\n <img {...props} ref={ref} alt={decorative ? \"\" : alt} loading={loading} className={cn(\n \"block max-w-full\", aspect === \"auto\" ? \"h-auto\" : \"absolute inset-0 h-full w-full\",\n fits[fit], positions[position]\n )} />\n </span>\n );\n});\n\nconst Video = forwardRef<HTMLVideoElement, MediaVideoProps>(function MediaVideo({\n aspect = \"auto\", fit = \"contain\", position = \"center\", radius = \"default\",\n className, decorative, controls, tabIndex, \"aria-hidden\": ariaHidden,\n playsInline = true, preload = \"metadata\", ...props\n}, ref) {\n return (\n <div className={cn(\n \"relative w-full overflow-hidden\",\n aspects[aspect], radius === \"default\" && shape.surface,\n mediaCanvas, !decorative && focusRingWithin, className\n )}>\n <video {...props} ref={ref} controls={decorative ? false : controls}\n aria-hidden={decorative ? true : ariaHidden}\n tabIndex={decorative ? -1 : tabIndex} playsInline={playsInline} preload={preload}\n className={cn(\"block w-full\", aspect === \"auto\" ? \"h-auto\" : \"absolute inset-0 h-full\",\n fits[fit], positions[position])} />\n </div>\n );\n});\n\nexport const Media = { Image, Video };\n"],"names":["forwardRef","_jsx","cn","shape","material","mediaCanvas","focusRingWithin"],"mappings":";;;;;;;AAsBA,MAAM,OAAO,GAAG;AACd,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,MAAM,EAAE,eAAe;AACvB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,SAAS,EAAE,cAAc;AACzB,IAAA,KAAK,EAAE,cAAc;AACrB,IAAA,IAAI,EAAE,eAAe;CACb;AAEV,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAW;AAC1E,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAW;AAElG,MAAM,KAAK,GAAGA,gBAAU,CAAoC,SAAS,UAAU,CAAC,EAC9E,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,EACvE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,KAAK,EACvD,EAAE,GAAG,EAAA;AACJ,IAAA,QACEC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAEC,QAAE,CACjB,4DAA4D,EAC5D,MAAM,KAAK,MAAM,IAAI,cAAc,EACnC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,SAAS,IAAIC,eAAK,CAAC,OAAO,EAAEC,kBAAQ,CAAC,SAAS,EAAE,SAAS,CACtF,EAAA,QAAA,EACCH,cAAA,CAAA,KAAA,EAAA,EAAA,GAAS,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAEC,QAAE,CACnF,kBAAkB,EAAE,MAAM,KAAK,MAAM,GAAG,QAAQ,GAAG,gCAAgC,EACnF,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAC/B,EAAA,CAAI,EAAA,CACA;AAEX,CAAC,CAAC;AAEF,MAAM,KAAK,GAAGF,gBAAU,CAAoC,SAAS,UAAU,CAAC,EAC9E,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,EACzE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EACpE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,GAAG,KAAK,EACnD,EAAE,GAAG,EAAA;IACJ,QACEC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,QAAE,CAChB,iCAAiC,EACjC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,SAAS,IAAIC,eAAK,CAAC,OAAO,EACtDE,qBAAW,EAAE,CAAC,UAAU,IAAIC,yBAAe,EAAE,SAAS,CACvD,EAAA,QAAA,EACCL,cAAA,CAAA,OAAA,EAAA,EAAA,GAAW,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,GAAG,KAAK,GAAG,QAAQ,EAAA,aAAA,EACpD,UAAU,GAAG,IAAI,GAAG,UAAU,EAC3C,QAAQ,EAAE,UAAU,GAAG,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAChF,SAAS,EAAEC,QAAE,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,QAAQ,GAAG,yBAAyB,EACpF,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAA,CAAI,EAAA,CACnC;AAEV,CAAC,CAAC;MAEW,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK;;"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var lucideReact = require('lucide-react');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
var utils = require('../libs/utils.cjs');
|
|
10
|
+
var ui_common = require('./ui.common.cjs');
|
|
11
|
+
var ui_motion = require('./ui.motion.cjs');
|
|
12
|
+
|
|
13
|
+
/* A total floors, and anything a caller cannot have meant falls back to what the prop documents: an
|
|
14
|
+
empty pagination for a count, one sibling for a sibling count, and the first page for a page. A
|
|
15
|
+
sibling count is a distance, so `0` is meaningful; a page total is not, and `0` is the empty case
|
|
16
|
+
rather than an invalid one. */
|
|
17
|
+
const normalizeCount = (count) => Number.isSafeInteger(Math.floor(count)) && count > 0 ? Math.floor(count) : 0;
|
|
18
|
+
const normalizeSiblings = (value) => Number.isFinite(value) && value >= 0 ? Math.min(5, Math.floor(value)) : 1;
|
|
19
|
+
const normalizePage = (value) => (Number.isFinite(value) && value > 0 ? Math.floor(value) : 1);
|
|
20
|
+
/* The bounded set. Both ends are always shown, the current page keeps `siblingCount` neighbours on
|
|
21
|
+
each side, and a page that is missing by a single step is shown rather than replaced by a gap,
|
|
22
|
+
because naming it is both clearer and no longer. Everything the set cannot hold becomes one
|
|
23
|
+
ellipsis per gap, so ten thousand pages render the same number of controls as ten: both ends, both
|
|
24
|
+
wings, the current page and at most two gaps. */
|
|
25
|
+
const boundedItems = (count, current, siblings) => {
|
|
26
|
+
if (count === 0)
|
|
27
|
+
return [];
|
|
28
|
+
const spaced = siblings * 2 + 5;
|
|
29
|
+
if (count <= spaced)
|
|
30
|
+
return Array.from({ length: count }, (_, index) => index + 1);
|
|
31
|
+
const first = Math.max(2, current - siblings);
|
|
32
|
+
const last = Math.min(count - 1, current + siblings);
|
|
33
|
+
const items = [1];
|
|
34
|
+
if (first === 3)
|
|
35
|
+
items.push(2);
|
|
36
|
+
else if (first > 3)
|
|
37
|
+
items.push("ellipsis-start");
|
|
38
|
+
for (let page = first; page <= last; page += 1)
|
|
39
|
+
items.push(page);
|
|
40
|
+
if (last === count - 2)
|
|
41
|
+
items.push(count - 1);
|
|
42
|
+
else if (last < count - 2)
|
|
43
|
+
items.push("ellipsis-end");
|
|
44
|
+
items.push(count);
|
|
45
|
+
return items;
|
|
46
|
+
};
|
|
47
|
+
/* Numbered segments share the recessed-track / raised-selection anatomy of ToggleGroup.
|
|
48
|
+
Native navigation still owns behavior; stable targets press only their number or arrow. */
|
|
49
|
+
const controlBase = /* @__PURE__ */ utils.cx("inline-flex shrink-0 select-none items-center justify-center text-sm tabular-nums no-underline", ui_common.density.target, ui_common.shape.row, ui_common.focusRingInset, ui_motion.motionFeedback, ui_common.stateLayer.quiet, ui_common.text.medium);
|
|
50
|
+
/* A sequence of destinations, so it is a native `nav` around a native ordered list: the reader can
|
|
51
|
+
count where they are in it, and assistive technology reads it as one numbered set rather than as a
|
|
52
|
+
row of loose buttons.
|
|
53
|
+
|
|
54
|
+
A page is either a button or a real anchor. With `getPageHref` the anchor navigates the way every
|
|
55
|
+
anchor on the web does — the component reports the activation and then leaves the browser, and any
|
|
56
|
+
router the consumer owns, to do the navigating — and a modified click stays the browser's own
|
|
57
|
+
gesture: it opens a new tab or window, and the page the reader is on has not changed, so nothing is
|
|
58
|
+
reported. A boundary control and a disabled pagination are never anchors: they have no actionable
|
|
59
|
+
href, and every control in a disabled pagination is a natively disabled button, so the state sits
|
|
60
|
+
on the controls rather than being announced on the landmark around them.
|
|
61
|
+
|
|
62
|
+
Which page is current is published rather than implied by colour alone, and exactly one control
|
|
63
|
+
carries it. A zero-page pagination has no current page and no activation at all. */
|
|
64
|
+
const Pagination = React.forwardRef(({ count, value, defaultValue = 1, onValueChange, siblingCount = 1, disabled = false, getPageHref, getPageLabel, previousLabel = "Previous page", nextLabel = "Next page", className, "aria-label": ariaLabel, ...props }, ref) => {
|
|
65
|
+
const [uncontrolledPage, setUncontrolledPage] = React.useState(() => normalizePage(defaultValue));
|
|
66
|
+
const pageCount = normalizeCount(count);
|
|
67
|
+
const requested = value === undefined ? uncontrolledPage : normalizePage(value);
|
|
68
|
+
/* A controlled page outside the available range is shown clamped rather than rewritten: the
|
|
69
|
+
component reports what a reader asked for, and never corrects the consumer's own state. */
|
|
70
|
+
const current = pageCount === 0 ? null : Math.min(Math.max(requested, 1), pageCount);
|
|
71
|
+
const activate = (page) => {
|
|
72
|
+
setUncontrolledPage(page);
|
|
73
|
+
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(page);
|
|
74
|
+
};
|
|
75
|
+
/* An ordinary activation reports the destination and then lets the anchor do its own job: the
|
|
76
|
+
component never calls `preventDefault`, so the browser keeps its navigation and the consumer's
|
|
77
|
+
router still sees the click. A modified click is not an activation here — `meta`/`ctrl` asks for
|
|
78
|
+
a new tab and `shift` for a new window, and this page is still the one being read. */
|
|
79
|
+
const activateFromAnchor = (event, page) => {
|
|
80
|
+
if (event.defaultPrevented)
|
|
81
|
+
return;
|
|
82
|
+
if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
|
|
83
|
+
return;
|
|
84
|
+
activate(page);
|
|
85
|
+
};
|
|
86
|
+
/* The disabled step lands once for the whole pagination, so a control inside it carries only the
|
|
87
|
+
cursor. A boundary control that is disabled on its own carries the whole step, because nothing
|
|
88
|
+
above it has dimmed. */
|
|
89
|
+
const controlState = (onBoundary) => disabled ? ui_common.state.disabledDescendant : onBoundary ? ui_common.state.disabled : ui_common.state.enabled;
|
|
90
|
+
const items = current === null ? [] : boundedItems(pageCount, current, normalizeSiblings(siblingCount));
|
|
91
|
+
const previousBoundary = current === null || current <= 1;
|
|
92
|
+
const nextBoundary = current === null || current >= pageCount;
|
|
93
|
+
const previousPage = current === null ? 1 : Math.max(1, current - 1);
|
|
94
|
+
const nextPage = current === null ? 1 : Math.min(pageCount, current + 1);
|
|
95
|
+
const stepHref = (page, onBoundary) => getPageHref && !disabled && !onBoundary ? getPageHref(page) : undefined;
|
|
96
|
+
const step = (page, label, onBoundary, icon) => {
|
|
97
|
+
const href = stepHref(page, onBoundary);
|
|
98
|
+
return (jsxRuntime.jsx("li", { className: utils.cn("absolute top-1 flex first:start-1 last:end-1"), children: href !== undefined ? (jsxRuntime.jsx("a", { href: href, "aria-label": label, className: utils.cn(controlBase, "group", controlState(onBoundary)), onClick: (event) => activateFromAnchor(event, page), children: jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-5 items-center justify-center [&>svg]:size-5", ui_motion.motionInkPress), children: icon }) })) : (jsxRuntime.jsx("button", { type: "button", disabled: onBoundary || disabled, "aria-label": label, className: utils.cn(controlBase, "group", controlState(onBoundary)), onClick: () => activate(page), children: jsxRuntime.jsx("span", { className: utils.cn("inline-flex size-5 items-center justify-center [&>svg]:size-5", !disabled && !onBoundary && ui_motion.motionInkPress), children: icon }) })) }));
|
|
99
|
+
};
|
|
100
|
+
const pageControl = (page) => {
|
|
101
|
+
const isCurrent = page === current;
|
|
102
|
+
const label = getPageLabel ? getPageLabel(page) : `Page ${page}`;
|
|
103
|
+
const href = stepHref(page, false);
|
|
104
|
+
return (jsxRuntime.jsxs("li", { className: utils.cn("min-w-0 items-center gap-2", isCurrent ? "flex" : "hidden [@container(min-width:32rem)]:flex"), children: [href !== undefined ? (jsxRuntime.jsx("a", { href: href, "aria-current": isCurrent ? "page" : undefined, "aria-label": label, className: utils.cn(controlBase, "group shrink break-all px-3", isCurrent && utils.cn(ui_common.tone.selected.primary, ui_common.elevation.control, "font-medium", !disabled && ui_common.state.recess), controlState(false)), onClick: (event) => activateFromAnchor(event, page), children: jsxRuntime.jsx("span", { className: utils.cn(ui_motion.motionInkPress), children: page }) })) : (jsxRuntime.jsx("button", { type: "button", disabled: disabled, "aria-current": isCurrent ? "page" : undefined, "aria-label": label, className: utils.cn(controlBase, "group shrink break-all px-3", isCurrent && utils.cn(ui_common.tone.selected.primary, ui_common.elevation.control, "font-medium", !disabled && ui_common.state.recess), controlState(false)), onClick: () => activate(page), children: jsxRuntime.jsx("span", { className: utils.cn(!disabled && ui_motion.motionInkPress), children: page }) })), isCurrent && (jsxRuntime.jsxs("span", { className: utils.cn("min-w-0 break-all pe-2 text-sm tabular-nums [@container(min-width:32rem)]:hidden", ui_common.text.medium), children: [jsxRuntime.jsx("span", { "aria-hidden": "true", children: "/ " }), jsxRuntime.jsx("span", { className: utils.cn("sr-only"), children: "of " }), pageCount] }))] }, page));
|
|
105
|
+
};
|
|
106
|
+
/* The gap holds the row's rhythm and says nothing: it is the same footprint a page control holds,
|
|
107
|
+
so the numbers around it stay aligned, and it is hidden from assistive technology so a reader
|
|
108
|
+
counts pages rather than controls. */
|
|
109
|
+
const gap = (key) => (jsxRuntime.jsx("li", { "aria-hidden": "true", className: utils.cn("hidden [@container(min-width:32rem)]:flex"), children: jsxRuntime.jsx("span", { className: utils.cn("inline-flex items-center justify-center", ui_common.density.target, ui_common.text.medium), children: "\u2026" }) }, key));
|
|
110
|
+
return (jsxRuntime.jsx("nav", { ...props, ref: ref, "aria-label": ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : "Pagination", className: utils.cn("w-full min-w-0 max-w-full [container-type:inline-size] [contain-intrinsic-inline-size:14rem]", disabled && ui_common.state.disabled, className), children: jsxRuntime.jsxs("ol", { role: "list", className: utils.cn("relative m-0 flex min-h-[3.25rem] w-fit max-w-full list-none flex-wrap items-center gap-1 px-[3.25rem] py-1", ui_common.shape.control, ui_common.selectable.surface, ui_common.selectable.rest), children: [step(previousPage, previousLabel, previousBoundary, jsxRuntime.jsx(lucideReact.ArrowLeft, { "aria-hidden": "true", className: utils.cn("rtl:-scale-x-100") })), items.map((item) => (typeof item === "number" ? pageControl(item) : gap(item))), step(nextPage, nextLabel, nextBoundary, jsxRuntime.jsx(lucideReact.ArrowRight, { "aria-hidden": "true", className: utils.cn("rtl:-scale-x-100") }))] }) }));
|
|
111
|
+
});
|
|
112
|
+
Pagination.displayName = "Pagination";
|
|
113
|
+
|
|
114
|
+
exports.default = Pagination;
|
|
115
|
+
//# sourceMappingURL=Pagination.cjs.map
|