@1money/component-ui 0.1.15-alpha.0 → 0.1.16-alpha.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 (61) hide show
  1. package/es/business/FilePreview/FilePreview.d.ts +6 -0
  2. package/es/business/FilePreview/FilePreview.js +78 -0
  3. package/es/business/FilePreview/ImagePreview.d.ts +11 -0
  4. package/es/business/FilePreview/ImagePreview.js +42 -0
  5. package/es/business/FilePreview/PdfPreview.d.ts +12 -0
  6. package/es/business/FilePreview/PdfPreview.js +49 -0
  7. package/es/business/FilePreview/PreviewContent.d.ts +7 -0
  8. package/es/business/FilePreview/PreviewContent.js +253 -0
  9. package/es/business/FilePreview/SpreadsheetPreview.d.ts +15 -0
  10. package/es/business/FilePreview/SpreadsheetPreview.js +239 -0
  11. package/es/business/FilePreview/index.d.ts +4 -0
  12. package/es/business/FilePreview/index.js +7 -0
  13. package/es/business/FilePreview/interface.d.ts +40 -0
  14. package/es/business/FilePreview/interface.js +2 -0
  15. package/es/business/FilePreview/style/FilePreview.css +106 -0
  16. package/es/business/FilePreview/style/css.js +2 -0
  17. package/es/business/FilePreview/style/index.d.ts +1 -0
  18. package/es/business/FilePreview/style/index.js +2 -0
  19. package/es/business/FilePreview/utils.d.ts +11 -0
  20. package/es/business/FilePreview/utils.js +218 -0
  21. package/es/business/index.d.ts +1 -0
  22. package/es/business/index.js +2 -1
  23. package/es/index.css +1 -1
  24. package/es/index.d.ts +2 -0
  25. package/es/index.js +2 -1
  26. package/es/locale/en_US/business.js +12 -1
  27. package/es/locale/interface.d.ts +11 -0
  28. package/es/locale/pt_BR/business.js +12 -1
  29. package/es/locale/zh_CN/business.js +12 -1
  30. package/lib/business/FilePreview/FilePreview.d.ts +6 -0
  31. package/lib/business/FilePreview/FilePreview.js +86 -0
  32. package/lib/business/FilePreview/ImagePreview.d.ts +11 -0
  33. package/lib/business/FilePreview/ImagePreview.js +49 -0
  34. package/lib/business/FilePreview/PdfPreview.d.ts +12 -0
  35. package/lib/business/FilePreview/PdfPreview.js +56 -0
  36. package/lib/business/FilePreview/PreviewContent.d.ts +7 -0
  37. package/lib/business/FilePreview/PreviewContent.js +260 -0
  38. package/lib/business/FilePreview/SpreadsheetPreview.d.ts +15 -0
  39. package/lib/business/FilePreview/SpreadsheetPreview.js +250 -0
  40. package/lib/business/FilePreview/index.d.ts +4 -0
  41. package/lib/business/FilePreview/index.js +33 -0
  42. package/lib/business/FilePreview/interface.d.ts +40 -0
  43. package/lib/business/FilePreview/interface.js +6 -0
  44. package/lib/business/FilePreview/style/FilePreview.css +106 -0
  45. package/lib/business/FilePreview/style/css.js +4 -0
  46. package/lib/business/FilePreview/style/index.d.ts +1 -0
  47. package/lib/business/FilePreview/style/index.js +4 -0
  48. package/lib/business/FilePreview/utils.d.ts +11 -0
  49. package/lib/business/FilePreview/utils.js +230 -0
  50. package/lib/business/index.d.ts +1 -0
  51. package/lib/business/index.js +13 -1
  52. package/lib/index.css +1 -1
  53. package/lib/index.d.ts +2 -0
  54. package/lib/index.js +8 -1
  55. package/lib/locale/en_US/business.js +12 -1
  56. package/lib/locale/interface.d.ts +11 -0
  57. package/lib/locale/pt_BR/business.js +12 -1
  58. package/lib/locale/zh_CN/business.js +12 -1
  59. package/package.json +9 -2
  60. package/scripts/mcp-server/examples.generated.json +18 -0
  61. package/scripts/mcp-server/index.generated.json +223 -0
@@ -0,0 +1,239 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
3
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
4
+ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
5
+ function adopt(value) {
6
+ return value instanceof P ? value : new P(function (resolve) {
7
+ resolve(value);
8
+ });
9
+ }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) {
12
+ try {
13
+ step(generator.next(value));
14
+ } catch (e) {
15
+ reject(e);
16
+ }
17
+ }
18
+ function rejected(value) {
19
+ try {
20
+ step(generator["throw"](value));
21
+ } catch (e) {
22
+ reject(e);
23
+ }
24
+ }
25
+ function step(result) {
26
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
27
+ }
28
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
29
+ });
30
+ };
31
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
32
+ import { useEffect, useMemo } from 'react';
33
+ import useSafeState from '@1money/hooks/useSafeState';
34
+ import { Tabs } from '../../components/Tabs';
35
+ import { Typography } from '../../components/Typography';
36
+ import { DEFAULT_MAX_COLUMNS, DEFAULT_MAX_ROWS, previewLimit } from './utils';
37
+ export function SpreadsheetPreview(_ref) {
38
+ var _this = this;
39
+ var blob = _ref.blob,
40
+ name = _ref.name,
41
+ classes = _ref.classes,
42
+ locale = _ref.locale,
43
+ loading = _ref.loading,
44
+ onError = _ref.onError,
45
+ _ref$maxRows = _ref.maxRows,
46
+ maxRows = _ref$maxRows === void 0 ? DEFAULT_MAX_ROWS : _ref$maxRows,
47
+ _ref$maxColumns = _ref.maxColumns,
48
+ maxColumns = _ref$maxColumns === void 0 ? DEFAULT_MAX_COLUMNS : _ref$maxColumns;
49
+ var rowLimit = previewLimit(maxRows, DEFAULT_MAX_ROWS, 1000);
50
+ var columnLimit = previewLimit(maxColumns, DEFAULT_MAX_COLUMNS, 100);
51
+ var _useSafeState = useSafeState(),
52
+ _useSafeState2 = _slicedToArray(_useSafeState, 2),
53
+ data = _useSafeState2[0],
54
+ setData = _useSafeState2[1];
55
+ var _useSafeState3 = useSafeState(''),
56
+ _useSafeState4 = _slicedToArray(_useSafeState3, 2),
57
+ activeSheet = _useSafeState4[0],
58
+ setActiveSheet = _useSafeState4[1];
59
+ useEffect(function () {
60
+ var active = true;
61
+ var parse = function parse() {
62
+ return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator().m(function _callee() {
63
+ var _yield$Promise$all, _yield$Promise$all2, xlsx, buffer, signature, workbook, names, _t;
64
+ return _regenerator().w(function (_context) {
65
+ while (1) switch (_context.p = _context.n) {
66
+ case 0:
67
+ _context.p = 0;
68
+ _context.n = 1;
69
+ return Promise.all([import('xlsx'), blob.arrayBuffer()]);
70
+ case 1:
71
+ _yield$Promise$all = _context.v;
72
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
73
+ xlsx = _yield$Promise$all2[0];
74
+ buffer = _yield$Promise$all2[1];
75
+ if (active) {
76
+ _context.n = 2;
77
+ break;
78
+ }
79
+ return _context.a(2);
80
+ case 2:
81
+ signature = new Uint8Array(buffer, 0, Math.min(buffer.byteLength, 4));
82
+ if (!(/\.xlsx$/i.test(name) && (signature[0] !== 0x50 || signature[1] !== 0x4b))) {
83
+ _context.n = 3;
84
+ break;
85
+ }
86
+ throw new Error('The file is not a valid XLSX workbook.');
87
+ case 3:
88
+ workbook = xlsx.read(buffer, {
89
+ type: 'array',
90
+ sheetRows: rowLimit + 1,
91
+ raw: true,
92
+ cellHTML: false,
93
+ cellFormula: false,
94
+ cellStyles: false
95
+ });
96
+ names = workbook.SheetNames.filter(function (sheet) {
97
+ var _a, _b, _c;
98
+ return !((_c = (_b = (_a = workbook.Workbook) === null || _a === void 0 ? void 0 : _a.Sheets) === null || _b === void 0 ? void 0 : _b.find(function (item) {
99
+ return item.name === sheet;
100
+ })) === null || _c === void 0 ? void 0 : _c.Hidden);
101
+ });
102
+ if (names.length) {
103
+ _context.n = 4;
104
+ break;
105
+ }
106
+ throw new Error('The workbook has no visible worksheets.');
107
+ case 4:
108
+ workbook.SheetNames = names;
109
+ setData({
110
+ workbook: workbook,
111
+ xlsx: xlsx
112
+ });
113
+ setActiveSheet(names[0]);
114
+ _context.n = 6;
115
+ break;
116
+ case 5:
117
+ _context.p = 5;
118
+ _t = _context.v;
119
+ if (active) onError(_t instanceof Error ? _t : new Error('Unable to read the spreadsheet.'));
120
+ case 6:
121
+ return _context.a(2);
122
+ }
123
+ }, _callee, null, [[0, 5]]);
124
+ }));
125
+ };
126
+ void parse();
127
+ return function () {
128
+ active = false;
129
+ };
130
+ }, [blob, name, rowLimit, onError, setData, setActiveSheet]);
131
+ var preview = useMemo(function () {
132
+ var sheet = data === null || data === void 0 ? void 0 : data.workbook.Sheets[activeSheet];
133
+ if (!data || !(sheet === null || sheet === void 0 ? void 0 : sheet['!ref'])) return undefined;
134
+ var range = data.xlsx.utils.decode_range(sheet['!fullref'] || sheet['!ref']);
135
+ var endRow = Math.min(range.e.r, range.s.r + rowLimit - 1);
136
+ var endColumn = Math.min(range.e.c, range.s.c + columnLimit - 1);
137
+ var bounded = {
138
+ s: range.s,
139
+ e: {
140
+ r: endRow,
141
+ c: endColumn
142
+ }
143
+ };
144
+ var rows = data.xlsx.utils.sheet_to_json(sheet, {
145
+ header: 1,
146
+ raw: false,
147
+ defval: '',
148
+ blankrows: true,
149
+ range: bounded
150
+ });
151
+ var columns = Array.from({
152
+ length: endColumn - range.s.c + 1
153
+ }, function (_, index) {
154
+ return data.xlsx.utils.encode_col(range.s.c + index);
155
+ });
156
+ return {
157
+ rows: rows,
158
+ columns: columns,
159
+ startRow: range.s.r + 1,
160
+ truncated: endRow < range.e.r || endColumn < range.e.c
161
+ };
162
+ }, [data, activeSheet, rowLimit, columnLimit]);
163
+ if (!data) return loading;
164
+ return _jsxs(_Fragment, {
165
+ children: [_jsx(Tabs, {
166
+ className: classes('sheets'),
167
+ activeKey: activeSheet,
168
+ onChange: setActiveSheet,
169
+ onKeyDown: function onKeyDown(event) {
170
+ var _a;
171
+ if (!(event.target instanceof HTMLButtonElement) || event.target.getAttribute('role') !== 'tab') return;
172
+ var keys = data.workbook.SheetNames;
173
+ var index = keys.indexOf(activeSheet);
174
+ var next = event.key === 'ArrowRight' ? (index + 1) % keys.length : event.key === 'ArrowLeft' ? (index + keys.length - 1) % keys.length : event.key === 'Home' ? 0 : event.key === 'End' ? keys.length - 1 : undefined;
175
+ if (next === undefined) return;
176
+ event.preventDefault();
177
+ setActiveSheet(keys[next]);
178
+ (_a = event.currentTarget.querySelectorAll('[role="tab"]')[next]) === null || _a === void 0 ? void 0 : _a.focus();
179
+ },
180
+ items: data.workbook.SheetNames.map(function (key) {
181
+ return {
182
+ key: key,
183
+ label: key
184
+ };
185
+ })
186
+ }), preview ? _jsxs(_Fragment, {
187
+ children: [_jsx("div", {
188
+ className: classes('viewport'),
189
+ tabIndex: 0,
190
+ role: 'region',
191
+ "aria-label": activeSheet,
192
+ children: _jsxs("table", {
193
+ className: classes('table'),
194
+ "aria-label": "".concat(name, " \u2014 ").concat(activeSheet),
195
+ children: [_jsx("thead", {
196
+ children: _jsxs("tr", {
197
+ children: [_jsx("th", {
198
+ scope: 'col',
199
+ children: "#"
200
+ }), preview.columns.map(function (column) {
201
+ return _jsx("th", {
202
+ scope: 'col',
203
+ children: column
204
+ }, column);
205
+ })]
206
+ })
207
+ }), _jsx("tbody", {
208
+ children: preview.rows.map(function (row, index) {
209
+ return _jsxs("tr", {
210
+ children: [_jsx("th", {
211
+ scope: 'row',
212
+ children: preview.startRow + index
213
+ }), preview.columns.map(function (column, columnIndex) {
214
+ var _a;
215
+ return _jsx("td", {
216
+ children: (_a = row[columnIndex]) !== null && _a !== void 0 ? _a : ''
217
+ }, column);
218
+ })]
219
+ }, index);
220
+ })
221
+ })]
222
+ })
223
+ }), preview.truncated && _jsx(Typography.Body, {
224
+ size: 'sm',
225
+ color: 'default-secondary',
226
+ role: 'status',
227
+ children: locale.truncated.replace('{rows}', String(rowLimit)).replace('{columns}', String(columnLimit))
228
+ })]
229
+ }) : _jsx("div", {
230
+ className: classes('message'),
231
+ role: 'status',
232
+ children: _jsx(Typography.Body, {
233
+ size: "md",
234
+ children: locale.emptySheet
235
+ })
236
+ })]
237
+ });
238
+ }
239
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbGVQcmV2aWV3L1NwcmVhZHNoZWV0UHJldmlldy5qcyIsImJ1c2luZXNzL3NyYy9idXNpbmVzcy9GaWxlUHJldmlldy9TcHJlYWRzaGVldFByZXZpZXcudHN4Il0sIm5hbWVzIjpbImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsIl9yZWdlbmVyYXRvciIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJ0aGVuIiwiYXBwbHkiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlU2FmZVN0YXRlIiwiVGFicyIsIlR5cG9ncmFwaHkiLCJERUZBVUxUX01BWF9DT0xVTU5TIiwiREVGQVVMVF9NQVhfUk9XUyIsInByZXZpZXdMaW1pdCIsIlNwcmVhZHNoZWV0UHJldmlldyIsIl9yZWYiLCJfdGhpcyIsImJsb2IiLCJuYW1lIiwiY2xhc3NlcyIsImxvY2FsZSIsImxvYWRpbmciLCJvbkVycm9yIiwiX3JlZiRtYXhSb3dzIiwibWF4Um93cyIsIl9yZWYkbWF4Q29sdW1ucyIsIm1heENvbHVtbnMiLCJyb3dMaW1pdCIsImNvbHVtbkxpbWl0IiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTYWZlU3RhdGUzIiwiX3VzZVNhZmVTdGF0ZTQiLCJhY3RpdmVTaGVldCIsInNldEFjdGl2ZVNoZWV0IiwiYWN0aXZlIiwicGFyc2UiLCJfY2FsbGVlIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInhsc3giLCJidWZmZXIiLCJzaWduYXR1cmUiLCJ3b3JrYm9vayIsIm5hbWVzIiwiX3QiLCJfY29udGV4dCIsImFsbCIsImFycmF5QnVmZmVyIiwiVWludDhBcnJheSIsIk1hdGgiLCJtaW4iLCJieXRlTGVuZ3RoIiwidGVzdCIsIkVycm9yIiwicmVhZCIsInR5cGUiLCJzaGVldFJvd3MiLCJyYXciLCJjZWxsSFRNTCIsImNlbGxGb3JtdWxhIiwiY2VsbFN0eWxlcyIsIlNoZWV0TmFtZXMiLCJmaWx0ZXIiLCJzaGVldCIsIl9hIiwiX2IiLCJfYyIsIldvcmtib29rIiwiU2hlZXRzIiwiZmluZCIsIml0ZW0iLCJIaWRkZW4iLCJwcmV2aWV3IiwidW5kZWZpbmVkIiwicmFuZ2UiLCJ1dGlscyIsImRlY29kZV9yYW5nZSIsImVuZFJvdyIsInMiLCJlbmRDb2x1bW4iLCJib3VuZGVkIiwicm93cyIsInNoZWV0X3RvX2pzb24iLCJoZWFkZXIiLCJkZWZ2YWwiLCJibGFua3Jvd3MiLCJjb2x1bW5zIiwiQXJyYXkiLCJmcm9tIiwiXyIsImluZGV4IiwiZW5jb2RlX2NvbCIsInN0YXJ0Um93IiwidHJ1bmNhdGVkIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJhY3RpdmVLZXkiLCJvbkNoYW5nZSIsIm9uS2V5RG93biIsImV2ZW50IiwidGFyZ2V0IiwiSFRNTEJ1dHRvbkVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJrZXlzIiwiaW5kZXhPZiIsImtleSIsInByZXZlbnREZWZhdWx0IiwiY3VycmVudFRhcmdldCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb2N1cyIsIml0ZW1zIiwibWFwIiwibGFiZWwiLCJ0YWJJbmRleCIsInJvbGUiLCJjb25jYXQiLCJzY29wZSIsImNvbHVtbiIsInJvdyIsImNvbHVtbkluZGV4IiwiQm9keSIsInNpemUiLCJjb2xvciIsInJlcGxhY2UiLCJTdHJpbmciLCJlbXB0eVNoZWV0Il0sIm1hcHBpbmdzIjoiOzBCQUNBLHVLQUFBQSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssV0FBQSw4QkFBQUMsRUFBQU4sQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFMLENBQUEsSUFBQUEsQ0FBQSxDQUFBTSxTQUFBLFlBQUFDLFNBQUEsR0FBQVAsQ0FBQSxHQUFBTyxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFMLENBQUEsQ0FBQUMsU0FBQSxVQUFBSyxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBVixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQVgsQ0FBQSxRQUFBWSxDQUFBLE9BQUFDLENBQUEsS0FBQUYsQ0FBQSxLQUFBYixDQUFBLEtBQUFnQixDQUFBLEVBQUFwQixDQUFBLEVBQUFxQixDQUFBLEVBQUFDLENBQUEsRUFBQU4sQ0FBQSxFQUFBTSxDQUFBLENBQUFDLElBQUEsQ0FBQXZCLENBQUEsTUFBQXNCLENBQUEsV0FBQUEs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LEVBQUU5RSxNQUFNLENBQUM2RztNQUFVLENBQUE7SUFBbUIsQ0FBQSxDQUFNO0VBQUEsQ0FBQSxDQUM3SDtBQUNMIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbGVQcmV2aWV3L1NwcmVhZHNoZWV0UHJldmlldy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZVNhZmVTdGF0ZSBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZVNhZmVTdGF0ZSc7XG5pbXBvcnQgeyBUYWJzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9UYWJzJztcbmltcG9ydCB7IFR5cG9ncmFwaHkgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfQ09MVU1OUywgREVGQVVMVF9NQVhfUk9XUywgcHJldmlld0xpbWl0IH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgZnVuY3Rpb24gU3ByZWFkc2hlZXRQcmV2aWV3KHsgYmxvYiwgbmFtZSwgY2xhc3NlcywgbG9jYWxlLCBsb2FkaW5nLCBvbkVycm9yLCBtYXhSb3dzID0gREVGQVVMVF9NQVhfUk9XUywgbWF4Q29sdW1ucyA9IERFRkFVTFRfTUFYX0NPTFVNTlMgfSkge1xuICAgIGNvbnN0IHJvd0xpbWl0ID0gcHJldmlld0xpbWl0KG1heFJvd3MsIERFRkFVTFRfTUFYX1JPV1MsIDEwMDApO1xuICAgIGNvbnN0IGNvbHVtbkxpbWl0ID0gcHJldmlld0xpbWl0KG1heENvbHVtbnMsIERFRkFVTFRfTUFYX0NPTFVNTlMsIDEwMCk7XG4gICAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU2FmZVN0YXRlKCk7XG4gICAgY29uc3QgW2FjdGl2ZVNoZWV0LCBzZXRBY3RpdmVTaGVldF0gPSB1c2VTYWZlU3RhdGUoJycpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBwYXJzZSA9ICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3hsc3gsIGJ1ZmZlcl0gPSB5aWVsZCBQcm9taXNlLmFsbChbaW1wb3J0KCd4bHN4JyksIGJsb2IuYXJyYXlCdWZmZXIoKV0pO1xuICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCAwLCBNYXRoLm1pbihidWZmZXIuYnl0ZUxlbmd0aCwgNCkpO1xuICAgICAgICAgICAgICAgIGlmICgvXFwueGxzeCQvaS50ZXN0KG5hbWUpICYmIChzaWduYXR1cmVbMF0gIT09IDB4NTAgfHwgc2lnbmF0dXJlWzFdICE9PSAweDRiKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmaWxlIGlzIG5vdCBhIHZhbGlkIFhMU1ggd29ya2Jvb2suJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtib29rID0geGxzeC5yZWFkKGJ1ZmZlciwgeyB0eXBlOiAnYXJyYXknLCBzaGVldFJvd3M6IHJvd0xpbWl0ICsgMSwgcmF3OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjZWxsSFRNTDogZmFsc2UsIGNlbGxGb3JtdWxhOiBmYWxzZSwgY2VsbFN0eWxlczogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZXMgPSB3b3JrYm9vay5TaGVldE5hbWVzLmZpbHRlcihzaGVldCA9PiB7IHZhciBfYSwgX2IsIF9jOyByZXR1cm4gISgoX2MgPSAoX2IgPSAoX2EgPSB3b3JrYm9vay5Xb3JrYm9vaykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLlNoZWV0cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHNoZWV0KSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLkhpZGRlbik7IH0pO1xuICAgICAgICAgICAgICAgIGlmICghbmFtZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB3b3JrYm9vayBoYXMgbm8gdmlzaWJsZSB3b3Jrc2hlZXRzLicpO1xuICAgICAgICAgICAgICAgIHdvcmtib29rLlNoZWV0TmFtZXMgPSBuYW1lcztcbiAgICAgICAgICAgICAgICBzZXREYXRhKHsgd29ya2Jvb2ssIHhsc3ggfSk7XG4gICAgICAgICAgICAgICAgc2V0QWN0aXZlU2hlZXQobmFtZXNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1VuYWJsZSB0byByZWFkIHRoZSBzcHJlYWRzaGVldC4nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB2b2lkIHBhcnNlKCk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7IGFjdGl2ZSA9IGZhbHNlOyB9O1xuICAgIH0sIFtibG9iLCBuYW1lLCByb3dMaW1pdCwgb25FcnJvciwgc2V0RGF0YSwgc2V0QWN0aXZlU2hlZXRdKTtcbiAgICBjb25zdCBwcmV2aWV3ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoZWV0ID0gZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLndvcmtib29rLlNoZWV0c1thY3RpdmVTaGVldF07XG4gICAgICAgIGlmICghZGF0YSB8fCAhKHNoZWV0ID09PSBudWxsIHx8IHNoZWV0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzaGVldFsnIXJlZiddKSlcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZGF0YS54bHN4LnV0aWxzLmRlY29kZV9yYW5nZShzaGVldFsnIWZ1bGxyZWYnXSB8fCBzaGVldFsnIXJlZiddKTtcbiAgICAgICAgY29uc3QgZW5kUm93ID0gTWF0aC5taW4ocmFuZ2UuZS5yLCByYW5nZS5zLnIgKyByb3dMaW1pdCAtIDEpO1xuICAgICAgICBjb25zdCBlbmRDb2x1bW4gPSBNYXRoLm1pbihyYW5nZS5lLmMsIHJhbmdlLnMuYyArIGNvbHVtbkxpbWl0IC0gMSk7XG4gICAgICAgIGNvbnN0IGJvdW5kZWQgPSB7IHM6IHJhbmdlLnMsIGU6IHsgcjogZW5kUm93LCBjOiBlbmRDb2x1bW4gfSB9O1xuICAgICAgICBjb25zdCByb3dzID0gZGF0YS54bHN4LnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHtcbiAgICAgICAgICAgIGhlYWRlcjogMSwgcmF3OiBmYWxzZSwgZGVmdmFsOiAnJywgYmxhbmtyb3dzOiB0cnVlLCByYW5nZTogYm91bmRlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmRDb2x1bW4gLSByYW5nZS5zLmMgKyAxIH0sIChfLCBpbmRleCkgPT4gZGF0YS54bHN4LnV0aWxzLmVuY29kZV9jb2wocmFuZ2Uucy5jICsgaW5kZXgpKTtcbiAgICAgICAgcmV0dXJuIHsgcm93cywgY29sdW1ucywgc3RhcnRSb3c6IHJhbmdlLnMuciArIDEsIHRydW5jYXRlZDogZW5kUm93IDwgcmFuZ2UuZS5yIHx8IGVuZENvbHVtbiA8IHJhbmdlLmUuYyB9O1xuICAgIH0sIFtkYXRhLCBhY3RpdmVTaGVldCwgcm93TGltaXQsIGNvbHVtbkxpbWl0XSk7XG4gICAgaWYgKCFkYXRhKVxuICAgICAgICByZXR1cm4gbG9hZGluZztcbiAgICByZXR1cm4gX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChUYWJzLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnc2hlZXRzJyksIGFjdGl2ZUtleTogYWN0aXZlU2hlZXQsIG9uQ2hhbmdlOiBzZXRBY3RpdmVTaGVldCwgb25LZXlEb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpIHx8IGV2ZW50LnRhcmdldC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBkYXRhLndvcmtib29rLlNoZWV0TmFtZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2V5cy5pbmRleE9mKGFjdGl2ZVNoZWV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnID8gKGluZGV4ICsgMSkgJSBrZXlzLmxlbmd0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnID8gKGluZGV4ICsga2V5cy5sZW5ndGggLSAxKSAlIGtleXMubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdIb21lJyA/IDAgOiBldmVudC5rZXkgPT09ICdFbmQnID8ga2V5cy5sZW5ndGggLSAxIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVTaGVldChrZXlzW25leHRdKTtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gZXZlbnQuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cInRhYlwiXScpW25leHRdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9LCBpdGVtczogZGF0YS53b3JrYm9vay5TaGVldE5hbWVzLm1hcChrZXkgPT4gKHsga2V5LCBsYWJlbDoga2V5IH0pKSB9KSwgcHJldmlldyA/IF9qc3hzKF9GcmFnbWVudCwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3ZpZXdwb3J0JyksIHRhYkluZGV4OiAwLCByb2xlOiAncmVnaW9uJywgXCJhcmlhLWxhYmVsXCI6IGFjdGl2ZVNoZWV0LCBjaGlsZHJlbjogX2pzeHMoXCJ0YWJsZVwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygndGFibGUnKSwgXCJhcmlhLWxhYmVsXCI6IGAke25hbWV9IOKAlCAke2FjdGl2ZVNoZWV0fWAsIGNoaWxkcmVuOiBbX2pzeChcInRoZWFkXCIsIHsgY2hpbGRyZW46IF9qc3hzKFwidHJcIiwgeyBjaGlsZHJlbjogW19qc3goXCJ0aFwiLCB7IHNjb3BlOiAnY29sJywgY2hpbGRyZW46IFwiI1wiIH0pLCBwcmV2aWV3LmNvbHVtbnMubWFwKGNvbHVtbiA9PiBfanN4KFwidGhcIiwgeyBzY29wZTogJ2NvbCcsIGNoaWxkcmVuOiBjb2x1bW4gfSwgY29sdW1uKSldIH0pIH0pLCBfanN4KFwidGJvZHlcIiwgeyBjaGlsZHJlbjogcHJldmlldy5yb3dzLm1hcCgocm93LCBpbmRleCkgPT4gX2pzeHMoXCJ0clwiLCB7IGNoaWxkcmVuOiBbX2pzeChcInRoXCIsIHsgc2NvcGU6ICdyb3cnLCBjaGlsZHJlbjogcHJldmlldy5zdGFydFJvdyArIGluZGV4IH0pLCBwcmV2aWV3LmNvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiB7IHZhciBfYTsgcmV0dXJuIF9qc3goXCJ0ZFwiLCB7IGNoaWxkcmVuOiAoX2EgPSByb3dbY29sdW1uSW5kZXhdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyB9LCBjb2x1bW4pOyB9KV0gfSwgaW5kZXgpKSB9KV0gfSkgfSksIHByZXZpZXcudHJ1bmNhdGVkICYmIF9qc3goVHlwb2dyYXBoeS5Cb2R5LCB7IHNpemU6ICdzbScsIGNvbG9yOiAnZGVmYXVsdC1zZWNvbmRhcnknLCByb2xlOiAnc3RhdHVzJywgY2hpbGRyZW46IGxvY2FsZS50cnVuY2F0ZWQucmVwbGFjZSgne3Jvd3N9JywgU3RyaW5nKHJvd0xpbWl0KSkucmVwbGFjZSgne2NvbHVtbnN9JywgU3RyaW5nKGNvbHVtbkxpbWl0KSkgfSldIH0pIDogX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbWVzc2FnZScpLCByb2xlOiAnc3RhdHVzJywgY2hpbGRyZW46IF9qc3goVHlwb2dyYXBoeS5Cb2R5LCB7IHNpemU6IFwibWRcIiwgY2hpbGRyZW46IGxvY2FsZS5lbXB0eVNoZWV0IH0pIH0pXSB9KTtcbn0iLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,4 @@
1
+ import FilePreview from './FilePreview';
2
+ export { FilePreview } from './FilePreview';
3
+ export default FilePreview;
4
+ export * from './interface';
@@ -0,0 +1,7 @@
1
+ 'use client';
2
+
3
+ import FilePreview from './FilePreview';
4
+ export { FilePreview } from './FilePreview';
5
+ export default FilePreview;
6
+ export * from './interface';
7
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL3NyYy9idXNpbmVzcy9GaWxlUHJldmlldy9pbmRleC50cyJdLCJuYW1lcyI6WyJGaWxlUHJldmlldyJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFFWixPQUFPQSxXQUFXLE1BQU0sZUFBZTtBQUN2QyxTQUFTQSxXQUFXLFFBQVEsZUFBZTtBQUMzQyxlQUFlQSxXQUFXO0FBQzFCLGNBQWMsYUFBYSIsImZpbGUiOiJidXNpbmVzcy9GaWxlUHJldmlldy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,40 @@
1
+ import type { ReactNode, Ref } from 'react';
2
+ import type { DialogProps } from "../../components/Dialog";
3
+ import type { BusinessLocale } from "../../locale/interface";
4
+ export interface FilePreviewFile {
5
+ /** URL (including signed URLs), File, or Blob. URLs must permit browser CORS reads. */
6
+ src: string | Blob;
7
+ /** Original filename; supply this for signed URLs and nameless Blobs. */
8
+ name?: string;
9
+ /** Optional MIME hint for URLs without an extension. */
10
+ mimeType?: string;
11
+ }
12
+ export interface FilePreviewProps {
13
+ prefixCls?: string;
14
+ className?: string;
15
+ ref?: Ref<HTMLDivElement>;
16
+ file?: FilePreviewFile;
17
+ /** Called on each open/retry. Takes precedence over file; keep the callback stable. */
18
+ loadFile?: (signal: AbortSignal) => Promise<FilePreviewFile>;
19
+ open?: boolean;
20
+ defaultOpen?: boolean;
21
+ onOpenChange?: (open: boolean) => void;
22
+ /** Custom trigger render function. null hides the default preview icon. */
23
+ trigger?: ((openPreview: () => void) => ReactNode) | null;
24
+ disabled?: boolean;
25
+ title?: ReactNode;
26
+ /** Dialog width in pixels or CSS units. Defaults to min(90vw, 64rem). */
27
+ width?: DialogProps['width'];
28
+ /** Name displayed while loadFile resolves. */
29
+ fileName?: string;
30
+ /** Defaults to 10 MiB, matching RFI uploads. */
31
+ maxFileSize?: number;
32
+ /** Preview limits, clamped to 1–1000 rows and 1–100 columns. */
33
+ maxRows?: number;
34
+ maxColumns?: number;
35
+ /** Request headers/credentials for the file URL. AbortSignal is managed internally. */
36
+ requestOptions?: Omit<RequestInit, 'signal' | 'method' | 'body'>;
37
+ dialogProps?: Omit<DialogProps, 'open' | 'onCancel' | 'children' | 'title' | 'footer' | 'bare'>;
38
+ locale?: Partial<BusinessLocale['FilePreview']>;
39
+ onError?: (error: Error) => void;
40
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3MvRmlsZVByZXZpZXcvaW50ZXJmYWNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIiwic291cmNlcyI6WyJidXNpbmVzcy9GaWxlUHJldmlldy9pbnRlcmZhY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHt9OyJdLCJtYXBwaW5ncyI6IkFBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Retrieves the spacing value for a given token key.
3
+ *
4
+ * @param {string} $key - The spacing token key (e.g., '100', '200').
5
+ * @return {length|null} The computed spacing value or null if the key is invalid.
6
+ * @example
7
+ * .element {
8
+ * padding: om-spacing-token('200'); // Returns 8px if $om-sys-spacing-unit is 4px
9
+ * }
10
+ */
11
+ /**
12
+ * Computes the spacing value based on a token key or a direct length value.
13
+ *
14
+ * @param {string|length} $value - The spacing token key (e.g., '100') or a direct length value (e.g., '16px').
15
+ * @return {length} The computed spacing value.
16
+ * @example
17
+ * .element {
18
+ * margin: om-spacing-value('300'); // Returns 12px if $om-sys-spacing-unit is 4px
19
+ * padding: om-spacing-value(16px); // Returns 16px
20
+ * gap: om-spacing-value(2); // Returns 8px if $om-sys-spacing-unit is 4px
21
+ * }
22
+ */
23
+ .om-component-ui-file-preview {
24
+ max-width: 100%;
25
+ }
26
+ .om-component-ui-file-preview-content {
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: var(--om-spacing-400, 16px);
30
+ min-width: 0;
31
+ }
32
+ .om-component-ui-file-preview-filename {
33
+ overflow-wrap: anywhere;
34
+ }
35
+ .om-component-ui-file-preview-pdf {
36
+ width: 100%;
37
+ height: 60vh;
38
+ border: 0;
39
+ border-radius: var(--om-radius-200, 8px);
40
+ }
41
+ .om-component-ui-file-preview-viewport {
42
+ max-height: 60vh;
43
+ overflow: auto;
44
+ background: var(--om-bg-default-secondary, #f8f8f8);
45
+ border-radius: var(--om-radius-200, 8px);
46
+ }
47
+ .om-component-ui-file-preview-image {
48
+ display: block;
49
+ max-width: 100%;
50
+ max-height: 60vh;
51
+ margin: auto;
52
+ -o-object-fit: contain;
53
+ object-fit: contain;
54
+ }
55
+ .om-component-ui-file-preview-image[hidden] {
56
+ display: none;
57
+ }
58
+ .om-component-ui-file-preview-message {
59
+ display: flex;
60
+ flex-direction: column;
61
+ gap: var(--om-spacing-400, 16px);
62
+ align-items: center;
63
+ justify-content: center;
64
+ min-height: 30vh;
65
+ padding: var(--om-spacing-800, 32px);
66
+ text-align: center;
67
+ }
68
+ .om-component-ui-file-preview-sheets {
69
+ max-width: 100%;
70
+ overflow-x: auto;
71
+ }
72
+ .om-component-ui-file-preview-table {
73
+ width: 100%;
74
+ color: var(--om-text-default, #131313);
75
+ border-collapse: collapse;
76
+ font-size: var(--om-body-sm-font-size);
77
+ font-family: var(--om-body-sm-font-family);
78
+ line-height: var(--om-body-sm-line-height);
79
+ letter-spacing: var(--om-body-sm-letter-spacing);
80
+ font-weight: var(--om-body-sm-font-weight);
81
+ }
82
+ .om-component-ui-file-preview-table th,
83
+ .om-component-ui-file-preview-table td {
84
+ min-width: var(--om-spacing-2000, 80px);
85
+ max-width: calc(4 * var(--om-spacing-2000, 80px));
86
+ padding: var(--om-spacing-200, 8px) var(--om-spacing-300, 12px);
87
+ overflow-wrap: anywhere;
88
+ text-align: left;
89
+ white-space: pre-wrap;
90
+ box-shadow: inset 0 0 0 0.5px var(--om-border-default, #d1d2d2);
91
+ }
92
+ .om-component-ui-file-preview-table td {
93
+ background: var(--om-bg-default, #fff);
94
+ }
95
+ .om-component-ui-file-preview-table th {
96
+ font-weight: 500;
97
+ background: var(--om-bg-default-secondary, #f8f8f8);
98
+ }
99
+ .om-component-ui-file-preview-table th:first-child {
100
+ width: 1%;
101
+ min-width: var(--om-spacing-1000, 40px);
102
+ }
103
+ .om-component-ui-file-preview-table thead th {
104
+ position: sticky;
105
+ top: 0;
106
+ }
@@ -0,0 +1,2 @@
1
+ import './FilePreview.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbGVQcmV2aWV3L3NyYy9idXNpbmVzcy9GaWxlUHJldmlldy9zdHlsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLG9CQUFvQiIsImZpbGUiOiJidXNpbmVzcy9GaWxlUHJldmlldy9zdHlsZS9jc3MuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1 @@
1
+ import './FilePreview.css';
@@ -0,0 +1,2 @@
1
+ import './FilePreview.css';
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbGVQcmV2aWV3L3NyYy9idXNpbmVzcy9GaWxlUHJldmlldy9zdHlsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLG9CQUFvQiIsImZpbGUiOiJidXNpbmVzcy9GaWxlUHJldmlldy9zdHlsZS9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,11 @@
1
+ import type { FilePreviewFile, FilePreviewProps } from './interface';
2
+ export declare const DEFAULT_MAX_FILE_SIZE: number;
3
+ export declare const DEFAULT_MAX_ROWS = 200;
4
+ export declare const DEFAULT_MAX_COLUMNS = 50;
5
+ export type PreviewKind = 'image' | 'pdf' | 'spreadsheet' | 'unsupported';
6
+ export declare function getFileName(file: FilePreviewFile): string;
7
+ export declare function getPreviewKind(file: FilePreviewFile): PreviewKind;
8
+ export declare const previewLimit: (value: number, fallback: number, maximum: number) => number;
9
+ /** Basic format check before embedding; the native viewer validates PDF structure. */
10
+ export declare function validatePdfBlob(blob: Blob): Promise<void>;
11
+ export declare function readPreviewBlob(file: FilePreviewFile, signal: AbortSignal, maxBytes: number, options: FilePreviewProps['requestOptions']): Promise<Blob>;