framepexls-ui-lib 2.1.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/dist/AnalyticsCharts.d.mts +4 -4
  2. package/dist/AnalyticsCharts.d.ts +4 -4
  3. package/dist/AppTopbar.d.mts +1 -2
  4. package/dist/AppTopbar.d.ts +1 -2
  5. package/dist/AssetPerformanceCard.d.mts +50 -0
  6. package/dist/AssetPerformanceCard.d.ts +50 -0
  7. package/dist/AssetPerformanceCard.js +342 -0
  8. package/dist/AssetPerformanceCard.mjs +319 -0
  9. package/dist/AssetTickerRow.d.mts +26 -0
  10. package/dist/AssetTickerRow.d.ts +26 -0
  11. package/dist/AssetTickerRow.js +255 -0
  12. package/dist/AssetTickerRow.mjs +225 -0
  13. package/dist/AuthTopbar.d.mts +2 -2
  14. package/dist/AuthTopbar.d.ts +2 -2
  15. package/dist/AuthTopbar.js +2 -1
  16. package/dist/AuthTopbar.mjs +2 -1
  17. package/dist/AvatarGroup.d.mts +2 -2
  18. package/dist/AvatarGroup.d.ts +2 -2
  19. package/dist/AvatarSquare.d.mts +2 -2
  20. package/dist/AvatarSquare.d.ts +2 -2
  21. package/dist/AvatarSquare.js +29 -27
  22. package/dist/AvatarSquare.mjs +29 -27
  23. package/dist/Badge.d.mts +1 -2
  24. package/dist/Badge.d.ts +1 -2
  25. package/dist/BadgeCluster.d.mts +2 -3
  26. package/dist/BadgeCluster.d.ts +2 -3
  27. package/dist/Breadcrumb.d.mts +1 -2
  28. package/dist/Breadcrumb.d.ts +1 -2
  29. package/dist/CalendarPanel.d.mts +2 -2
  30. package/dist/CalendarPanel.d.ts +2 -2
  31. package/dist/Carousel.d.mts +1 -2
  32. package/dist/Carousel.d.ts +1 -2
  33. package/dist/ChangeHistory.d.mts +1 -2
  34. package/dist/ChangeHistory.d.ts +1 -2
  35. package/dist/ChartCard.d.mts +1 -2
  36. package/dist/ChartCard.d.ts +1 -2
  37. package/dist/ChatCenter.d.mts +2 -2
  38. package/dist/ChatCenter.d.ts +2 -2
  39. package/dist/ChatbotCenter.d.mts +1 -2
  40. package/dist/ChatbotCenter.d.ts +1 -2
  41. package/dist/CheckboxPillsGroup.d.mts +1 -2
  42. package/dist/CheckboxPillsGroup.d.ts +1 -2
  43. package/dist/ColorPicker.d.mts +2 -2
  44. package/dist/ColorPicker.d.ts +2 -2
  45. package/dist/ColumnSelector.d.mts +1 -2
  46. package/dist/ColumnSelector.d.ts +1 -2
  47. package/dist/ComboSelect.d.mts +1 -2
  48. package/dist/ComboSelect.d.ts +1 -2
  49. package/dist/DataPageLayout.d.mts +64 -0
  50. package/dist/DataPageLayout.d.ts +64 -0
  51. package/dist/DataPageLayout.js +191 -0
  52. package/dist/DataPageLayout.mjs +157 -0
  53. package/dist/DataTable.d.mts +1 -2
  54. package/dist/DataTable.d.ts +1 -2
  55. package/dist/DataTableCard.d.mts +1 -2
  56. package/dist/DataTableCard.d.ts +1 -2
  57. package/dist/DataTableCardFooter.d.mts +2 -2
  58. package/dist/DataTableCardFooter.d.ts +2 -2
  59. package/dist/DateTimeField.d.mts +1 -2
  60. package/dist/DateTimeField.d.ts +1 -2
  61. package/dist/Dialog.d.mts +6 -7
  62. package/dist/Dialog.d.ts +6 -7
  63. package/dist/DocumentEditor.d.mts +3 -3
  64. package/dist/DocumentEditor.d.ts +3 -3
  65. package/dist/Drawer.d.mts +4 -5
  66. package/dist/Drawer.d.ts +4 -5
  67. package/dist/Dropdown.d.mts +7 -8
  68. package/dist/Dropdown.d.ts +7 -8
  69. package/dist/EmptyState.d.mts +1 -2
  70. package/dist/EmptyState.d.ts +1 -2
  71. package/dist/FiltersMultiSelect.d.mts +1 -2
  72. package/dist/FiltersMultiSelect.d.ts +1 -2
  73. package/dist/HeliipLoader.d.mts +2 -2
  74. package/dist/HeliipLoader.d.ts +2 -2
  75. package/dist/ImpersonationDialog.d.mts +2 -2
  76. package/dist/ImpersonationDialog.d.ts +2 -2
  77. package/dist/ImpersonationSwitcher.d.mts +2 -2
  78. package/dist/ImpersonationSwitcher.d.ts +2 -2
  79. package/dist/InfoGrid.d.mts +1 -2
  80. package/dist/InfoGrid.d.ts +1 -2
  81. package/dist/KnowledgeBase.d.mts +1 -2
  82. package/dist/KnowledgeBase.d.ts +1 -2
  83. package/dist/KpiCard.d.mts +2 -3
  84. package/dist/KpiCard.d.ts +2 -3
  85. package/dist/LanguageSwitcher.d.mts +2 -2
  86. package/dist/LanguageSwitcher.d.ts +2 -2
  87. package/dist/LicenseStatus.d.mts +1 -2
  88. package/dist/LicenseStatus.d.ts +1 -2
  89. package/dist/Link.d.mts +1 -2
  90. package/dist/Link.d.ts +1 -2
  91. package/dist/Login.d.mts +1 -2
  92. package/dist/Login.d.ts +1 -2
  93. package/dist/LoginCarousel.d.mts +2 -3
  94. package/dist/LoginCarousel.d.ts +2 -3
  95. package/dist/LoginGallery.d.mts +2 -3
  96. package/dist/LoginGallery.d.ts +2 -3
  97. package/dist/LoginTools.d.mts +1 -2
  98. package/dist/LoginTools.d.ts +1 -2
  99. package/dist/Map.d.mts +4 -5
  100. package/dist/Map.d.ts +4 -5
  101. package/dist/MarkdownEditor.d.mts +2 -2
  102. package/dist/MarkdownEditor.d.ts +2 -2
  103. package/dist/MediaCard.d.mts +2 -2
  104. package/dist/MediaCard.d.ts +2 -2
  105. package/dist/MediaLibraryLayout.d.mts +89 -0
  106. package/dist/MediaLibraryLayout.d.ts +89 -0
  107. package/dist/MediaLibraryLayout.js +369 -0
  108. package/dist/MediaLibraryLayout.mjs +348 -0
  109. package/dist/MediaSelector.d.mts +2 -2
  110. package/dist/MediaSelector.d.ts +2 -2
  111. package/dist/MediaTile.d.mts +2 -2
  112. package/dist/MediaTile.d.ts +2 -2
  113. package/dist/Money.d.mts +2 -2
  114. package/dist/Money.d.ts +2 -2
  115. package/dist/MotionProvider.d.mts +1 -2
  116. package/dist/MotionProvider.d.ts +1 -2
  117. package/dist/MultiComboSelect.d.mts +2 -3
  118. package/dist/MultiComboSelect.d.ts +2 -3
  119. package/dist/NotificationsCenter.d.mts +1 -2
  120. package/dist/NotificationsCenter.d.ts +1 -2
  121. package/dist/Numeric.d.mts +2 -2
  122. package/dist/Numeric.d.ts +2 -2
  123. package/dist/OmniSearch.d.mts +2 -3
  124. package/dist/OmniSearch.d.ts +2 -3
  125. package/dist/OrderButton.d.mts +2 -2
  126. package/dist/OrderButton.d.ts +2 -2
  127. package/dist/PageScaffold.d.mts +1 -2
  128. package/dist/PageScaffold.d.ts +1 -2
  129. package/dist/PageScaffold.js +1 -1
  130. package/dist/PageScaffold.mjs +1 -1
  131. package/dist/PageTransition.d.mts +1 -2
  132. package/dist/PageTransition.d.ts +1 -2
  133. package/dist/PageTransition.js +33 -27
  134. package/dist/PageTransition.mjs +33 -27
  135. package/dist/Pagination.d.mts +2 -2
  136. package/dist/Pagination.d.ts +2 -2
  137. package/dist/PasswordField.d.mts +1 -2
  138. package/dist/PasswordField.d.ts +1 -2
  139. package/dist/ProductCatalog.d.mts +2 -3
  140. package/dist/ProductCatalog.d.ts +2 -3
  141. package/dist/PromotionsCatalog.d.mts +2 -3
  142. package/dist/PromotionsCatalog.d.ts +2 -3
  143. package/dist/QrCode.d.mts +2 -2
  144. package/dist/QrCode.d.ts +2 -2
  145. package/dist/QuickActionsDock.d.mts +26 -0
  146. package/dist/QuickActionsDock.d.ts +26 -0
  147. package/dist/QuickActionsDock.js +99 -0
  148. package/dist/QuickActionsDock.mjs +79 -0
  149. package/dist/QuoteEditor.d.mts +2 -2
  150. package/dist/QuoteEditor.d.ts +2 -2
  151. package/dist/RechartsBarCard.d.mts +1 -2
  152. package/dist/RechartsBarCard.d.ts +1 -2
  153. package/dist/RechartsDonutCard.d.mts +1 -2
  154. package/dist/RechartsDonutCard.d.ts +1 -2
  155. package/dist/RechartsTimeSeriesCard.d.mts +1 -2
  156. package/dist/RechartsTimeSeriesCard.d.ts +1 -2
  157. package/dist/ReviewHistory.d.mts +3 -3
  158. package/dist/ReviewHistory.d.ts +3 -3
  159. package/dist/Reviews.d.mts +1 -2
  160. package/dist/Reviews.d.ts +1 -2
  161. package/dist/SearchInput.d.mts +2 -2
  162. package/dist/SearchInput.d.ts +2 -2
  163. package/dist/SegmentedTabs.d.mts +1 -2
  164. package/dist/SegmentedTabs.d.ts +1 -2
  165. package/dist/Select.d.mts +2 -2
  166. package/dist/Select.d.ts +2 -2
  167. package/dist/ShareAccess.d.mts +1 -2
  168. package/dist/ShareAccess.d.ts +1 -2
  169. package/dist/Sidebar.d.mts +3 -2
  170. package/dist/Sidebar.d.ts +3 -2
  171. package/dist/Sidebar.js +590 -377
  172. package/dist/Sidebar.mjs +590 -377
  173. package/dist/StatCard.d.mts +1 -2
  174. package/dist/StatCard.d.ts +1 -2
  175. package/dist/Steps.d.mts +3 -3
  176. package/dist/Steps.d.ts +3 -3
  177. package/dist/StorageUsage.d.mts +1 -2
  178. package/dist/StorageUsage.d.ts +1 -2
  179. package/dist/SupportChatWidget.d.mts +128 -0
  180. package/dist/SupportChatWidget.d.ts +128 -0
  181. package/dist/SupportChatWidget.js +696 -0
  182. package/dist/SupportChatWidget.mjs +678 -0
  183. package/dist/Table.d.mts +4 -5
  184. package/dist/Table.d.ts +4 -5
  185. package/dist/TableRecordButton.d.mts +1 -2
  186. package/dist/TableRecordButton.d.ts +1 -2
  187. package/dist/TimeAgo.d.mts +2 -2
  188. package/dist/TimeAgo.d.ts +2 -2
  189. package/dist/TimePanel.d.mts +1 -2
  190. package/dist/TimePanel.d.ts +1 -2
  191. package/dist/TimeRangeField.d.mts +2 -2
  192. package/dist/TimeRangeField.d.ts +2 -2
  193. package/dist/Toast.d.mts +1 -2
  194. package/dist/Toast.d.ts +1 -2
  195. package/dist/Tooltip.d.mts +1 -2
  196. package/dist/Tooltip.d.ts +1 -2
  197. package/dist/UploadCard.d.mts +1 -2
  198. package/dist/UploadCard.d.ts +1 -2
  199. package/dist/WordEditor.d.mts +3 -3
  200. package/dist/WordEditor.d.ts +3 -3
  201. package/dist/WorkflowDiagram.d.mts +1 -2
  202. package/dist/WorkflowDiagram.d.ts +1 -2
  203. package/dist/{animations-CHrNeawW.d.mts → animations-Di5tQRLw.d.mts} +2 -2
  204. package/dist/{animations-CHrNeawW.d.ts → animations-Di5tQRLw.d.ts} +2 -2
  205. package/dist/animations.d.mts +1 -1
  206. package/dist/animations.d.ts +1 -1
  207. package/dist/charts.d.mts +2 -1
  208. package/dist/charts.d.ts +2 -1
  209. package/dist/charts.js +6 -0
  210. package/dist/charts.mjs +6 -2
  211. package/dist/i18n.d.mts +1 -2
  212. package/dist/i18n.d.ts +1 -2
  213. package/dist/iconos/WorkflowEdgesSvg.d.mts +1 -2
  214. package/dist/iconos/WorkflowEdgesSvg.d.ts +1 -2
  215. package/dist/iconos/index.d.mts +1546 -1547
  216. package/dist/iconos/index.d.ts +1546 -1547
  217. package/dist/iconos/regular-icons.js +2 -2
  218. package/dist/iconos/regular-icons.mjs +2 -2
  219. package/dist/index.d.mts +11 -4
  220. package/dist/index.d.ts +11 -4
  221. package/dist/index.js +30 -0
  222. package/dist/index.mjs +167 -148
  223. package/dist/internal/AutoSize.d.mts +1 -2
  224. package/dist/internal/AutoSize.d.ts +1 -2
  225. package/dist/map.css +1 -1
  226. package/dist/theme/FontSizeController.d.mts +2 -2
  227. package/dist/theme/FontSizeController.d.ts +2 -2
  228. package/dist/theme/FontSizeController.js +1 -1
  229. package/dist/theme/FontSizeController.mjs +1 -1
  230. package/dist/theme/ThemeController.d.mts +2 -3
  231. package/dist/theme/ThemeController.d.ts +2 -3
  232. package/dist/theme/ThemeProvider.d.mts +1 -2
  233. package/dist/theme/ThemeProvider.d.ts +1 -2
  234. package/dist/theme/ThemeScript.d.mts +2 -2
  235. package/dist/theme/ThemeScript.d.ts +2 -2
  236. package/dist/theme/ThemeToggle.d.mts +2 -2
  237. package/dist/theme/ThemeToggle.d.ts +2 -2
  238. package/dist/theme/ThemeToggle.js +4 -4
  239. package/dist/theme/ThemeToggle.mjs +4 -4
  240. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ import React__default from 'react';
2
+ import Button from './Button.js';
3
+ import { DataPageLayoutProps, DataPageKpiTickerItem, DataPagePaginationProps } from './DataPageLayout.js';
4
+ import './DataTable.js';
5
+ import './DataTableCardFooter.js';
6
+ import './EmptyState.js';
7
+ import './PageScaffold.js';
8
+ import './Badge.js';
9
+ import './Breadcrumb.js';
10
+ import './FiltersMultiSelect.js';
11
+ import './CheckboxPillsGroup.js';
12
+
13
+ type MediaLibraryBaseItem = {
14
+ id: string | number;
15
+ name?: string;
16
+ url?: string | null;
17
+ meta?: React__default.ReactNode;
18
+ active?: boolean;
19
+ };
20
+ type MediaLibraryUploadItem = {
21
+ id: string | number;
22
+ name: string;
23
+ progress: number;
24
+ status?: "pending" | "uploading" | "done" | "error";
25
+ error?: React__default.ReactNode;
26
+ };
27
+ type MediaLibraryLabels = {
28
+ actions?: string;
29
+ uploadAction?: string;
30
+ clearSearch?: string;
31
+ uploadTitle?: string;
32
+ uploadSubtitle?: React__default.ReactNode;
33
+ uploadButton?: string;
34
+ uploadDropTitle?: React__default.ReactNode;
35
+ uploadDropHelp?: React__default.ReactNode;
36
+ noItemsTitle?: React__default.ReactNode;
37
+ noItemsSubtitle?: React__default.ReactNode;
38
+ noSearchResultsSubtitle?: React__default.ReactNode;
39
+ previewTitle?: React__default.ReactNode;
40
+ previewAction?: string;
41
+ copyAction?: string;
42
+ copiedAction?: string;
43
+ renameAction?: string;
44
+ replaceAction?: string;
45
+ deleteAction?: string;
46
+ brokenImage?: string;
47
+ };
48
+ type MediaLibraryUploadConfig = {
49
+ accept?: string;
50
+ multiple?: boolean;
51
+ buttonColor?: React__default.ComponentProps<typeof Button>["color"];
52
+ onFilesSelected: (files: FileList | null) => void | Promise<void>;
53
+ };
54
+ type DataLayoutBaseProps = Omit<DataPageLayoutProps<MediaLibraryBaseItem, string>, "actions" | "beforeTable" | "controlsRight" | "empty" | "emptyAction" | "emptyState" | "error" | "pagination" | "rows" | "columns" | "getRowId" | "search" | "table" | "tableContainerClassName" | "tickerItems">;
55
+ type MediaLibraryLayoutProps<Item extends MediaLibraryBaseItem = MediaLibraryBaseItem> = DataLayoutBaseProps & {
56
+ items: Item[];
57
+ totalItems?: number;
58
+ tickerItems?: DataPageKpiTickerItem[];
59
+ query?: string;
60
+ onQueryChange?: (next: string) => void;
61
+ searchId?: string;
62
+ searchPlaceholder?: string;
63
+ upload?: MediaLibraryUploadConfig | false;
64
+ uploads?: MediaLibraryUploadItem[];
65
+ pagination?: DataPagePaginationProps;
66
+ error?: React__default.ReactNode;
67
+ labels?: MediaLibraryLabels;
68
+ actionMenuMaxHeight?: number;
69
+ controlsRight?: React__default.ReactNode;
70
+ beforeGallery?: React__default.ReactNode;
71
+ afterGallery?: React__default.ReactNode;
72
+ extraActions?: React__default.ReactNode;
73
+ overlays?: React__default.ReactNode;
74
+ tableContainerClassName?: string;
75
+ gridClassName?: string;
76
+ getItemId?: (item: Item) => string | number;
77
+ getItemName?: (item: Item) => string;
78
+ getItemUrl?: (item: Item) => string | null | undefined;
79
+ getItemMeta?: (item: Item) => React__default.ReactNode;
80
+ getItemActive?: (item: Item) => boolean;
81
+ onPreview?: (item: Item) => void;
82
+ onCopyUrl?: (item: Item) => void | Promise<void>;
83
+ onRename?: (item: Item) => void;
84
+ onReplace?: (item: Item) => void;
85
+ onDelete?: (item: Item) => void;
86
+ };
87
+ declare function MediaLibraryLayout<Item extends MediaLibraryBaseItem = MediaLibraryBaseItem>({ items, totalItems, tickerItems, query, onQueryChange, searchId, searchPlaceholder, upload, uploads, pagination, error, labels: labelsProp, actionMenuMaxHeight, controlsRight, beforeGallery, afterGallery, extraActions, overlays, tableContainerClassName, gridClassName, getItemId, getItemName, getItemUrl, getItemMeta, getItemActive, onPreview, onCopyUrl, onRename, onReplace, onDelete, ...pageProps }: MediaLibraryLayoutProps<Item>): React__default.JSX.Element;
88
+
89
+ export { type MediaLibraryBaseItem, type MediaLibraryLabels, type MediaLibraryLayoutProps, type MediaLibraryUploadConfig, type MediaLibraryUploadItem, MediaLibraryLayout as default };
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var MediaLibraryLayout_exports = {};
31
+ __export(MediaLibraryLayout_exports, {
32
+ default: () => MediaLibraryLayout
33
+ });
34
+ module.exports = __toCommonJS(MediaLibraryLayout_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = __toESM(require("react"));
37
+ var import_Button = __toESM(require("./Button"));
38
+ var import_ChartCard = __toESM(require("./ChartCard"));
39
+ var import_DataPageLayout = __toESM(require("./DataPageLayout"));
40
+ var import_Dialog = __toESM(require("./Dialog"));
41
+ var import_Dropdown = __toESM(require("./Dropdown"));
42
+ var import_Input = __toESM(require("./Input"));
43
+ var import_iconos = require("./iconos");
44
+ function cx(...values) {
45
+ return values.filter(Boolean).join(" ");
46
+ }
47
+ const defaultLabels = {
48
+ actions: "Acciones",
49
+ uploadAction: "Subir archivos",
50
+ clearSearch: "Limpiar b\xFAsqueda",
51
+ uploadTitle: "Subir archivos",
52
+ uploadSubtitle: "Formatos permitidos: JPG, PNG, WEBP, GIF",
53
+ uploadButton: "Seleccionar",
54
+ uploadDropTitle: "Arrastra y suelta im\xE1genes aqu\xED o haz clic",
55
+ uploadDropHelp: "M\xE1ximo recomendado 16MB por archivo",
56
+ noItemsTitle: "No hay medios",
57
+ noItemsSubtitle: "Sube im\xE1genes para agregarlas al repositorio.",
58
+ noSearchResultsSubtitle: "Ajusta la b\xFAsqueda para ver resultados.",
59
+ previewTitle: "Vista previa",
60
+ previewAction: "Visualizar",
61
+ copyAction: "Copiar URL",
62
+ copiedAction: "Copiado",
63
+ renameAction: "Renombrar",
64
+ replaceAction: "Reemplazar",
65
+ deleteAction: "Eliminar",
66
+ brokenImage: "Imagen no disponible"
67
+ };
68
+ function MediaLibraryLayout({
69
+ items,
70
+ totalItems,
71
+ tickerItems,
72
+ query = "",
73
+ onQueryChange,
74
+ searchId = "media-library-search",
75
+ searchPlaceholder = "Buscar por nombre",
76
+ upload,
77
+ uploads = [],
78
+ pagination,
79
+ error,
80
+ labels: labelsProp,
81
+ actionMenuMaxHeight = 420,
82
+ controlsRight,
83
+ beforeGallery,
84
+ afterGallery,
85
+ extraActions,
86
+ overlays,
87
+ tableContainerClassName,
88
+ gridClassName,
89
+ getItemId = (item) => item.id,
90
+ getItemName = (item) => {
91
+ var _a;
92
+ return (_a = item.name) != null ? _a : "";
93
+ },
94
+ getItemUrl = (item) => item.url,
95
+ getItemMeta = (item) => item.meta,
96
+ getItemActive = (item) => {
97
+ var _a;
98
+ return (_a = item.active) != null ? _a : true;
99
+ },
100
+ onPreview,
101
+ onCopyUrl,
102
+ onRename,
103
+ onReplace,
104
+ onDelete,
105
+ ...pageProps
106
+ }) {
107
+ var _a, _b;
108
+ const labels = { ...defaultLabels, ...labelsProp };
109
+ const inputRef = import_react.default.useRef(null);
110
+ const [previewItem, setPreviewItem] = import_react.default.useState(null);
111
+ const [previewImageError, setPreviewImageError] = import_react.default.useState(false);
112
+ const [copiedId, setCopiedId] = import_react.default.useState(null);
113
+ import_react.default.useEffect(() => {
114
+ setPreviewImageError(false);
115
+ }, [previewItem ? getItemUrl(previewItem) : null]);
116
+ const openUpload = import_react.default.useCallback(() => {
117
+ var _a2;
118
+ (_a2 = inputRef.current) == null ? void 0 : _a2.click();
119
+ }, []);
120
+ const openPreview = import_react.default.useCallback(
121
+ (item) => {
122
+ setPreviewItem(item);
123
+ onPreview == null ? void 0 : onPreview(item);
124
+ },
125
+ [onPreview]
126
+ );
127
+ const copyUrl = import_react.default.useCallback(
128
+ async (item) => {
129
+ if (onCopyUrl) {
130
+ await onCopyUrl(item);
131
+ } else {
132
+ const url = getItemUrl(item);
133
+ if (url) await navigator.clipboard.writeText(url);
134
+ }
135
+ const id = getItemId(item);
136
+ setCopiedId(id);
137
+ window.setTimeout(() => setCopiedId((current) => current === id ? null : current), 1200);
138
+ },
139
+ [getItemId, getItemUrl, onCopyUrl]
140
+ );
141
+ const uploader = upload === false ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
142
+ import_ChartCard.default,
143
+ {
144
+ title: labels.uploadTitle,
145
+ subtitle: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: labels.uploadSubtitle }),
146
+ right: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
148
+ import_Input.default,
149
+ {
150
+ unstyled: true,
151
+ ref: inputRef,
152
+ type: "file",
153
+ accept: (_a = upload == null ? void 0 : upload.accept) != null ? _a : "image/png,image/jpeg,image/jpg,image/webp,image/gif",
154
+ multiple: (_b = upload == null ? void 0 : upload.multiple) != null ? _b : true,
155
+ className: "hidden",
156
+ onChange: (event) => {
157
+ void (upload == null ? void 0 : upload.onFilesSelected(event.target.files));
158
+ event.currentTarget.value = "";
159
+ }
160
+ }
161
+ ),
162
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.default, { color: upload == null ? void 0 : upload.buttonColor, onClick: openUpload, children: labels.uploadButton })
163
+ ] }),
164
+ children: [
165
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
166
+ "div",
167
+ {
168
+ onDragOver: (event) => {
169
+ event.preventDefault();
170
+ event.dataTransfer.dropEffect = "copy";
171
+ },
172
+ onDrop: (event) => {
173
+ event.preventDefault();
174
+ void (upload == null ? void 0 : upload.onFilesSelected(event.dataTransfer.files));
175
+ },
176
+ onClick: openUpload,
177
+ className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border border-dashed border-[color-mix(in_oklab,var(--border)_78%,transparent)] bg-[color-mix(in_oklab,var(--surface)_84%,var(--card))] p-8 text-center transition hover:border-[color-mix(in_oklab,var(--border)_92%,var(--primary))] hover:bg-[color-mix(in_oklab,var(--surface)_78%,var(--card))]",
178
+ children: [
179
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.ArrowUpFromBracketIcon, { className: "h-8 w-8 text-[color-mix(in_oklab,var(--muted)_78%,transparent)]" }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-medium", children: labels.uploadDropTitle }),
181
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-[var(--muted)]", children: labels.uploadDropHelp })
182
+ ]
183
+ }
184
+ ),
185
+ uploads.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-4 space-y-2", children: uploads.map((uploadItem) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center gap-3 rounded-xl border border-[color-mix(in_oklab,var(--border)_78%,transparent)] bg-[color-mix(in_oklab,var(--card)_74%,transparent)] p-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
186
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
187
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-sm font-medium", children: uploadItem.name }),
188
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-xs text-[var(--muted)]", children: [
189
+ uploadItem.progress,
190
+ "%"
191
+ ] })
192
+ ] }),
193
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-1 h-2 w-full overflow-hidden rounded-full bg-[color-mix(in_oklab,var(--surface)_78%,transparent)]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
194
+ "div",
195
+ {
196
+ className: "h-full bg-[color-mix(in_oklab,var(--primary)_68%,transparent)]",
197
+ style: { width: `${Math.max(0, Math.min(100, uploadItem.progress))}%` }
198
+ }
199
+ ) }),
200
+ uploadItem.status === "error" && uploadItem.error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-1 text-xs text-[var(--primary)]", children: uploadItem.error }) : null
201
+ ] }) }, uploadItem.id)) }) : null
202
+ ]
203
+ }
204
+ );
205
+ const gallery = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
206
+ beforeGallery,
207
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cx("grid grid-cols-2 gap-3 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5", gridClassName), children: items.map((item) => {
208
+ const id = getItemId(item);
209
+ const name = getItemName(item);
210
+ const url = getItemUrl(item);
211
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
212
+ MediaLibraryCard,
213
+ {
214
+ name,
215
+ url,
216
+ meta: getItemMeta(item),
217
+ active: getItemActive(item),
218
+ copied: copiedId === id,
219
+ labels,
220
+ actionMenuMaxHeight,
221
+ onPreview: () => openPreview(item),
222
+ onCopy: () => void copyUrl(item),
223
+ onRename: onRename ? () => onRename(item) : void 0,
224
+ onReplace: onReplace ? () => onReplace(item) : void 0,
225
+ onDelete: onDelete ? () => onDelete(item) : void 0
226
+ },
227
+ id
228
+ );
229
+ }) }),
230
+ afterGallery
231
+ ] });
232
+ const previewName = previewItem ? getItemName(previewItem) : labels.previewTitle;
233
+ const previewUrl = previewItem ? getItemUrl(previewItem) : null;
234
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
235
+ import_DataPageLayout.default,
236
+ {
237
+ ...pageProps,
238
+ tickerItems,
239
+ search: onQueryChange ? {
240
+ id: searchId,
241
+ value: query,
242
+ onChange: onQueryChange,
243
+ placeholder: searchPlaceholder
244
+ } : void 0,
245
+ actions: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
246
+ upload !== false ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dropdown.default, { align: "end", children: [
247
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dropdown.default.Trigger, { className: "px-3 py-2", children: [
248
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm font-medium", children: labels.actions }),
249
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.MenuPuntosVerticalIcon, {})
250
+ ] }),
251
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dropdown.default.Content, { children: [
252
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: openUpload, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.PlusIcon, { className: "h-4 w-4" }), children: labels.uploadAction }),
253
+ query.trim() && onQueryChange ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: () => onQueryChange(""), children: labels.clearSearch }) : null
254
+ ] })
255
+ ] }) : null,
256
+ extraActions
257
+ ] }),
258
+ beforeTable: uploader,
259
+ controlsRight: controlsRight != null ? controlsRight : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-xs text-[var(--muted)]", children: [
260
+ totalItems != null ? totalItems : items.length,
261
+ " elemento(s)"
262
+ ] }),
263
+ table: gallery,
264
+ tableContainerClassName: cx("px-4 pt-4 pb-28 sm:px-5 sm:pt-5 sm:pb-32", tableContainerClassName),
265
+ empty: items.length === 0,
266
+ emptyState: {
267
+ title: labels.noItemsTitle,
268
+ subtitle: query.trim() ? labels.noSearchResultsSubtitle : labels.noItemsSubtitle
269
+ },
270
+ emptyAction: upload !== false ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.default, { variant: "primary", onClick: openUpload, children: labels.uploadAction }) : null,
271
+ pagination,
272
+ error,
273
+ overlays: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
274
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dialog.default, { open: Boolean(previewItem), onClose: () => setPreviewItem(null), title: previewName, size: "full", children: [
275
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dialog.default.Header, { title: previewName, description: previewItem ? getItemMeta(previewItem) : void 0, onClose: () => setPreviewItem(null) }),
276
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dialog.default.Body, { padded: false, noScroll: true, className: "min-h-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex h-full min-h-[60vh] items-center justify-center bg-[color-mix(in_oklab,var(--surface)_88%,var(--card))] p-4", children: previewUrl && !previewImageError ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
277
+ "img",
278
+ {
279
+ src: previewUrl,
280
+ alt: String(previewName),
281
+ className: "max-h-[calc(100vh-9rem)] max-w-full rounded-2xl object-contain shadow-2xl",
282
+ onError: () => setPreviewImageError(true)
283
+ }
284
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BrokenImageFallback, { label: labels.brokenImage, size: "lg" }) }) })
285
+ ] }),
286
+ overlays
287
+ ] })
288
+ }
289
+ );
290
+ }
291
+ function MediaLibraryCard({
292
+ name,
293
+ url,
294
+ meta,
295
+ active,
296
+ copied,
297
+ labels,
298
+ actionMenuMaxHeight,
299
+ onPreview,
300
+ onCopy,
301
+ onRename,
302
+ onReplace,
303
+ onDelete
304
+ }) {
305
+ const [imageError, setImageError] = import_react.default.useState(false);
306
+ const showImage = Boolean(url) && !imageError;
307
+ import_react.default.useEffect(() => {
308
+ setImageError(false);
309
+ }, [url]);
310
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "group relative overflow-hidden rounded-2xl border border-[color-mix(in_oklab,var(--border)_78%,transparent)] bg-[color-mix(in_oklab,var(--card)_82%,transparent)] shadow-sm ring-1 ring-black/5 backdrop-blur transition hover:border-[color-mix(in_oklab,var(--border)_84%,var(--primary))]", children: [
311
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
312
+ "button",
313
+ {
314
+ type: "button",
315
+ onClick: onPreview,
316
+ className: "block aspect-square w-full bg-[color-mix(in_oklab,var(--surface)_78%,transparent)] text-left focus:outline-none focus:ring-2 focus:ring-[color-mix(in_oklab,var(--ring)_55%,transparent)]",
317
+ "aria-label": `${labels.previewAction} ${name}`,
318
+ children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
319
+ "img",
320
+ {
321
+ src: url != null ? url : void 0,
322
+ alt: name,
323
+ className: cx("h-full w-full object-cover", !active && "opacity-60"),
324
+ onError: () => setImageError(true)
325
+ }
326
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BrokenImageFallback, { label: labels.brokenImage })
327
+ }
328
+ ),
329
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-2 p-2", children: [
330
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
331
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-sm font-medium", children: name }),
332
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "truncate text-xs text-[var(--muted)]", children: meta }) : null
333
+ ] }),
334
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dropdown.default, { align: "end", children: [
335
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Trigger, { "aria-label": labels.actions, className: "px-2.5 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.MenuPuntosVerticalIcon, {}) }),
336
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Dropdown.default.Content, { "aria-label": labels.actions, maxHeight: actionMenuMaxHeight, children: [
337
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: onPreview, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.EyeIcon, { className: "h-4 w-4" }), children: labels.previewAction }),
338
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: onCopy, icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.CheckIcon, { className: "h-4 w-4 text-emerald-600" }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.CopyIcon, { className: "h-4 w-4" }), children: copied ? labels.copiedAction : labels.copyAction }),
339
+ onRename ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: onRename, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.PencilIcon, { className: "h-4 w-4" }), children: labels.renameAction }) : null,
340
+ onReplace ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { onSelect: onReplace, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.PlusIcon, { className: "h-4 w-4" }), children: labels.replaceAction }) : null,
341
+ onDelete ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
342
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Separator, {}),
343
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Dropdown.default.Item, { danger: true, onSelect: onDelete, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.TrashIcon, { className: "h-4 w-4" }), children: labels.deleteAction })
344
+ ] }) : null
345
+ ] })
346
+ ] })
347
+ ] })
348
+ ] });
349
+ }
350
+ function BrokenImageFallback({ label, size = "md" }) {
351
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
352
+ "div",
353
+ {
354
+ className: "flex h-full w-full items-center justify-center bg-[color-mix(in_oklab,var(--surface)_84%,var(--card))]",
355
+ "aria-label": label,
356
+ role: "img",
357
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
358
+ "span",
359
+ {
360
+ className: cx(
361
+ "flex items-center justify-center rounded-2xl border border-[color-mix(in_oklab,var(--border)_86%,transparent)] bg-[var(--card)] text-[color-mix(in_oklab,var(--primary)_54%,var(--muted))] shadow-sm",
362
+ size === "lg" ? "h-40 w-40" : "h-16 w-16"
363
+ ),
364
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.ImageBrokenIcon, { className: size === "lg" ? "h-14 w-14" : "h-8 w-8" })
365
+ }
366
+ )
367
+ }
368
+ );
369
+ }