react-os-shell 3.14.2 → 3.16.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.
- package/dist/Browser-AE2WHAYI.js +7 -0
- package/dist/{Browser-XFQRBIF2.js.map → Browser-AE2WHAYI.js.map} +1 -1
- package/dist/{Calculator-V7OU5TSD.js → Calculator-H4KYTCO5.js} +4 -4
- package/dist/{Calculator-V7OU5TSD.js.map → Calculator-H4KYTCO5.js.map} +1 -1
- package/dist/{CurrencyConverter-SUSY6HRW.js → CurrencyConverter-P3EJI7TF.js} +4 -4
- package/dist/{CurrencyConverter-SUSY6HRW.js.map → CurrencyConverter-P3EJI7TF.js.map} +1 -1
- package/dist/{Documents-GEBFR23U.js → Documents-GGHKOFB4.js} +4 -4
- package/dist/{Documents-GEBFR23U.js.map → Documents-GGHKOFB4.js.map} +1 -1
- package/dist/Files-4CZWNM2F.js +12 -0
- package/dist/{Files-PZ3XY3QV.js.map → Files-4CZWNM2F.js.map} +1 -1
- package/dist/{Notepad-QLWMRFXJ.js → Notepad-5JWZD3N7.js} +4 -4
- package/dist/{Notepad-QLWMRFXJ.js.map → Notepad-5JWZD3N7.js.map} +1 -1
- package/dist/{PomodoroTimer-KCKA254T.js → PomodoroTimer-LIY2CGDW.js} +5 -5
- package/dist/{PomodoroTimer-KCKA254T.js.map → PomodoroTimer-LIY2CGDW.js.map} +1 -1
- package/dist/Preview-HERAKHAA.js +8 -0
- package/dist/{Preview-XSENQ2JX.js.map → Preview-HERAKHAA.js.map} +1 -1
- package/dist/Spreadsheet-QPR7ILT3.js +7 -0
- package/dist/{Spreadsheet-VE2FEXFK.js.map → Spreadsheet-QPR7ILT3.js.map} +1 -1
- package/dist/{Stock-YRQMQXTG.js → Stock-JGDOQ5EN.js} +4 -4
- package/dist/{Stock-YRQMQXTG.js.map → Stock-JGDOQ5EN.js.map} +1 -1
- package/dist/{Weather-RWEAJS36.js → Weather-6TODHHAE.js} +4 -4
- package/dist/{Weather-RWEAJS36.js.map → Weather-6TODHHAE.js.map} +1 -1
- package/dist/{WorldClock-E6MSOW5A.js → WorldClock-UOIFY5IB.js} +4 -4
- package/dist/{WorldClock-E6MSOW5A.js.map → WorldClock-UOIFY5IB.js.map} +1 -1
- package/dist/apps/index.js +19 -19
- package/dist/{chunk-H564CUGN.js → chunk-2BGWCS3L.js} +3 -3
- package/dist/{chunk-H564CUGN.js.map → chunk-2BGWCS3L.js.map} +1 -1
- package/dist/{chunk-ZGLERMDX.js → chunk-5Z57WKMX.js} +16 -14
- package/dist/chunk-5Z57WKMX.js.map +1 -0
- package/dist/{chunk-GYAP4IBA.js → chunk-64CGRR3M.js} +4 -4
- package/dist/{chunk-GYAP4IBA.js.map → chunk-64CGRR3M.js.map} +1 -1
- package/dist/{chunk-7GSHFSWI.js → chunk-DAODUEDD.js} +4 -4
- package/dist/{chunk-7GSHFSWI.js.map → chunk-DAODUEDD.js.map} +1 -1
- package/dist/{chunk-7E7UQYFL.js → chunk-DDE3E4KL.js} +4 -4
- package/dist/{chunk-7E7UQYFL.js.map → chunk-DDE3E4KL.js.map} +1 -1
- package/dist/{chunk-FKZTCOOQ.js → chunk-MMDTMBXD.js} +4 -4
- package/dist/{chunk-FKZTCOOQ.js.map → chunk-MMDTMBXD.js.map} +1 -1
- package/dist/{chunk-KHKPAF5R.js → chunk-OLOSK32J.js} +3 -3
- package/dist/{chunk-KHKPAF5R.js.map → chunk-OLOSK32J.js.map} +1 -1
- package/dist/{chunk-6GVIP3TJ.js → chunk-POTG7N3E.js} +4 -4
- package/dist/{chunk-6GVIP3TJ.js.map → chunk-POTG7N3E.js.map} +1 -1
- package/dist/{chunk-ATLWPGXH.js → chunk-WCFUBMAG.js} +5 -5
- package/dist/{chunk-ATLWPGXH.js.map → chunk-WCFUBMAG.js.map} +1 -1
- package/dist/index.d.ts +27 -4
- package/dist/index.js +143 -56
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Browser-XFQRBIF2.js +0 -7
- package/dist/Files-PZ3XY3QV.js +0 -12
- package/dist/Preview-XSENQ2JX.js +0 -8
- package/dist/Spreadsheet-VE2FEXFK.js +0 -7
- package/dist/chunk-ZGLERMDX.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { subscribePomo, getPomoSnapshot } from './chunk-
|
|
2
|
-
export { setShellTodoProvider } from './chunk-
|
|
3
|
-
import { PREVIEW_OPENED_EVENT, publishDesktopFolders, requestFilesTrashView, FolderGlyph, openPreviewFile, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-
|
|
4
|
-
export { Breadcrumbs } from './chunk-
|
|
1
|
+
import { subscribePomo, getPomoSnapshot } from './chunk-OLOSK32J.js';
|
|
2
|
+
export { setShellTodoProvider } from './chunk-OLOSK32J.js';
|
|
3
|
+
import { PREVIEW_OPENED_EVENT, publishDesktopFolders, requestFilesTrashView, FolderGlyph, openPreviewFile, requestFilesDesktopFolderView, FileIconTile, hashGradient } from './chunk-64CGRR3M.js';
|
|
4
|
+
export { Breadcrumbs } from './chunk-64CGRR3M.js';
|
|
5
5
|
import { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
6
6
|
export { SidebarLayout } from './chunk-YG45DAUT.js';
|
|
7
7
|
import { playNotification, playStartup, soundsEnabled, getSoundConfig, SOUND_PACK_KEYS, SOUND_PACKS, SOUND_TYPES, SOUND_TYPE_LABELS, setSoundForType, previewSound, setAllSounds, playLogout } from './chunk-D7PYW2QS.js';
|
|
8
|
-
import { setPdfPreview } from './chunk-
|
|
9
|
-
export { ImageAnnotator_default as ImageAnnotator } from './chunk-
|
|
8
|
+
import { setPdfPreview } from './chunk-POTG7N3E.js';
|
|
9
|
+
export { ImageAnnotator_default as ImageAnnotator } from './chunk-POTG7N3E.js';
|
|
10
10
|
import { toast_default } from './chunk-VENYVK3L.js';
|
|
11
11
|
export { toast_default as toast } from './chunk-VENYVK3L.js';
|
|
12
|
-
import { EditableGrid } from './chunk-
|
|
13
|
-
export { EditableGrid } from './chunk-
|
|
12
|
+
import { EditableGrid } from './chunk-MMDTMBXD.js';
|
|
13
|
+
export { EditableGrid } from './chunk-MMDTMBXD.js';
|
|
14
14
|
import { useAuth, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
15
15
|
export { ShellAuthProvider, setShellAuthBridge, useShellAuth } from './chunk-ADJ3CERD.js';
|
|
16
|
-
import { APP_VERSION, VERSION } from './chunk-
|
|
17
|
-
export { VERSION } from './chunk-
|
|
18
|
-
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, CancelButton, setWindowPosition, ThumbCard, activateModal } from './chunk-
|
|
19
|
-
export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-
|
|
16
|
+
import { APP_VERSION, VERSION } from './chunk-DAODUEDD.js';
|
|
17
|
+
export { VERSION } from './chunk-DAODUEDD.js';
|
|
18
|
+
import { useWindowManager, PopupMenu, PopupMenuLabel, PopupMenuDivider, PopupMenuItem, WINDOW_REGISTRY, isPageEntry, Modal, useShellPrefs, useIsMobile, ModalActions, useModalActive, client_default, LoadingSpinner, CancelButton, setWindowPosition, ThumbCard, activateModal } from './chunk-5Z57WKMX.js';
|
|
19
|
+
export { CancelButton, CopyButton, DocFavStar, Modal, ModalActions, PopupMenu, PopupMenuDivider, PopupMenuItem, PopupMenuLabel, ShellPrefsProvider, WindowCrashedFallback, WindowErrorBoundary, WindowManagerProvider, WindowTitle, commitExposeHighlight, exitExposeMode, getActiveWindowRoute, getExposeHighlight, getWindowPosition, isEntityEntry, isPageEntry, registerModalEscapeInterceptor, setExposeHighlight, setShellApiClient, setShellWindowRegistry, setWindowDefaultPosition, setWindowPosition, subscribeExposeHighlight, toggleExposeMode, useLocalStoragePrefs, useModalActive, useShellPrefs, useWidgetSettings, useWindowManager, useWindowMenuItem, useWindowTitle } from './chunk-5Z57WKMX.js';
|
|
20
20
|
export { ConfirmProvider, confirm, confirmDestructive, prompt } from './chunk-UBN4IUDE.js';
|
|
21
21
|
import { glassStyle, startMenuCategories, navSections, isSection, GLASS_INPUT_BG, navIcons, sectionIcons } from './chunk-ZF6AYO4G.js';
|
|
22
22
|
export { GLASS_DIVIDER, GLASS_INPUT_BG, glassStyle, setShellNavIcons } from './chunk-ZF6AYO4G.js';
|
|
@@ -2781,6 +2781,7 @@ function StartMenu({
|
|
|
2781
2781
|
taskbarPosition,
|
|
2782
2782
|
taskbarH,
|
|
2783
2783
|
taskbarW = 0,
|
|
2784
|
+
taskbarGap = 4,
|
|
2784
2785
|
size = "medium",
|
|
2785
2786
|
navSections: navSections2 = navSections,
|
|
2786
2787
|
navIcons: navIcons2 = navIcons,
|
|
@@ -2949,7 +2950,7 @@ function StartMenu({
|
|
|
2949
2950
|
}),
|
|
2950
2951
|
...footerItems.flatMap((item) => matchTree(item, ""))
|
|
2951
2952
|
] : [];
|
|
2952
|
-
const posStyle = taskbarPosition === "top" ? { top: taskbarH +
|
|
2953
|
+
const posStyle = taskbarPosition === "top" ? { top: taskbarH + taskbarGap, left: 8 } : taskbarPosition === "left" ? { top: 8, left: taskbarW + taskbarGap } : taskbarPosition === "right" ? { top: 8, right: taskbarW + taskbarGap } : { bottom: taskbarH + taskbarGap, left: 8 };
|
|
2953
2954
|
const iconEl = (path) => {
|
|
2954
2955
|
const icon = navIcons2[path];
|
|
2955
2956
|
if (icon && isValidElement(icon)) return cloneElement(icon, { className: "h-4 w-4" });
|
|
@@ -2964,8 +2965,13 @@ function StartMenu({
|
|
|
2964
2965
|
const hoveredData = hoveredVirtual ? null : hoveredSection ? [...erpSections, ...systemSections, ...footerSections].find((s) => s.label === hoveredSection) : null;
|
|
2965
2966
|
const flyoutItems = hoveredVirtual ? hoveredVirtual.items : hoveredData ? getVisibleItems(hoveredData) : [];
|
|
2966
2967
|
const menuDensity = typeof document !== "undefined" ? getComputedStyle(document.documentElement).getPropertyValue("--menu-density")?.trim() || "normal" : "normal";
|
|
2967
|
-
const
|
|
2968
|
-
const
|
|
2968
|
+
const density = menuDensity === "tight" || menuDensity === "large" ? menuDensity : "normal";
|
|
2969
|
+
const sizeConfigByDensity = {
|
|
2970
|
+
tight: { small: { w: "w-52", fw: "w-44", text: "text-xs", py: "py-1", px: "px-3", mw: 208, itemH: 24 }, medium: { w: "w-56", fw: "w-48", text: "text-xs", py: "py-1", px: "px-3", mw: 224, itemH: 26 }, large: { w: "w-64", fw: "w-52", text: "text-sm", py: "py-1.5", px: "px-3", mw: 256, itemH: 30 } },
|
|
2971
|
+
normal: { small: { w: "w-56", fw: "w-48", text: "text-xs", py: "py-1.5", px: "px-3", mw: 224, itemH: 30 }, medium: { w: "w-64", fw: "w-56", text: "text-sm", py: "py-1.5", px: "px-4", mw: 256, itemH: 32 }, large: { w: "w-72", fw: "w-60", text: "text-sm", py: "py-2", px: "px-4", mw: 288, itemH: 36 } },
|
|
2972
|
+
large: { small: { w: "w-56", fw: "w-48", text: "text-xs", py: "py-2", px: "px-3", mw: 224, itemH: 32 }, medium: { w: "w-64", fw: "w-56", text: "text-sm", py: "py-2", px: "px-4", mw: 256, itemH: 36 }, large: { w: "w-72", fw: "w-60", text: "text-sm", py: "py-2", px: "px-4", mw: 288, itemH: 36 } }
|
|
2973
|
+
};
|
|
2974
|
+
const sizeConfig = sizeConfigByDensity[density][size];
|
|
2969
2975
|
const menuGlass = glassStyle();
|
|
2970
2976
|
const itemCls = `w-full flex items-center gap-2 rounded-lg ${sizeConfig.px} ${sizeConfig.py} ${sizeConfig.text}`;
|
|
2971
2977
|
const flyoutEstH = flyoutItems.length * sizeConfig.itemH + 12;
|
|
@@ -4320,9 +4326,10 @@ function Layout({
|
|
|
4320
4326
|
const taskbarSize = prefs.taskbar_size || "medium";
|
|
4321
4327
|
const desktopDblClick = prefs.desktop_dblclick || "deactivate";
|
|
4322
4328
|
const isVerticalTaskbar = taskbarPosition === "left" || taskbarPosition === "right";
|
|
4323
|
-
const taskbarH = isVerticalTaskbar ? 0 : taskbarSize === "small" ?
|
|
4329
|
+
const taskbarH = isVerticalTaskbar ? 0 : taskbarSize === "small" ? 42 : taskbarSize === "large" ? 72 : 56;
|
|
4324
4330
|
const taskbarW = isVerticalTaskbar ? taskbarSize === "small" ? 180 : taskbarSize === "large" ? 260 : 220 : 0;
|
|
4325
|
-
const
|
|
4331
|
+
const taskbarGap = taskbarSize === "small" ? 2 : taskbarSize === "large" ? 6 : 4;
|
|
4332
|
+
const taskbarHClass = taskbarSize === "small" ? "h-[42px]" : taskbarSize === "large" ? "h-[72px]" : "h-14";
|
|
4326
4333
|
const taskbarWClass = taskbarSize === "small" ? "w-[180px]" : taskbarSize === "large" ? "w-[260px]" : "w-[220px]";
|
|
4327
4334
|
const taskbarOpacity = (prefs.transparency_taskbar ?? 70) / 100;
|
|
4328
4335
|
const menuOpacity = (prefs.transparency_start_menu ?? 95) / 100;
|
|
@@ -4478,6 +4485,7 @@ function Layout({
|
|
|
4478
4485
|
taskbarPosition,
|
|
4479
4486
|
taskbarH,
|
|
4480
4487
|
taskbarW,
|
|
4488
|
+
taskbarGap,
|
|
4481
4489
|
size: prefs.start_menu_size || "medium",
|
|
4482
4490
|
navSections: navSections2,
|
|
4483
4491
|
navIcons: navIcons2,
|
|
@@ -5050,7 +5058,8 @@ function Customization({ omit, section } = {}) {
|
|
|
5050
5058
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-gray-700 w-24 shrink-0", children: "Density" }),
|
|
5051
5059
|
/* @__PURE__ */ jsx("div", { className: "flex gap-2", children: [
|
|
5052
5060
|
{ key: "tight", label: "Tight" },
|
|
5053
|
-
{ key: "normal", label: "Normal" }
|
|
5061
|
+
{ key: "normal", label: "Normal" },
|
|
5062
|
+
{ key: "large", label: "Large" }
|
|
5054
5063
|
].map((s) => /* @__PURE__ */ jsx(
|
|
5055
5064
|
"button",
|
|
5056
5065
|
{
|
|
@@ -5907,8 +5916,13 @@ function EntityList(props) {
|
|
|
5907
5916
|
footerExtra,
|
|
5908
5917
|
sentinelRef,
|
|
5909
5918
|
isFetchingNextPage,
|
|
5910
|
-
saveDefaultPerms
|
|
5919
|
+
saveDefaultPerms,
|
|
5920
|
+
exportEndpoint,
|
|
5921
|
+
exportFilename = "export.csv",
|
|
5922
|
+
contextActions
|
|
5911
5923
|
} = props;
|
|
5924
|
+
const [menu, setMenu] = useState(null);
|
|
5925
|
+
const hasMenu = !!exportEndpoint || !!contextActions;
|
|
5912
5926
|
const toggleItem = (item) => {
|
|
5913
5927
|
setSelected((prev) => {
|
|
5914
5928
|
const next = new Set(prev);
|
|
@@ -5929,6 +5943,48 @@ function EntityList(props) {
|
|
|
5929
5943
|
});
|
|
5930
5944
|
};
|
|
5931
5945
|
const focusIdx = useTableNav(items, onRowClick, toggleItem, toggleAll, selectRange);
|
|
5946
|
+
const handleRowContextMenu = (e, item) => {
|
|
5947
|
+
if (!hasMenu) return;
|
|
5948
|
+
e.preventDefault();
|
|
5949
|
+
const id = getRowId(item);
|
|
5950
|
+
if (!selected.has(id)) setSelected(/* @__PURE__ */ new Set([id]));
|
|
5951
|
+
setMenu({ x: e.clientX, y: e.clientY });
|
|
5952
|
+
};
|
|
5953
|
+
const selectedItems = items.filter((i) => selected.has(getRowId(i)));
|
|
5954
|
+
const colsParam = () => {
|
|
5955
|
+
const labelByKey = new Map(columns.map((c) => [c.key, c.label]));
|
|
5956
|
+
try {
|
|
5957
|
+
const raw = localStorage.getItem(`col-config-${tableId}`);
|
|
5958
|
+
if (raw) {
|
|
5959
|
+
const parsed = JSON.parse(raw);
|
|
5960
|
+
const cols = parsed.filter((c) => !c.hidden && c.key !== "_select" && labelByKey.has(c.key)).map((c) => `${c.key}|${labelByKey.get(c.key)}`);
|
|
5961
|
+
if (cols.length) return cols.join(",");
|
|
5962
|
+
}
|
|
5963
|
+
} catch {
|
|
5964
|
+
}
|
|
5965
|
+
return columns.filter((c) => !c.defaultHidden).map((c) => `${c.key}|${c.label}`).join(",");
|
|
5966
|
+
};
|
|
5967
|
+
const exportSelected = async () => {
|
|
5968
|
+
setMenu(null);
|
|
5969
|
+
const ids = [...selected];
|
|
5970
|
+
if (!ids.length || !exportEndpoint) return;
|
|
5971
|
+
const p = new URLSearchParams({ ids: ids.join(",") });
|
|
5972
|
+
const cols = colsParam();
|
|
5973
|
+
if (cols) p.set("cols", cols);
|
|
5974
|
+
const sep = exportEndpoint.includes("?") ? "&" : "?";
|
|
5975
|
+
try {
|
|
5976
|
+
const res = await client_default.get(`${exportEndpoint}${sep}${p}`, { responseType: "blob" });
|
|
5977
|
+
const url = window.URL.createObjectURL(new Blob([res.data], { type: "text/csv" }));
|
|
5978
|
+
const a = document.createElement("a");
|
|
5979
|
+
a.href = url;
|
|
5980
|
+
a.download = exportFilename;
|
|
5981
|
+
a.click();
|
|
5982
|
+
window.URL.revokeObjectURL(url);
|
|
5983
|
+
toast_default.success(`Exported ${ids.length} ${ids.length === 1 ? "row" : "rows"}.`);
|
|
5984
|
+
} catch {
|
|
5985
|
+
toast_default.error("CSV export failed.");
|
|
5986
|
+
}
|
|
5987
|
+
};
|
|
5932
5988
|
if (isLoading) return /* @__PURE__ */ jsx(LoadingSpinner, {});
|
|
5933
5989
|
if (items.length === 0) return /* @__PURE__ */ jsx(Fragment, { children: emptyState });
|
|
5934
5990
|
const allSelected = items.length > 0 && selected.size === items.length;
|
|
@@ -5965,44 +6021,75 @@ function EntityList(props) {
|
|
|
5965
6021
|
/* @__PURE__ */ jsx("div", { ref: sentinelRef }),
|
|
5966
6022
|
isFetchingNextPage && /* @__PURE__ */ jsx("div", { className: "text-center py-3", children: /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500", children: "Loading more..." }) })
|
|
5967
6023
|
] }) : void 0;
|
|
5968
|
-
|
|
5969
|
-
|
|
5970
|
-
{
|
|
5971
|
-
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
|
-
|
|
5980
|
-
|
|
5981
|
-
|
|
6024
|
+
const actions = menu && contextActions ? contextActions(selectedItems) : [];
|
|
6025
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col mb-1 bg-white rounded-lg shadow overflow-hidden", children: [
|
|
6026
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 min-h-0 flex flex-col", children: /* @__PURE__ */ jsx(
|
|
6027
|
+
ResizableTable,
|
|
6028
|
+
{
|
|
6029
|
+
tableId,
|
|
6030
|
+
columns: fullColumns,
|
|
6031
|
+
sort,
|
|
6032
|
+
onSort,
|
|
6033
|
+
footer,
|
|
6034
|
+
afterBody,
|
|
6035
|
+
saveDefaultPerms,
|
|
6036
|
+
children: (cols) => /* @__PURE__ */ jsx("tbody", { className: "divide-y divide-gray-100", children: items.map((item, rowIdx) => {
|
|
6037
|
+
const id = getRowId(item);
|
|
6038
|
+
return /* @__PURE__ */ jsx(
|
|
6039
|
+
"tr",
|
|
6040
|
+
{
|
|
6041
|
+
"data-row-idx": rowIdx,
|
|
6042
|
+
className: `cursor-pointer ${focusIdx === rowIdx ? "bg-blue-50 ring-1 ring-inset ring-blue-300" : selected.has(id) ? "bg-blue-50 hover:bg-blue-100" : "hover:bg-gray-50"} ${getRowClassName?.(item) ?? ""}`,
|
|
6043
|
+
onClick: () => onRowClick(item),
|
|
6044
|
+
onContextMenu: hasMenu ? (e) => handleRowContextMenu(e, item) : void 0,
|
|
6045
|
+
onMouseEnter: onRowHover ? () => onRowHover(item) : void 0,
|
|
6046
|
+
children: cols.map((col) => /* @__PURE__ */ jsx("td", { className: "px-4 py-3 whitespace-nowrap text-sm overflow-hidden", children: col.key === "_select" ? /* @__PURE__ */ jsx(
|
|
6047
|
+
"input",
|
|
6048
|
+
{
|
|
6049
|
+
type: "checkbox",
|
|
6050
|
+
checked: selected.has(id),
|
|
6051
|
+
onClick: (e) => {
|
|
6052
|
+
e.stopPropagation();
|
|
6053
|
+
toggleItem(item);
|
|
6054
|
+
},
|
|
6055
|
+
readOnly: true,
|
|
6056
|
+
className: "h-3.5 w-3.5 rounded border-gray-300 text-blue-600"
|
|
6057
|
+
}
|
|
6058
|
+
) : renderCell(item, col.key) }, col.key))
|
|
6059
|
+
},
|
|
6060
|
+
id
|
|
6061
|
+
);
|
|
6062
|
+
}) })
|
|
6063
|
+
}
|
|
6064
|
+
) }),
|
|
6065
|
+
menu && /* @__PURE__ */ jsxs(PopupMenu, { portal: true, style: { left: menu.x, top: menu.y }, onClose: () => setMenu(null), minWidth: 210, children: [
|
|
6066
|
+
/* @__PURE__ */ jsxs(PopupMenuLabel, { children: [
|
|
6067
|
+
selected.size,
|
|
6068
|
+
" selected"
|
|
6069
|
+
] }),
|
|
6070
|
+
exportEndpoint && /* @__PURE__ */ jsx(PopupMenuItem, { onClick: exportSelected, children: "Export selected to CSV" }),
|
|
6071
|
+
actions.map((a, i) => /* @__PURE__ */ jsxs("div", { children: [
|
|
6072
|
+
a.divider && /* @__PURE__ */ jsx(PopupMenuDivider, {}),
|
|
6073
|
+
/* @__PURE__ */ jsx(
|
|
6074
|
+
PopupMenuItem,
|
|
5982
6075
|
{
|
|
5983
|
-
|
|
5984
|
-
|
|
5985
|
-
onClick: () =>
|
|
5986
|
-
|
|
5987
|
-
|
|
5988
|
-
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
|
|
5993
|
-
|
|
5994
|
-
|
|
5995
|
-
|
|
5996
|
-
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6000
|
-
},
|
|
6001
|
-
id
|
|
6002
|
-
);
|
|
6003
|
-
}) })
|
|
6004
|
-
}
|
|
6005
|
-
) }) });
|
|
6076
|
+
danger: a.danger,
|
|
6077
|
+
disabled: a.disabled,
|
|
6078
|
+
onClick: () => {
|
|
6079
|
+
setMenu(null);
|
|
6080
|
+
a.onClick(selectedItems);
|
|
6081
|
+
},
|
|
6082
|
+
children: a.label
|
|
6083
|
+
}
|
|
6084
|
+
)
|
|
6085
|
+
] }, i)),
|
|
6086
|
+
/* @__PURE__ */ jsx(PopupMenuDivider, {}),
|
|
6087
|
+
/* @__PURE__ */ jsx(PopupMenuItem, { onClick: () => {
|
|
6088
|
+
setMenu(null);
|
|
6089
|
+
setSelected(/* @__PURE__ */ new Set());
|
|
6090
|
+
}, children: "Clear selection" })
|
|
6091
|
+
] })
|
|
6092
|
+
] });
|
|
6006
6093
|
}
|
|
6007
6094
|
function Kanban({
|
|
6008
6095
|
items,
|