@dimaan/ui 0.0.22 → 0.0.23
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/dist/index.cjs +239 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -2
- package/dist/index.d.ts +113 -2
- package/dist/index.js +231 -12
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -299,7 +299,9 @@ function DashboardContent({ className, children, ...props }) {
|
|
|
299
299
|
"main",
|
|
300
300
|
{
|
|
301
301
|
className: cn(
|
|
302
|
-
|
|
302
|
+
// `min-w-0` keeps wide children (Table, code blocks) scrolling within
|
|
303
|
+
// this column instead of widening the page past 100%.
|
|
304
|
+
"flex min-h-[calc(100vh-var(--header-height))] min-w-0 flex-1 flex-col gap-6 p-4 sm:p-6 lg:p-8",
|
|
303
305
|
className
|
|
304
306
|
),
|
|
305
307
|
...props,
|
|
@@ -365,7 +367,10 @@ function DashboardMain({ className, children, ...props }) {
|
|
|
365
367
|
"div",
|
|
366
368
|
{
|
|
367
369
|
className: cn(
|
|
368
|
-
|
|
370
|
+
// `min-w-0` lets this flex column shrink below its content's intrinsic
|
|
371
|
+
// width so wide children (e.g. a Table) scroll internally instead of
|
|
372
|
+
// stretching the whole layout past 100%.
|
|
373
|
+
"flex min-h-screen min-w-0 flex-1 flex-col transition-[margin] duration-200 ease-out",
|
|
369
374
|
// On desktop, push the main column past the fixed sidebar using logical margin.
|
|
370
375
|
collapsed ? "lg:ms-[var(--sidebar-width-collapsed)]" : "lg:ms-[var(--sidebar-width)]",
|
|
371
376
|
className
|
|
@@ -1725,19 +1730,231 @@ function mergeRefs(...refs) {
|
|
|
1725
1730
|
};
|
|
1726
1731
|
}
|
|
1727
1732
|
|
|
1733
|
+
// src/components/file-upload/fileUploadVariants.ts
|
|
1734
|
+
var fileUploadBaseClass = "flex w-full min-w-0 flex-col gap-2";
|
|
1735
|
+
var fileUploadDropzoneClass = "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed border-input bg-muted/40 px-6 py-8 text-center transition-colors hover:border-ring peer-focus-visible:border-ring peer-focus-visible:ring-2 peer-focus-visible:ring-ring/40 data-[drag-active=true]:border-ring data-[drag-active=true]:bg-accent data-[invalid=true]:border-destructive data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50 data-[disabled=true]:hover:border-input";
|
|
1736
|
+
var fileUploadIconClass = "size-8 text-muted-foreground";
|
|
1737
|
+
var fileUploadPromptClass = "text-sm text-foreground";
|
|
1738
|
+
var fileUploadHintClass = "text-xs text-muted-foreground";
|
|
1739
|
+
var fileUploadFileRowClass = "flex items-center justify-between gap-2 rounded-md border border-border bg-card px-3 py-2";
|
|
1740
|
+
var fileUploadFileNameClass = "truncate text-sm font-medium text-foreground";
|
|
1741
|
+
var fileUploadFileSizeClass = "text-xs text-muted-foreground";
|
|
1742
|
+
var fileUploadRemoveClass = "inline-flex size-7 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:pointer-events-none disabled:opacity-50";
|
|
1743
|
+
var DEFAULT_MAX_SIZE_MB = 5;
|
|
1744
|
+
var DEFAULT_LABELS_LTR2 = {
|
|
1745
|
+
prompt: "Drag & drop a file or click to browse",
|
|
1746
|
+
remove: "Remove"
|
|
1747
|
+
};
|
|
1748
|
+
var DEFAULT_LABELS_RTL2 = {
|
|
1749
|
+
prompt: "\u0627\u0633\u062D\u0628 \u0648\u0623\u0641\u0644\u062A \u0645\u0644\u0641\u064B\u0627 \u0623\u0648 \u0627\u0636\u063A\u0637 \u0644\u0644\u0627\u062E\u062A\u064A\u0627\u0631",
|
|
1750
|
+
remove: "\u0625\u0632\u0627\u0644\u0629"
|
|
1751
|
+
};
|
|
1752
|
+
function normalizeFiles(value) {
|
|
1753
|
+
if (Array.isArray(value)) return value.filter((f) => f instanceof File);
|
|
1754
|
+
return value instanceof File ? [value] : [];
|
|
1755
|
+
}
|
|
1756
|
+
function fileKey(file) {
|
|
1757
|
+
return `${file.name}:${file.size}:${file.lastModified}`;
|
|
1758
|
+
}
|
|
1759
|
+
function formatBytes(bytes) {
|
|
1760
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
1761
|
+
const kb = bytes / 1024;
|
|
1762
|
+
if (kb < 1024) return `${kb.toFixed(1)} KB`;
|
|
1763
|
+
return `${(kb / 1024).toFixed(1)} MB`;
|
|
1764
|
+
}
|
|
1765
|
+
function matchesAccept(file, accept) {
|
|
1766
|
+
if (!accept) return true;
|
|
1767
|
+
const tokens = accept.split(",").map((t) => t.trim().toLowerCase()).filter(Boolean);
|
|
1768
|
+
if (tokens.length === 0 || tokens.includes("*") || tokens.includes("*/*")) return true;
|
|
1769
|
+
const name = file.name.toLowerCase();
|
|
1770
|
+
const type = file.type.toLowerCase();
|
|
1771
|
+
return tokens.some((token) => {
|
|
1772
|
+
if (token.startsWith(".")) return name.endsWith(token);
|
|
1773
|
+
if (token.endsWith("/*")) return type.startsWith(token.slice(0, -1));
|
|
1774
|
+
return type === token;
|
|
1775
|
+
});
|
|
1776
|
+
}
|
|
1777
|
+
var FileUploadImpl = react.forwardRef(
|
|
1778
|
+
function FileUpload(props, ref) {
|
|
1779
|
+
const {
|
|
1780
|
+
multiple = false,
|
|
1781
|
+
accept,
|
|
1782
|
+
maxSize = DEFAULT_MAX_SIZE_MB,
|
|
1783
|
+
disabled = false,
|
|
1784
|
+
required,
|
|
1785
|
+
name,
|
|
1786
|
+
id,
|
|
1787
|
+
onError,
|
|
1788
|
+
onBlur,
|
|
1789
|
+
labels: labelsProp,
|
|
1790
|
+
className,
|
|
1791
|
+
value,
|
|
1792
|
+
defaultValue,
|
|
1793
|
+
onValueChange,
|
|
1794
|
+
onChange,
|
|
1795
|
+
"aria-invalid": ariaInvalid,
|
|
1796
|
+
"aria-describedby": ariaDescribedBy,
|
|
1797
|
+
"aria-label": ariaLabel
|
|
1798
|
+
} = props;
|
|
1799
|
+
const dir = useDirection();
|
|
1800
|
+
const generatedId = react.useId();
|
|
1801
|
+
const inputId = id ?? generatedId;
|
|
1802
|
+
const [dragActive, setDragActive] = react.useState(false);
|
|
1803
|
+
const baseLabels = dir === "rtl" ? DEFAULT_LABELS_RTL2 : DEFAULT_LABELS_LTR2;
|
|
1804
|
+
const prompt = labelsProp?.prompt ?? baseLabels.prompt;
|
|
1805
|
+
const removeLabel = labelsProp?.remove ?? baseLabels.remove;
|
|
1806
|
+
const hint = labelsProp?.hint ?? (dir === "rtl" ? `\u0627\u0644\u062D\u062F \u0627\u0644\u0623\u0642\u0635\u0649 ${maxSize} \u0645\u064A\u062C\u0627\u0628\u0627\u064A\u062A` : `Max ${maxSize} MB`);
|
|
1807
|
+
const isControlled = value !== void 0;
|
|
1808
|
+
const [internal, setInternal] = react.useState(() => normalizeFiles(defaultValue));
|
|
1809
|
+
const files = isControlled ? normalizeFiles(value) : internal;
|
|
1810
|
+
const invalid = ariaInvalid === true || ariaInvalid === "true";
|
|
1811
|
+
const emit = (next) => {
|
|
1812
|
+
if (!isControlled) setInternal(next);
|
|
1813
|
+
onValueChange?.(multiple ? next : next[0] ?? null);
|
|
1814
|
+
onChange?.(multiple ? next : next[0] ?? null);
|
|
1815
|
+
};
|
|
1816
|
+
const tooLargeMessage = (file) => dir === "rtl" ? `${file.name} \u0623\u0643\u0628\u0631 \u0645\u0646 ${maxSize} \u0645\u064A\u062C\u0627\u0628\u0627\u064A\u062A` : `${file.name} is larger than ${maxSize} MB`;
|
|
1817
|
+
const wrongTypeMessage = (file) => dir === "rtl" ? `${file.name} \u0644\u064A\u0633 \u0646\u0648\u0639 \u0645\u0644\u0641 \u0645\u0642\u0628\u0648\u0644` : `${file.name} is not an accepted file type`;
|
|
1818
|
+
const addFiles = (incoming) => {
|
|
1819
|
+
if (disabled) return;
|
|
1820
|
+
const accepted = [];
|
|
1821
|
+
for (const file of Array.from(incoming)) {
|
|
1822
|
+
if (!matchesAccept(file, accept)) {
|
|
1823
|
+
onError?.({ code: "file-type-rejected", message: wrongTypeMessage(file), file });
|
|
1824
|
+
continue;
|
|
1825
|
+
}
|
|
1826
|
+
if (maxSize && file.size > maxSize * 1024 * 1024) {
|
|
1827
|
+
onError?.({ code: "file-too-large", message: tooLargeMessage(file), file });
|
|
1828
|
+
continue;
|
|
1829
|
+
}
|
|
1830
|
+
accepted.push(file);
|
|
1831
|
+
}
|
|
1832
|
+
if (accepted.length === 0) return;
|
|
1833
|
+
if (!multiple) {
|
|
1834
|
+
const [first] = accepted;
|
|
1835
|
+
if (first) emit([first]);
|
|
1836
|
+
return;
|
|
1837
|
+
}
|
|
1838
|
+
const byKey = new Map(files.map((f) => [fileKey(f), f]));
|
|
1839
|
+
for (const f of accepted) byKey.set(fileKey(f), f);
|
|
1840
|
+
emit([...byKey.values()]);
|
|
1841
|
+
};
|
|
1842
|
+
const handleInputChange = (event) => {
|
|
1843
|
+
if (event.target.files) addFiles(event.target.files);
|
|
1844
|
+
event.target.value = "";
|
|
1845
|
+
};
|
|
1846
|
+
const handleDrag = (event) => {
|
|
1847
|
+
event.preventDefault();
|
|
1848
|
+
event.stopPropagation();
|
|
1849
|
+
if (disabled) return;
|
|
1850
|
+
if (event.type === "dragenter" || event.type === "dragover") setDragActive(true);
|
|
1851
|
+
else if (event.type === "dragleave") setDragActive(false);
|
|
1852
|
+
};
|
|
1853
|
+
const handleDrop = (event) => {
|
|
1854
|
+
event.preventDefault();
|
|
1855
|
+
event.stopPropagation();
|
|
1856
|
+
setDragActive(false);
|
|
1857
|
+
if (!disabled && event.dataTransfer.files) addFiles(event.dataTransfer.files);
|
|
1858
|
+
};
|
|
1859
|
+
const remove = (file) => emit(files.filter((f) => fileKey(f) !== fileKey(file)));
|
|
1860
|
+
const showDropzone = multiple || files.length === 0;
|
|
1861
|
+
return (
|
|
1862
|
+
// biome-ignore lint/a11y/noStaticElementInteractions: drag-and-drop is a wrapper affordance; keyboard/click access is the inner <label> + focusable <input>.
|
|
1863
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1864
|
+
"div",
|
|
1865
|
+
{
|
|
1866
|
+
ref,
|
|
1867
|
+
"data-slot": "file-upload",
|
|
1868
|
+
className: cn(fileUploadBaseClass, className),
|
|
1869
|
+
onDragEnter: handleDrag,
|
|
1870
|
+
onDragOver: handleDrag,
|
|
1871
|
+
onDragLeave: handleDrag,
|
|
1872
|
+
onDrop: handleDrop,
|
|
1873
|
+
children: [
|
|
1874
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1875
|
+
"input",
|
|
1876
|
+
{
|
|
1877
|
+
id: inputId,
|
|
1878
|
+
type: "file",
|
|
1879
|
+
accept,
|
|
1880
|
+
multiple,
|
|
1881
|
+
name,
|
|
1882
|
+
required,
|
|
1883
|
+
disabled,
|
|
1884
|
+
onChange: handleInputChange,
|
|
1885
|
+
onBlur,
|
|
1886
|
+
"aria-invalid": ariaInvalid,
|
|
1887
|
+
"aria-describedby": ariaDescribedBy,
|
|
1888
|
+
"aria-label": ariaLabel,
|
|
1889
|
+
className: "peer sr-only"
|
|
1890
|
+
}
|
|
1891
|
+
),
|
|
1892
|
+
showDropzone ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1893
|
+
"label",
|
|
1894
|
+
{
|
|
1895
|
+
htmlFor: inputId,
|
|
1896
|
+
"data-slot": "file-upload-dropzone",
|
|
1897
|
+
"data-drag-active": dragActive ? "true" : void 0,
|
|
1898
|
+
"data-invalid": invalid ? "true" : void 0,
|
|
1899
|
+
"data-disabled": disabled ? "true" : void 0,
|
|
1900
|
+
className: fileUploadDropzoneClass,
|
|
1901
|
+
children: [
|
|
1902
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Upload, { "aria-hidden": "true", className: fileUploadIconClass }),
|
|
1903
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: fileUploadPromptClass, children: prompt }),
|
|
1904
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: fileUploadHintClass, children: hint })
|
|
1905
|
+
]
|
|
1906
|
+
}
|
|
1907
|
+
) : null,
|
|
1908
|
+
files.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-2", children: files.map((file) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1909
|
+
"li",
|
|
1910
|
+
{
|
|
1911
|
+
"data-slot": "file-upload-file",
|
|
1912
|
+
className: fileUploadFileRowClass,
|
|
1913
|
+
children: [
|
|
1914
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
1915
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.File, { "aria-hidden": "true", className: "size-5 shrink-0 text-muted-foreground" }),
|
|
1916
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
1917
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: fileUploadFileNameClass, children: file.name }),
|
|
1918
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: fileUploadFileSizeClass, children: formatBytes(file.size) })
|
|
1919
|
+
] })
|
|
1920
|
+
] }),
|
|
1921
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1922
|
+
"button",
|
|
1923
|
+
{
|
|
1924
|
+
type: "button",
|
|
1925
|
+
disabled,
|
|
1926
|
+
"aria-label": `${removeLabel}: ${file.name}`,
|
|
1927
|
+
"data-slot": "file-upload-remove",
|
|
1928
|
+
className: fileUploadRemoveClass,
|
|
1929
|
+
onClick: () => remove(file),
|
|
1930
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-hidden": "true", className: "size-4" })
|
|
1931
|
+
}
|
|
1932
|
+
)
|
|
1933
|
+
]
|
|
1934
|
+
},
|
|
1935
|
+
fileKey(file)
|
|
1936
|
+
)) }) : null
|
|
1937
|
+
]
|
|
1938
|
+
}
|
|
1939
|
+
)
|
|
1940
|
+
);
|
|
1941
|
+
}
|
|
1942
|
+
);
|
|
1943
|
+
var FileUpload2 = FileUploadImpl;
|
|
1944
|
+
|
|
1728
1945
|
// src/components/form-page/formPageVariants.ts
|
|
1729
1946
|
var formPageBaseClass = "flex w-full flex-col gap-6";
|
|
1730
1947
|
var formPageBodyClass = "flex-1";
|
|
1731
1948
|
var formPageActionsBarClass = "sticky bottom-0 -mx-6 -mb-6 mt-6 flex items-center justify-end gap-2 border-t border-border bg-background/95 px-6 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80";
|
|
1732
1949
|
var formPageSkeletonRowClass = "h-10 w-full animate-pulse rounded-md bg-muted";
|
|
1733
1950
|
var DEFAULT_SKELETON_ROW_COUNT2 = 6;
|
|
1734
|
-
var
|
|
1951
|
+
var DEFAULT_LABELS_LTR3 = {
|
|
1735
1952
|
back: "Back",
|
|
1736
1953
|
cancel: "Cancel",
|
|
1737
1954
|
save: "Save",
|
|
1738
1955
|
saving: "Saving\u2026"
|
|
1739
1956
|
};
|
|
1740
|
-
var
|
|
1957
|
+
var DEFAULT_LABELS_RTL3 = {
|
|
1741
1958
|
back: "\u0631\u062C\u0648\u0639",
|
|
1742
1959
|
cancel: "\u0625\u0644\u063A\u0627\u0621",
|
|
1743
1960
|
save: "\u062D\u0641\u0638",
|
|
@@ -1764,7 +1981,7 @@ function FormPage({
|
|
|
1764
1981
|
const dir = useDirection();
|
|
1765
1982
|
const formContext = reactHookForm.useFormContext();
|
|
1766
1983
|
const submitting = isSubmitting ?? formContext?.formState?.isSubmitting ?? false;
|
|
1767
|
-
const defaults = dir === "rtl" ?
|
|
1984
|
+
const defaults = dir === "rtl" ? DEFAULT_LABELS_RTL3 : DEFAULT_LABELS_LTR3;
|
|
1768
1985
|
const labels = { ...defaults, ...labelsProp };
|
|
1769
1986
|
const goBack = () => navigate(-1);
|
|
1770
1987
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "form-page", className: cn(formPageBaseClass, className), children: [
|
|
@@ -2182,7 +2399,7 @@ function Table(props) {
|
|
|
2182
2399
|
const sizeClasses = tableSizeClass[size];
|
|
2183
2400
|
const showToolbar = enableRowSelection && bulkActions !== void 0 && selected.size > 0;
|
|
2184
2401
|
const skeletonCount = loadingRowCount ?? pageSize;
|
|
2185
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full flex-col gap-3", className), children: [
|
|
2402
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex w-full min-w-0 flex-col gap-3", className), children: [
|
|
2186
2403
|
showToolbar && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2187
2404
|
Toolbar,
|
|
2188
2405
|
{
|
|
@@ -2215,7 +2432,9 @@ function Table(props) {
|
|
|
2215
2432
|
"thead",
|
|
2216
2433
|
{
|
|
2217
2434
|
className: cn(
|
|
2218
|
-
|
|
2435
|
+
// Opaque (not bg-muted/40) so a sticky header fully hides the rows
|
|
2436
|
+
// scrolling underneath it.
|
|
2437
|
+
"bg-muted text-muted-foreground",
|
|
2219
2438
|
maxHeight !== void 0 && "sticky top-0 z-10"
|
|
2220
2439
|
),
|
|
2221
2440
|
children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
@@ -2417,11 +2636,11 @@ var multiSelectSearchRowClass = "border-b border-border p-1";
|
|
|
2417
2636
|
var multiSelectListClass = "max-h-60 overflow-y-auto overflow-x-hidden p-1";
|
|
2418
2637
|
var multiSelectOptionClass = "flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground has-[:focus-visible]:bg-accent has-[:disabled]:pointer-events-none has-[:disabled]:opacity-50";
|
|
2419
2638
|
var multiSelectEmptyClass = "px-2 py-6 text-center text-sm text-muted-foreground";
|
|
2420
|
-
var
|
|
2639
|
+
var DEFAULT_LABELS_LTR4 = {
|
|
2421
2640
|
search: "Search\u2026",
|
|
2422
2641
|
empty: "No results"
|
|
2423
2642
|
};
|
|
2424
|
-
var
|
|
2643
|
+
var DEFAULT_LABELS_RTL4 = {
|
|
2425
2644
|
search: "\u0628\u062D\u062B\u2026",
|
|
2426
2645
|
empty: "\u0644\u0627 \u0646\u062A\u0627\u0626\u062C"
|
|
2427
2646
|
};
|
|
@@ -2452,7 +2671,7 @@ var MultiSelect = react.forwardRef(function MultiSelect2({
|
|
|
2452
2671
|
"aria-label": ariaLabel
|
|
2453
2672
|
}, ref) {
|
|
2454
2673
|
const dir = useDirection();
|
|
2455
|
-
const labels = { ...dir === "rtl" ?
|
|
2674
|
+
const labels = { ...dir === "rtl" ? DEFAULT_LABELS_RTL4 : DEFAULT_LABELS_LTR4, ...labelsProp };
|
|
2456
2675
|
const generatedId = react.useId();
|
|
2457
2676
|
const triggerId = id ?? generatedId;
|
|
2458
2677
|
const isControlled = value !== void 0;
|
|
@@ -3338,6 +3557,7 @@ exports.DropdownMenuShortcut = DropdownMenuShortcut;
|
|
|
3338
3557
|
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
3339
3558
|
exports.EmptyState = EmptyState;
|
|
3340
3559
|
exports.Field = Field;
|
|
3560
|
+
exports.FileUpload = FileUpload2;
|
|
3341
3561
|
exports.FormPage = FormPage;
|
|
3342
3562
|
exports.HeaderActions = HeaderActions;
|
|
3343
3563
|
exports.HeaderCollapseTrigger = HeaderCollapseTrigger;
|
|
@@ -3420,6 +3640,15 @@ exports.emptyStateDescriptionSizeClass = emptyStateDescriptionSizeClass;
|
|
|
3420
3640
|
exports.emptyStateIconWrapperBaseClass = emptyStateIconWrapperBaseClass;
|
|
3421
3641
|
exports.emptyStateIconWrapperSizeClass = emptyStateIconWrapperSizeClass;
|
|
3422
3642
|
exports.emptyStateTitleSizeClass = emptyStateTitleSizeClass;
|
|
3643
|
+
exports.fileUploadBaseClass = fileUploadBaseClass;
|
|
3644
|
+
exports.fileUploadDropzoneClass = fileUploadDropzoneClass;
|
|
3645
|
+
exports.fileUploadFileNameClass = fileUploadFileNameClass;
|
|
3646
|
+
exports.fileUploadFileRowClass = fileUploadFileRowClass;
|
|
3647
|
+
exports.fileUploadFileSizeClass = fileUploadFileSizeClass;
|
|
3648
|
+
exports.fileUploadHintClass = fileUploadHintClass;
|
|
3649
|
+
exports.fileUploadIconClass = fileUploadIconClass;
|
|
3650
|
+
exports.fileUploadPromptClass = fileUploadPromptClass;
|
|
3651
|
+
exports.fileUploadRemoveClass = fileUploadRemoveClass;
|
|
3423
3652
|
exports.formPageActionsBarClass = formPageActionsBarClass;
|
|
3424
3653
|
exports.formPageBaseClass = formPageBaseClass;
|
|
3425
3654
|
exports.formPageBodyClass = formPageBodyClass;
|