@moontra/moonui-pro 2.25.7 → 2.25.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -3
- package/dist/index.d.ts +12 -1
- package/dist/index.global.js +141 -133
- package/dist/index.global.js.map +1 -1
- package/dist/index.mjs +470 -3
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { twMerge } from 'tailwind-merge';
|
|
|
4
4
|
import * as t from 'react';
|
|
5
5
|
import t__default, { useState, useMemo, useCallback, useRef, useEffect, forwardRef, createContext, useContext, useLayoutEffect, useDebugValue, Component } from 'react';
|
|
6
6
|
import * as AccordionPrimitive2 from '@radix-ui/react-accordion';
|
|
7
|
-
import { Loader2, Play, ExternalLink, ChevronDown, Info, AlertCircle, AlertTriangle, Check, X, MoreHorizontal, Minus, Clock, ChevronUp, Search, Mic, MicOff, Settings, RefreshCw, Zap, ChevronRight, Crown, Circle, ChevronLeft, Plus, Lock, Sparkles, ZoomOut, ZoomIn, Pause, VolumeX, Volume2, Download, Maximize2, Filter, Image as Image$1, Video, RotateCw, Minimize2, BarChart3, Menu, Bell, CheckCheck, CheckCircle, Palette, User, Settings2, LogOut, Edit3, LayoutGrid, Upload, Share2, Save, Phone, Globe, Eye, CheckCircle2, RotateCcw, Copy, Share, Trash2, CreditCard, XCircle, HelpCircle, Bold as Bold$1, Italic as Italic$1, Underline as Underline$1, Strikethrough, AlignLeft, AlignCenter, AlignRight, AlignJustify, List, ListOrdered, Quote, Code as Code$1, Link as Link$1, Undo, Redo, Edit, GripVertical, Type, Heading1, Heading2, Heading3, CheckSquare, Highlighter, Link2, Table as Table$1, Wand2, Maximize, FileText, Briefcase, MessageSquare, Heart, GraduationCap, Languages, Lightbulb, MoreVertical, TrendingUp, Activity, BellOff, Target, ArrowUpRight, ArrowDownRight, CalendarIcon, MapPin, Navigation, ArrowUp, ArrowDown, ArrowUpDown, Calendar as Calendar$1, DollarSign, Users, Map as Map$1, Music, Archive, File, FileSpreadsheet, FileJson, FileDown, ChevronsLeft, ChevronsRight, Star, Shield, Award, Gem, Flame, Repeat, Move, EyeOff, Timer, Square, Cpu, GitBranch, ArrowRight, Trash, MessageCircle, Paperclip, Printer, TrendingDown, Grip, Unlock, Github, Server, Monitor, MemoryStick, HardDrive, Network, Columns, Pin, Sun, Moon, Send, Tag, Flag, Trophy, GitFork, Package } from 'lucide-react';
|
|
7
|
+
import { Loader2, Play, ExternalLink, ChevronDown, Info, AlertCircle, AlertTriangle, Check, X, MoreHorizontal, Minus, Clock, ChevronUp, Search, Mic, MicOff, Settings, RefreshCw, Zap, ChevronRight, Crown, Circle, ChevronLeft, Plus, Lock, Sparkles, ZoomOut, ZoomIn, Pause, VolumeX, Volume2, Download, Maximize2, Filter, Image as Image$1, Video, RotateCw, Minimize2, BarChart3, Menu, Bell, CheckCheck, CheckCircle, Palette, User, Settings2, LogOut, Edit3, LayoutGrid, Upload, Share2, Save, Phone, Globe, Eye, CheckCircle2, RotateCcw, Copy, Share, Trash2, CreditCard, XCircle, HelpCircle, Bold as Bold$1, Italic as Italic$1, Underline as Underline$1, Strikethrough, AlignLeft, AlignCenter, AlignRight, AlignJustify, List, ListOrdered, Quote, Code as Code$1, Link as Link$1, Undo, Redo, Edit, GripVertical, Type, Heading1, Heading2, Heading3, CheckSquare, Highlighter, Link2, Table as Table$1, Wand2, Maximize, FileText, Briefcase, MessageSquare, Heart, GraduationCap, Languages, Lightbulb, MoreVertical, TrendingUp, Activity, BellOff, Target, ArrowUpRight, ArrowDownRight, CalendarIcon, MapPin, Navigation, ArrowUp, ArrowDown, ArrowUpDown, Calendar as Calendar$1, DollarSign, Users, Map as Map$1, Music, Archive, File, FileSpreadsheet, FileJson, FileDown, ChevronsLeft, ChevronsRight, Star, Shield, Award, Gem, Flame, Repeat, Move, EyeOff, Timer, Square, Cpu, GitBranch, ArrowRight, Trash, MessageCircle, Paperclip, Printer, TrendingDown, Grip, Unlock, Github, Server, Monitor, MemoryStick, HardDrive, Network, Columns, PlusCircle, Pin, Sun, Moon, Send, Tag, Flag, Trophy, GitFork, Package } from 'lucide-react';
|
|
8
8
|
import { cva } from 'class-variance-authority';
|
|
9
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
10
|
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
@@ -73197,8 +73197,19 @@ function FilterConditionRow({
|
|
|
73197
73197
|
const selectedColumn = columns.find((col) => col.id === filter.column);
|
|
73198
73198
|
const columnDef = selectedColumn?.columnDef;
|
|
73199
73199
|
const columnType = columnDef?.meta?.filterType || "string";
|
|
73200
|
+
const filterOptions = columnDef?.meta?.filterOptions;
|
|
73201
|
+
columnDef?.meta?.filterValueAccessor;
|
|
73200
73202
|
const availableOperators = getOperatorsForColumnType(columnType);
|
|
73201
73203
|
const needsValue = filter.operator !== "isNull" && filter.operator !== "isNotNull";
|
|
73204
|
+
const needsMultiValue = filter.operator === "in" || filter.operator === "notIn";
|
|
73205
|
+
const enumOptions = t__default.useMemo(() => {
|
|
73206
|
+
if (columnType !== "select" && !filterOptions)
|
|
73207
|
+
return null;
|
|
73208
|
+
if (filterOptions) {
|
|
73209
|
+
return filterOptions;
|
|
73210
|
+
}
|
|
73211
|
+
return null;
|
|
73212
|
+
}, [columnType, filterOptions]);
|
|
73202
73213
|
return /* @__PURE__ */ jsxs("div", { className: "space-y-2 p-3 border rounded-lg bg-muted/30", children: [
|
|
73203
73214
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
73204
73215
|
/* @__PURE__ */ jsxs(
|
|
@@ -73251,6 +73262,50 @@ function FilterConditionRow({
|
|
|
73251
73262
|
] })
|
|
73252
73263
|
]
|
|
73253
73264
|
}
|
|
73265
|
+
) : (columnType === "select" || enumOptions) && !needsMultiValue ? (
|
|
73266
|
+
// Single select dropdown for enum values
|
|
73267
|
+
/* @__PURE__ */ jsxs(
|
|
73268
|
+
MoonUISelectPro,
|
|
73269
|
+
{
|
|
73270
|
+
value: filter.value || "",
|
|
73271
|
+
onValueChange: (value) => onUpdate({ value }),
|
|
73272
|
+
children: [
|
|
73273
|
+
/* @__PURE__ */ jsx(MoonUISelectTriggerPro, { children: /* @__PURE__ */ jsx(MoonUISelectValuePro, { placeholder: "Select value..." }) }),
|
|
73274
|
+
/* @__PURE__ */ jsx(MoonUISelectContentPro, { style: { zIndex: 1e4 }, children: enumOptions?.map((option) => /* @__PURE__ */ jsx(MoonUISelectItemPro, { value: option, children: option }, option)) })
|
|
73275
|
+
]
|
|
73276
|
+
}
|
|
73277
|
+
)
|
|
73278
|
+
) : (columnType === "select" || enumOptions) && needsMultiValue ? (
|
|
73279
|
+
// Multi-select for 'in' and 'notIn' operators
|
|
73280
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
73281
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "Select multiple values:" }),
|
|
73282
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-1 max-h-32 overflow-y-auto border rounded-md p-2", children: enumOptions?.map((option) => {
|
|
73283
|
+
const values = Array.isArray(filter.value) ? filter.value : [];
|
|
73284
|
+
const isSelected = values.includes(option);
|
|
73285
|
+
return /* @__PURE__ */ jsxs(
|
|
73286
|
+
"label",
|
|
73287
|
+
{
|
|
73288
|
+
className: "flex items-center gap-2 cursor-pointer hover:bg-muted/50 p-1 rounded",
|
|
73289
|
+
children: [
|
|
73290
|
+
/* @__PURE__ */ jsx(
|
|
73291
|
+
"input",
|
|
73292
|
+
{
|
|
73293
|
+
type: "checkbox",
|
|
73294
|
+
checked: isSelected,
|
|
73295
|
+
onChange: (e) => {
|
|
73296
|
+
const newValues = e.target.checked ? [...values, option] : values.filter((v) => v !== option);
|
|
73297
|
+
onUpdate({ value: newValues });
|
|
73298
|
+
},
|
|
73299
|
+
className: "rounded border-gray-300"
|
|
73300
|
+
}
|
|
73301
|
+
),
|
|
73302
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm", children: option })
|
|
73303
|
+
]
|
|
73304
|
+
},
|
|
73305
|
+
option
|
|
73306
|
+
);
|
|
73307
|
+
}) })
|
|
73308
|
+
] })
|
|
73254
73309
|
) : columnType === "number" ? /* @__PURE__ */ jsx(
|
|
73255
73310
|
MoonUIInputPro,
|
|
73256
73311
|
{
|
|
@@ -73259,6 +73314,16 @@ function FilterConditionRow({
|
|
|
73259
73314
|
onChange: (e) => onUpdate({ value: e.target.value }),
|
|
73260
73315
|
placeholder: "Enter value..."
|
|
73261
73316
|
}
|
|
73317
|
+
) : needsMultiValue ? (
|
|
73318
|
+
// Text input for comma-separated values
|
|
73319
|
+
/* @__PURE__ */ jsx(
|
|
73320
|
+
MoonUIInputPro,
|
|
73321
|
+
{
|
|
73322
|
+
value: Array.isArray(filter.value) ? filter.value.join(", ") : filter.value || "",
|
|
73323
|
+
onChange: (e) => onUpdate({ value: e.target.value }),
|
|
73324
|
+
placeholder: "Enter values separated by comma..."
|
|
73325
|
+
}
|
|
73326
|
+
)
|
|
73262
73327
|
) : /* @__PURE__ */ jsx(
|
|
73263
73328
|
MoonUIInputPro,
|
|
73264
73329
|
{
|
|
@@ -73269,6 +73334,366 @@ function FilterConditionRow({
|
|
|
73269
73334
|
) })
|
|
73270
73335
|
] });
|
|
73271
73336
|
}
|
|
73337
|
+
function DataTableQuickFilter({
|
|
73338
|
+
table,
|
|
73339
|
+
filter,
|
|
73340
|
+
data
|
|
73341
|
+
}) {
|
|
73342
|
+
const column = table.getColumn(filter.column);
|
|
73343
|
+
if (!column) {
|
|
73344
|
+
return null;
|
|
73345
|
+
}
|
|
73346
|
+
const columnDef = column.columnDef;
|
|
73347
|
+
const filterValueAccessor = columnDef?.meta?.filterValueAccessor;
|
|
73348
|
+
const filterOptions = columnDef?.meta?.filterOptions;
|
|
73349
|
+
const getFilterValue = (row) => {
|
|
73350
|
+
if (filterValueAccessor) {
|
|
73351
|
+
return filterValueAccessor(row);
|
|
73352
|
+
}
|
|
73353
|
+
const value = row[filter.column];
|
|
73354
|
+
return value;
|
|
73355
|
+
};
|
|
73356
|
+
const availableOptions = useMemo(() => {
|
|
73357
|
+
if (filter.options && filter.options !== "auto") {
|
|
73358
|
+
return filter.options;
|
|
73359
|
+
}
|
|
73360
|
+
if (filterOptions) {
|
|
73361
|
+
return filterOptions;
|
|
73362
|
+
}
|
|
73363
|
+
const uniqueValues = /* @__PURE__ */ new Set();
|
|
73364
|
+
data.forEach((row) => {
|
|
73365
|
+
const value = getFilterValue(row);
|
|
73366
|
+
if (value != null && value !== "") {
|
|
73367
|
+
uniqueValues.add(String(value));
|
|
73368
|
+
}
|
|
73369
|
+
});
|
|
73370
|
+
return Array.from(uniqueValues).sort().slice(0, 50);
|
|
73371
|
+
}, [data, filter.options, filterOptions]);
|
|
73372
|
+
const optionCounts = useMemo(() => {
|
|
73373
|
+
if (!filter.showCounts)
|
|
73374
|
+
return {};
|
|
73375
|
+
const counts = {};
|
|
73376
|
+
availableOptions.forEach((option) => {
|
|
73377
|
+
counts[option] = 0;
|
|
73378
|
+
});
|
|
73379
|
+
data.forEach((row) => {
|
|
73380
|
+
const value = getFilterValue(row);
|
|
73381
|
+
if (value != null && counts[String(value)] !== void 0) {
|
|
73382
|
+
counts[String(value)]++;
|
|
73383
|
+
}
|
|
73384
|
+
});
|
|
73385
|
+
return counts;
|
|
73386
|
+
}, [data, filter.showCounts, availableOptions]);
|
|
73387
|
+
const filterValue = column.getFilterValue();
|
|
73388
|
+
const selectedValues = useMemo(() => {
|
|
73389
|
+
if (!filterValue)
|
|
73390
|
+
return /* @__PURE__ */ new Set();
|
|
73391
|
+
if (Array.isArray(filterValue))
|
|
73392
|
+
return new Set(filterValue);
|
|
73393
|
+
return /* @__PURE__ */ new Set([String(filterValue)]);
|
|
73394
|
+
}, [filterValue]);
|
|
73395
|
+
const label = filter.label || column.id;
|
|
73396
|
+
const handleSelect = (value) => {
|
|
73397
|
+
if (filter.multi) {
|
|
73398
|
+
const newValues = new Set(selectedValues);
|
|
73399
|
+
if (newValues.has(value)) {
|
|
73400
|
+
newValues.delete(value);
|
|
73401
|
+
} else {
|
|
73402
|
+
newValues.add(value);
|
|
73403
|
+
}
|
|
73404
|
+
if (newValues.size === 0) {
|
|
73405
|
+
column.setFilterValue(void 0);
|
|
73406
|
+
} else {
|
|
73407
|
+
column.setFilterValue(Array.from(newValues));
|
|
73408
|
+
}
|
|
73409
|
+
} else {
|
|
73410
|
+
if (selectedValues.has(value)) {
|
|
73411
|
+
column.setFilterValue(void 0);
|
|
73412
|
+
} else {
|
|
73413
|
+
column.setFilterValue(value);
|
|
73414
|
+
}
|
|
73415
|
+
}
|
|
73416
|
+
};
|
|
73417
|
+
const handleClear = () => {
|
|
73418
|
+
column.setFilterValue(void 0);
|
|
73419
|
+
};
|
|
73420
|
+
return /* @__PURE__ */ jsxs(MoonUIPopoverPro, { children: [
|
|
73421
|
+
/* @__PURE__ */ jsx(MoonUIPopoverTriggerPro, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
73422
|
+
MoonUIButtonPro,
|
|
73423
|
+
{
|
|
73424
|
+
variant: "outline",
|
|
73425
|
+
size: "sm",
|
|
73426
|
+
className: cn(
|
|
73427
|
+
"h-8 border-dashed",
|
|
73428
|
+
selectedValues.size > 0 && "border-solid"
|
|
73429
|
+
),
|
|
73430
|
+
children: [
|
|
73431
|
+
label,
|
|
73432
|
+
selectedValues.size > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73433
|
+
/* @__PURE__ */ jsx("span", { className: "mx-2 h-4 w-px bg-border" }),
|
|
73434
|
+
/* @__PURE__ */ jsx(
|
|
73435
|
+
MoonUIBadgePro,
|
|
73436
|
+
{
|
|
73437
|
+
variant: "secondary",
|
|
73438
|
+
className: "rounded-sm px-1 font-normal",
|
|
73439
|
+
children: selectedValues.size
|
|
73440
|
+
}
|
|
73441
|
+
)
|
|
73442
|
+
] })
|
|
73443
|
+
]
|
|
73444
|
+
}
|
|
73445
|
+
) }),
|
|
73446
|
+
/* @__PURE__ */ jsx(MoonUIPopoverContentPro, { className: "w-[250px] p-0", align: "start", children: /* @__PURE__ */ jsxs(MoonUICommandPro, { children: [
|
|
73447
|
+
/* @__PURE__ */ jsx(MoonUICommandInputPro, { placeholder: `Search ${label.toLowerCase()}...` }),
|
|
73448
|
+
/* @__PURE__ */ jsxs(MoonUICommandListPro, { children: [
|
|
73449
|
+
/* @__PURE__ */ jsx(MoonUICommandEmptyPro, { children: "No results found." }),
|
|
73450
|
+
/* @__PURE__ */ jsx(MoonUICommandGroupPro, { children: availableOptions.map((option) => {
|
|
73451
|
+
const isSelected = selectedValues.has(option);
|
|
73452
|
+
return /* @__PURE__ */ jsxs(
|
|
73453
|
+
MoonUICommandItemPro,
|
|
73454
|
+
{
|
|
73455
|
+
onSelect: () => handleSelect(option),
|
|
73456
|
+
children: [
|
|
73457
|
+
/* @__PURE__ */ jsx(
|
|
73458
|
+
"div",
|
|
73459
|
+
{
|
|
73460
|
+
className: cn(
|
|
73461
|
+
"mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary",
|
|
73462
|
+
isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
|
|
73463
|
+
),
|
|
73464
|
+
children: /* @__PURE__ */ jsx(Check, { className: cn("h-4 w-4") })
|
|
73465
|
+
}
|
|
73466
|
+
),
|
|
73467
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: option }),
|
|
73468
|
+
filter.showCounts && optionCounts[option] !== void 0 && /* @__PURE__ */ jsx("span", { className: "ml-auto text-xs text-muted-foreground", children: optionCounts[option] })
|
|
73469
|
+
]
|
|
73470
|
+
},
|
|
73471
|
+
option
|
|
73472
|
+
);
|
|
73473
|
+
}) })
|
|
73474
|
+
] }),
|
|
73475
|
+
selectedValues.size > 0 && /* @__PURE__ */ jsx("div", { className: "border-t p-2", children: /* @__PURE__ */ jsxs(
|
|
73476
|
+
MoonUIButtonPro,
|
|
73477
|
+
{
|
|
73478
|
+
variant: "ghost",
|
|
73479
|
+
size: "sm",
|
|
73480
|
+
className: "w-full justify-center",
|
|
73481
|
+
onClick: handleClear,
|
|
73482
|
+
children: [
|
|
73483
|
+
/* @__PURE__ */ jsx(X, { className: "mr-2 h-4 w-4" }),
|
|
73484
|
+
"Clear filter"
|
|
73485
|
+
]
|
|
73486
|
+
}
|
|
73487
|
+
) })
|
|
73488
|
+
] }) })
|
|
73489
|
+
] });
|
|
73490
|
+
}
|
|
73491
|
+
function DataTableFacetedFilter({
|
|
73492
|
+
table,
|
|
73493
|
+
column: columnId,
|
|
73494
|
+
title,
|
|
73495
|
+
options = "auto",
|
|
73496
|
+
data
|
|
73497
|
+
}) {
|
|
73498
|
+
const column = table.getColumn(columnId);
|
|
73499
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
73500
|
+
if (!column) {
|
|
73501
|
+
return null;
|
|
73502
|
+
}
|
|
73503
|
+
const columnDef = column.columnDef;
|
|
73504
|
+
const filterValueAccessor = columnDef?.meta?.filterValueAccessor;
|
|
73505
|
+
const filterOptions = columnDef?.meta?.filterOptions;
|
|
73506
|
+
const getFilterValue = (row) => {
|
|
73507
|
+
if (filterValueAccessor) {
|
|
73508
|
+
return filterValueAccessor(row);
|
|
73509
|
+
}
|
|
73510
|
+
const value = row[columnId];
|
|
73511
|
+
return value;
|
|
73512
|
+
};
|
|
73513
|
+
const { availableOptions, optionCounts } = useMemo(() => {
|
|
73514
|
+
const counts = {};
|
|
73515
|
+
const uniqueValues = /* @__PURE__ */ new Set();
|
|
73516
|
+
data.forEach((row) => {
|
|
73517
|
+
const value = getFilterValue(row);
|
|
73518
|
+
if (value != null && value !== "") {
|
|
73519
|
+
const strValue = String(value);
|
|
73520
|
+
uniqueValues.add(strValue);
|
|
73521
|
+
counts[strValue] = (counts[strValue] || 0) + 1;
|
|
73522
|
+
}
|
|
73523
|
+
});
|
|
73524
|
+
let finalOptions = [];
|
|
73525
|
+
if (options !== "auto") {
|
|
73526
|
+
finalOptions = options;
|
|
73527
|
+
} else if (filterOptions) {
|
|
73528
|
+
finalOptions = filterOptions.map((opt) => ({ value: opt, label: opt }));
|
|
73529
|
+
} else {
|
|
73530
|
+
finalOptions = Array.from(uniqueValues).sort().slice(0, 50).map((value) => ({ value, label: value }));
|
|
73531
|
+
}
|
|
73532
|
+
return { availableOptions: finalOptions, optionCounts: counts };
|
|
73533
|
+
}, [data, options, filterOptions]);
|
|
73534
|
+
const filterValue = column.getFilterValue();
|
|
73535
|
+
const selectedValues = new Set(filterValue || []);
|
|
73536
|
+
const filteredOptions = useMemo(() => {
|
|
73537
|
+
if (!searchQuery)
|
|
73538
|
+
return availableOptions;
|
|
73539
|
+
return availableOptions.filter((option) => {
|
|
73540
|
+
const label = option.label || option.value;
|
|
73541
|
+
return label.toLowerCase().includes(searchQuery.toLowerCase());
|
|
73542
|
+
});
|
|
73543
|
+
}, [availableOptions, searchQuery]);
|
|
73544
|
+
const displayTitle = title || columnId;
|
|
73545
|
+
const handleSelect = (value) => {
|
|
73546
|
+
const newValues = new Set(selectedValues);
|
|
73547
|
+
if (newValues.has(value)) {
|
|
73548
|
+
newValues.delete(value);
|
|
73549
|
+
} else {
|
|
73550
|
+
newValues.add(value);
|
|
73551
|
+
}
|
|
73552
|
+
if (newValues.size === 0) {
|
|
73553
|
+
column.setFilterValue(void 0);
|
|
73554
|
+
} else {
|
|
73555
|
+
column.setFilterValue(Array.from(newValues));
|
|
73556
|
+
}
|
|
73557
|
+
};
|
|
73558
|
+
const handleClearAll = () => {
|
|
73559
|
+
column.setFilterValue(void 0);
|
|
73560
|
+
setSearchQuery("");
|
|
73561
|
+
};
|
|
73562
|
+
const handleSelectAll = () => {
|
|
73563
|
+
const allValues = filteredOptions.map((opt) => opt.value);
|
|
73564
|
+
column.setFilterValue(allValues);
|
|
73565
|
+
};
|
|
73566
|
+
return /* @__PURE__ */ jsxs(MoonUIPopoverPro, { children: [
|
|
73567
|
+
/* @__PURE__ */ jsx(MoonUIPopoverTriggerPro, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
73568
|
+
MoonUIButtonPro,
|
|
73569
|
+
{
|
|
73570
|
+
variant: "outline",
|
|
73571
|
+
size: "sm",
|
|
73572
|
+
className: cn(
|
|
73573
|
+
"h-8 border-dashed",
|
|
73574
|
+
selectedValues.size > 0 && "border-solid"
|
|
73575
|
+
),
|
|
73576
|
+
children: [
|
|
73577
|
+
/* @__PURE__ */ jsx(PlusCircle, { className: "mr-2 h-4 w-4" }),
|
|
73578
|
+
displayTitle,
|
|
73579
|
+
selectedValues.size > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73580
|
+
/* @__PURE__ */ jsx(MoonUISeparatorPro, { orientation: "vertical", className: "mx-2 h-4" }),
|
|
73581
|
+
/* @__PURE__ */ jsx(
|
|
73582
|
+
MoonUIBadgePro,
|
|
73583
|
+
{
|
|
73584
|
+
variant: "secondary",
|
|
73585
|
+
className: "rounded-sm px-1 font-normal lg:hidden",
|
|
73586
|
+
children: selectedValues.size
|
|
73587
|
+
}
|
|
73588
|
+
),
|
|
73589
|
+
/* @__PURE__ */ jsx("div", { className: "hidden space-x-1 lg:flex", children: selectedValues.size > 2 ? /* @__PURE__ */ jsxs(
|
|
73590
|
+
MoonUIBadgePro,
|
|
73591
|
+
{
|
|
73592
|
+
variant: "secondary",
|
|
73593
|
+
className: "rounded-sm px-1 font-normal",
|
|
73594
|
+
children: [
|
|
73595
|
+
selectedValues.size,
|
|
73596
|
+
" selected"
|
|
73597
|
+
]
|
|
73598
|
+
}
|
|
73599
|
+
) : Array.from(selectedValues).slice(0, 2).map((value) => {
|
|
73600
|
+
const option = availableOptions.find((opt) => opt.value === value);
|
|
73601
|
+
return /* @__PURE__ */ jsx(
|
|
73602
|
+
MoonUIBadgePro,
|
|
73603
|
+
{
|
|
73604
|
+
variant: "secondary",
|
|
73605
|
+
className: "rounded-sm px-1 font-normal",
|
|
73606
|
+
children: option?.label || value
|
|
73607
|
+
},
|
|
73608
|
+
value
|
|
73609
|
+
);
|
|
73610
|
+
}) })
|
|
73611
|
+
] })
|
|
73612
|
+
]
|
|
73613
|
+
}
|
|
73614
|
+
) }),
|
|
73615
|
+
/* @__PURE__ */ jsxs(MoonUIPopoverContentPro, { className: "w-[300px] p-0", align: "start", children: [
|
|
73616
|
+
/* @__PURE__ */ jsx("div", { className: "p-3", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
73617
|
+
/* @__PURE__ */ jsx(Search, { className: "absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" }),
|
|
73618
|
+
/* @__PURE__ */ jsx(
|
|
73619
|
+
MoonUIInputPro,
|
|
73620
|
+
{
|
|
73621
|
+
placeholder: `Search ${displayTitle.toLowerCase()}...`,
|
|
73622
|
+
value: searchQuery,
|
|
73623
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
73624
|
+
className: "h-8 pl-8"
|
|
73625
|
+
}
|
|
73626
|
+
)
|
|
73627
|
+
] }) }),
|
|
73628
|
+
/* @__PURE__ */ jsx(MoonUISeparatorPro, {}),
|
|
73629
|
+
/* @__PURE__ */ jsx("div", { className: "max-h-[300px] overflow-y-auto", children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-sm text-muted-foreground", children: "No results found" }) : /* @__PURE__ */ jsx("div", { className: "p-2", children: filteredOptions.map((option) => {
|
|
73630
|
+
const isSelected = selectedValues.has(option.value);
|
|
73631
|
+
const count4 = optionCounts[option.value] || 0;
|
|
73632
|
+
return /* @__PURE__ */ jsxs(
|
|
73633
|
+
MoonUIButtonPro,
|
|
73634
|
+
{
|
|
73635
|
+
variant: "ghost",
|
|
73636
|
+
size: "sm",
|
|
73637
|
+
className: "w-full justify-start font-normal",
|
|
73638
|
+
onClick: () => handleSelect(option.value),
|
|
73639
|
+
children: [
|
|
73640
|
+
/* @__PURE__ */ jsx(
|
|
73641
|
+
"div",
|
|
73642
|
+
{
|
|
73643
|
+
className: cn(
|
|
73644
|
+
"mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary",
|
|
73645
|
+
isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
|
|
73646
|
+
),
|
|
73647
|
+
children: /* @__PURE__ */ jsx(Check, { className: cn("h-4 w-4") })
|
|
73648
|
+
}
|
|
73649
|
+
),
|
|
73650
|
+
option.icon && /* @__PURE__ */ jsx("span", { className: "mr-2", children: option.icon }),
|
|
73651
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 text-left", children: option.label || option.value }),
|
|
73652
|
+
count4 > 0 && /* @__PURE__ */ jsx("span", { className: "ml-auto text-xs text-muted-foreground", children: count4 })
|
|
73653
|
+
]
|
|
73654
|
+
},
|
|
73655
|
+
option.value
|
|
73656
|
+
);
|
|
73657
|
+
}) }) }),
|
|
73658
|
+
(selectedValues.size > 0 || filteredOptions.length > 0) && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73659
|
+
/* @__PURE__ */ jsx(MoonUISeparatorPro, {}),
|
|
73660
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-2", children: [
|
|
73661
|
+
selectedValues.size > 0 ? /* @__PURE__ */ jsxs(
|
|
73662
|
+
MoonUIButtonPro,
|
|
73663
|
+
{
|
|
73664
|
+
variant: "ghost",
|
|
73665
|
+
size: "sm",
|
|
73666
|
+
onClick: handleClearAll,
|
|
73667
|
+
className: "h-8 px-2 lg:px-3",
|
|
73668
|
+
children: [
|
|
73669
|
+
"Clear",
|
|
73670
|
+
/* @__PURE__ */ jsx(X, { className: "ml-2 h-4 w-4" })
|
|
73671
|
+
]
|
|
73672
|
+
}
|
|
73673
|
+
) : /* @__PURE__ */ jsxs(
|
|
73674
|
+
MoonUIButtonPro,
|
|
73675
|
+
{
|
|
73676
|
+
variant: "ghost",
|
|
73677
|
+
size: "sm",
|
|
73678
|
+
onClick: handleSelectAll,
|
|
73679
|
+
className: "h-8 px-2 lg:px-3",
|
|
73680
|
+
children: [
|
|
73681
|
+
"Select all",
|
|
73682
|
+
/* @__PURE__ */ jsx(Check, { className: "ml-2 h-4 w-4" })
|
|
73683
|
+
]
|
|
73684
|
+
}
|
|
73685
|
+
),
|
|
73686
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground", children: [
|
|
73687
|
+
selectedValues.size,
|
|
73688
|
+
" of ",
|
|
73689
|
+
availableOptions.length,
|
|
73690
|
+
" selected"
|
|
73691
|
+
] })
|
|
73692
|
+
] })
|
|
73693
|
+
] })
|
|
73694
|
+
] })
|
|
73695
|
+
] });
|
|
73696
|
+
}
|
|
73272
73697
|
function DataTable({
|
|
73273
73698
|
columns: originalColumns,
|
|
73274
73699
|
data,
|
|
@@ -73278,6 +73703,7 @@ function DataTable({
|
|
|
73278
73703
|
selectable = false,
|
|
73279
73704
|
pagination = true,
|
|
73280
73705
|
pageSize = 10,
|
|
73706
|
+
pageSizeOptions = [5, 10, 20, 50, 100],
|
|
73281
73707
|
className,
|
|
73282
73708
|
onRowSelect,
|
|
73283
73709
|
onExport,
|
|
@@ -73286,6 +73712,8 @@ function DataTable({
|
|
|
73286
73712
|
expandedRows: controlledExpandedRows,
|
|
73287
73713
|
onRowExpandChange,
|
|
73288
73714
|
bulkActions = [],
|
|
73715
|
+
quickFilters = [],
|
|
73716
|
+
facetedFilters = [],
|
|
73289
73717
|
features = {},
|
|
73290
73718
|
theme = {},
|
|
73291
73719
|
texts = {},
|
|
@@ -73381,12 +73809,29 @@ function DataTable({
|
|
|
73381
73809
|
globalFilterFn: "includesString",
|
|
73382
73810
|
filterFns: {
|
|
73383
73811
|
custom: (row, columnId, filterValue) => {
|
|
73812
|
+
if (Array.isArray(filterValue)) {
|
|
73813
|
+
const column = table.getColumn(columnId);
|
|
73814
|
+
const columnDef = column?.columnDef;
|
|
73815
|
+
const filterValueAccessor = columnDef?.meta?.filterValueAccessor;
|
|
73816
|
+
const cellValue = filterValueAccessor ? filterValueAccessor(row.original) : row.getValue(columnId);
|
|
73817
|
+
return filterValue.includes(String(cellValue));
|
|
73818
|
+
}
|
|
73819
|
+
if (typeof filterValue === "string" || typeof filterValue === "number" || typeof filterValue === "boolean") {
|
|
73820
|
+
const column = table.getColumn(columnId);
|
|
73821
|
+
const columnDef = column?.columnDef;
|
|
73822
|
+
const filterValueAccessor = columnDef?.meta?.filterValueAccessor;
|
|
73823
|
+
const cellValue = filterValueAccessor ? filterValueAccessor(row.original) : row.getValue(columnId);
|
|
73824
|
+
return String(cellValue) === String(filterValue);
|
|
73825
|
+
}
|
|
73384
73826
|
if (!filterValue?.custom || !filterValue?.filters)
|
|
73385
73827
|
return true;
|
|
73386
73828
|
const filters = filterValue.filters;
|
|
73387
73829
|
const matchAll = filterValue.matchAll !== void 0 ? filterValue.matchAll : true;
|
|
73388
73830
|
const allFilterResults = filters.map((filterCondition) => {
|
|
73389
|
-
const
|
|
73831
|
+
const column = table.getColumn(filterCondition.column);
|
|
73832
|
+
const columnDef = column?.columnDef;
|
|
73833
|
+
const filterValueAccessor = columnDef?.meta?.filterValueAccessor;
|
|
73834
|
+
const cellValue = filterValueAccessor ? filterValueAccessor(row.original) : row.getValue(filterCondition.column);
|
|
73390
73835
|
const filterVal = filterCondition.value;
|
|
73391
73836
|
switch (filterCondition.operator) {
|
|
73392
73837
|
case "equals":
|
|
@@ -73409,6 +73854,10 @@ function DataTable({
|
|
|
73409
73854
|
return Number(cellValue) >= Number(filterVal);
|
|
73410
73855
|
case "lessThanOrEqual":
|
|
73411
73856
|
return Number(cellValue) <= Number(filterVal);
|
|
73857
|
+
case "in":
|
|
73858
|
+
return Array.isArray(filterVal) ? filterVal.includes(cellValue) : String(filterVal).split(",").map((v) => v.trim()).includes(String(cellValue));
|
|
73859
|
+
case "notIn":
|
|
73860
|
+
return Array.isArray(filterVal) ? !filterVal.includes(cellValue) : !String(filterVal).split(",").map((v) => v.trim()).includes(String(cellValue));
|
|
73412
73861
|
case "isNull":
|
|
73413
73862
|
return cellValue == null || cellValue === "";
|
|
73414
73863
|
case "isNotNull":
|
|
@@ -73519,6 +73968,24 @@ function DataTable({
|
|
|
73519
73968
|
}
|
|
73520
73969
|
)
|
|
73521
73970
|
] }),
|
|
73971
|
+
quickFilters.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: quickFilters.map((filter, index2) => /* @__PURE__ */ jsx(
|
|
73972
|
+
DataTableQuickFilter,
|
|
73973
|
+
{
|
|
73974
|
+
table,
|
|
73975
|
+
filter,
|
|
73976
|
+
data
|
|
73977
|
+
},
|
|
73978
|
+
`quick-${filter.column}-${index2}`
|
|
73979
|
+
)) }),
|
|
73980
|
+
facetedFilters.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: facetedFilters.map((columnId) => /* @__PURE__ */ jsx(
|
|
73981
|
+
DataTableFacetedFilter,
|
|
73982
|
+
{
|
|
73983
|
+
table,
|
|
73984
|
+
column: columnId,
|
|
73985
|
+
data
|
|
73986
|
+
},
|
|
73987
|
+
`faceted-${columnId}`
|
|
73988
|
+
)) }),
|
|
73522
73989
|
filterable && /* @__PURE__ */ jsxs(
|
|
73523
73990
|
MoonUIButtonPro,
|
|
73524
73991
|
{
|
|
@@ -73650,7 +74117,7 @@ function DataTable({
|
|
|
73650
74117
|
},
|
|
73651
74118
|
className: "h-8 w-[70px] rounded border border-input bg-background px-3 py-1 text-sm",
|
|
73652
74119
|
disabled: isPaginationLoading,
|
|
73653
|
-
children:
|
|
74120
|
+
children: pageSizeOptions.map((size4) => /* @__PURE__ */ jsx("option", { value: size4, children: size4 }, size4))
|
|
73654
74121
|
}
|
|
73655
74122
|
)
|
|
73656
74123
|
] }),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moontra/moonui-pro",
|
|
3
|
-
"version": "2.25.
|
|
3
|
+
"version": "2.25.9",
|
|
4
4
|
"description": "Premium React components for MoonUI - Advanced UI library with 50+ pro components including performance, interactive, and gesture components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|