@l3mpire/ui 2.16.2 → 2.16.4
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/USAGE.md +3 -4
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +71 -74
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +57 -60
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/USAGE.md
CHANGED
|
@@ -963,7 +963,7 @@ import {
|
|
|
963
963
|
|
|
964
964
|
**Advanced filter shortcut:** the PropertySelector footer shows an "Advanced filter · N rule(s)" item. Clicking it closes the property selector and opens the advanced popover directly in its initial empty state — where the user picks the first property inline via a "Where | [Select property ▾]" draft row. When no advanced filters exist yet, clicking this shortcut makes the AdvancedChip appear with the popover already open; closing without adding a filter removes the chip automatically.
|
|
965
965
|
|
|
966
|
-
**Dynamic options ("Me", "Unassigned", …):** enum/tags/relation properties accept a `dynamicOptions` array. Each entry is `{ value, label, description
|
|
966
|
+
**Dynamic options ("Me", "Unassigned", …):** enum/tags/relation properties accept a `dynamicOptions` array. Each entry is `{ value, label, description? }` and is rendered inline with regular options in the SingleSelect / MultiSelect dropdown. The `value` is a sentinel string stored on `FilterCondition.value` — the DS renders the `label` in the filter chip (not the raw sentinel) and the consuming app resolves it at query time (e.g. `"__me__"` → `currentUser.id`). This keeps session/business logic out of the DS while still getting a consistent visual treatment.
|
|
967
967
|
|
|
968
968
|
```tsx
|
|
969
969
|
{
|
|
@@ -979,9 +979,8 @@ import {
|
|
|
979
979
|
value: "__me__",
|
|
980
980
|
label: "Me",
|
|
981
981
|
description: "This value is dynamically applied to the current user",
|
|
982
|
-
icon: faBoltOutline,
|
|
983
982
|
},
|
|
984
|
-
{ value: "__deactivated__", label: "All deactivated and removed owners"
|
|
983
|
+
{ value: "__deactivated__", label: "All deactivated and removed owners" },
|
|
985
984
|
],
|
|
986
985
|
}
|
|
987
986
|
```
|
|
@@ -993,7 +992,7 @@ import {
|
|
|
993
992
|
| `createFilterWithDefaults(propertyId, type)` | Creates FilterCondition with default operator |
|
|
994
993
|
| `isNoValueOperator(op)` | True for is empty / is not empty / is true / is false |
|
|
995
994
|
| `getValueInputType(type, op)` | Returns the input component name for a type+operator combo |
|
|
996
|
-
| `formatFilterValue(value)` | Stringifies a `FilterValue` for display
|
|
995
|
+
| `formatFilterValue(value, dynamicOptions?)` | Stringifies a `FilterValue` for display — resolves sentinel values via `dynamicOptions` labels |
|
|
997
996
|
| `getBadgeCount(value)` | Returns `+N` count for multi-value selections, `undefined` otherwise |
|
|
998
997
|
| `createEmptyGroup()` / `isFilterGroup(node)` | Tree helpers for nested groups |
|
|
999
998
|
| `wrapInGroup(condition)` / `unwrapGroup(group)` | Convert between condition and single-child group |
|
package/dist/index.d.mts
CHANGED
|
@@ -168,6 +168,7 @@ interface AvatarProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimit
|
|
|
168
168
|
alt?: string;
|
|
169
169
|
initials?: string;
|
|
170
170
|
badge?: React.ReactNode;
|
|
171
|
+
/** `"rounded"` (circle) for people/users, `"squared"` for companies/orgs. */
|
|
171
172
|
shape?: "rounded" | "squared";
|
|
172
173
|
}
|
|
173
174
|
declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -715,16 +716,14 @@ type OperatorType = TextOperator | NumberOperator | DateOperator | EnumOperator
|
|
|
715
716
|
* (e.g. "Me", "My team", "Unassigned"). The value is a sentinel string that
|
|
716
717
|
* the consuming app resolves at query time (e.g. `__me__` → `currentUser.id`).
|
|
717
718
|
*
|
|
718
|
-
* The design system
|
|
719
|
-
*
|
|
720
|
-
* concern.
|
|
719
|
+
* The design system renders label + optional description inline with regular
|
|
720
|
+
* options. Resolving the sentinels is an app concern.
|
|
721
721
|
*/
|
|
722
722
|
interface DynamicOption {
|
|
723
723
|
/** Sentinel value stored on FilterCondition.value (e.g. "__me__"). */
|
|
724
724
|
value: string;
|
|
725
725
|
label: string;
|
|
726
726
|
description?: string;
|
|
727
|
-
icon?: _l3mpire_icons.IconDefinition;
|
|
728
727
|
}
|
|
729
728
|
interface PropertyDefinition {
|
|
730
729
|
id: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -168,6 +168,7 @@ interface AvatarProps extends React.ComponentPropsWithoutRef<typeof AvatarPrimit
|
|
|
168
168
|
alt?: string;
|
|
169
169
|
initials?: string;
|
|
170
170
|
badge?: React.ReactNode;
|
|
171
|
+
/** `"rounded"` (circle) for people/users, `"squared"` for companies/orgs. */
|
|
171
172
|
shape?: "rounded" | "squared";
|
|
172
173
|
}
|
|
173
174
|
declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -715,16 +716,14 @@ type OperatorType = TextOperator | NumberOperator | DateOperator | EnumOperator
|
|
|
715
716
|
* (e.g. "Me", "My team", "Unassigned"). The value is a sentinel string that
|
|
716
717
|
* the consuming app resolves at query time (e.g. `__me__` → `currentUser.id`).
|
|
717
718
|
*
|
|
718
|
-
* The design system
|
|
719
|
-
*
|
|
720
|
-
* concern.
|
|
719
|
+
* The design system renders label + optional description inline with regular
|
|
720
|
+
* options. Resolving the sentinels is an app concern.
|
|
721
721
|
*/
|
|
722
722
|
interface DynamicOption {
|
|
723
723
|
/** Sentinel value stored on FilterCondition.value (e.g. "__me__"). */
|
|
724
724
|
value: string;
|
|
725
725
|
label: string;
|
|
726
726
|
description?: string;
|
|
727
|
-
icon?: _l3mpire_icons.IconDefinition;
|
|
728
727
|
}
|
|
729
728
|
interface PropertyDefinition {
|
|
730
729
|
id: string;
|
package/dist/index.js
CHANGED
|
@@ -5360,7 +5360,7 @@ function getValueInputType(type, operator) {
|
|
|
5360
5360
|
return ["is any of", "is none of"].includes(operator) ? "MultiRelationPicker" : "RelationPicker";
|
|
5361
5361
|
return null;
|
|
5362
5362
|
}
|
|
5363
|
-
function formatFilterValue(value) {
|
|
5363
|
+
function formatFilterValue(value, dynamicOptions) {
|
|
5364
5364
|
if (value == null) return void 0;
|
|
5365
5365
|
if (typeof value === "boolean") return value ? "Yes" : "No";
|
|
5366
5366
|
if (value instanceof Date) {
|
|
@@ -5379,9 +5379,17 @@ function formatFilterValue(value) {
|
|
|
5379
5379
|
const fmt = (d) => d.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" });
|
|
5380
5380
|
return `${fmt(value[0])} \u2013 ${value[1] instanceof Date ? fmt(value[1]) : "\u2026"}`;
|
|
5381
5381
|
}
|
|
5382
|
-
|
|
5382
|
+
const resolved = resolveDynamic(String(value[0]), dynamicOptions);
|
|
5383
|
+
return resolved;
|
|
5383
5384
|
}
|
|
5384
|
-
return String(value);
|
|
5385
|
+
return resolveDynamic(String(value), dynamicOptions);
|
|
5386
|
+
}
|
|
5387
|
+
function resolveDynamic(raw, dynamicOptions) {
|
|
5388
|
+
if (dynamicOptions) {
|
|
5389
|
+
const match = dynamicOptions.find((o) => o.value === raw);
|
|
5390
|
+
if (match) return match.label;
|
|
5391
|
+
}
|
|
5392
|
+
return raw;
|
|
5385
5393
|
}
|
|
5386
5394
|
function getBadgeCount(value) {
|
|
5387
5395
|
if (Array.isArray(value) && value.length > 1 && typeof value[0] === "string") {
|
|
@@ -6606,7 +6614,6 @@ var PresetTagsValueInput = ({
|
|
|
6606
6614
|
PresetTagsValueInput.displayName = "PresetTagsValueInput";
|
|
6607
6615
|
|
|
6608
6616
|
// src/components/ui/filter/value-inputs/select-value-input.tsx
|
|
6609
|
-
var import_icons29 = require("@l3mpire/icons");
|
|
6610
6617
|
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
6611
6618
|
var DynamicOptionRow = ({
|
|
6612
6619
|
option,
|
|
@@ -6643,14 +6650,6 @@ var DynamicOptionRow = ({
|
|
|
6643
6650
|
) })
|
|
6644
6651
|
}
|
|
6645
6652
|
),
|
|
6646
|
-
option.icon && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
6647
|
-
import_icons29.Icon,
|
|
6648
|
-
{
|
|
6649
|
-
icon: option.icon,
|
|
6650
|
-
size: "sm",
|
|
6651
|
-
className: "shrink-0 mt-[1px] text-[var(--color-interactive-text-primary-dark-default,var(--color-primary))]"
|
|
6652
|
-
}
|
|
6653
|
-
),
|
|
6654
6653
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "flex-1 flex flex-col gap-2xs min-w-0", children: [
|
|
6655
6654
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-foreground)] truncate", children: option.label }),
|
|
6656
6655
|
option.description && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-xs font-regular leading-xs text-[var(--color-muted-foreground)]", children: option.description })
|
|
@@ -6658,7 +6657,6 @@ var DynamicOptionRow = ({
|
|
|
6658
6657
|
]
|
|
6659
6658
|
}
|
|
6660
6659
|
);
|
|
6661
|
-
var DynamicOptionsDivider = () => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "h-px bg-[var(--color-dropdown-border)] mx-xs my-xs" });
|
|
6662
6660
|
var SingleSelectValueInput = ({
|
|
6663
6661
|
value,
|
|
6664
6662
|
onChange,
|
|
@@ -6689,7 +6687,6 @@ var SingleSelectValueInput = ({
|
|
|
6689
6687
|
},
|
|
6690
6688
|
opt.value
|
|
6691
6689
|
)),
|
|
6692
|
-
dynamicOptions && dynamicOptions.length > 0 && options.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DynamicOptionsDivider, {}),
|
|
6693
6690
|
options.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
6694
6691
|
"button",
|
|
6695
6692
|
{
|
|
@@ -6876,7 +6873,7 @@ ValueInput.displayName = "ValueInput";
|
|
|
6876
6873
|
// src/components/ui/filter/property-selector.tsx
|
|
6877
6874
|
var React44 = __toESM(require("react"));
|
|
6878
6875
|
var PopoverPrimitive6 = __toESM(require("@radix-ui/react-popover"));
|
|
6879
|
-
var
|
|
6876
|
+
var import_icons29 = require("@l3mpire/icons");
|
|
6880
6877
|
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
6881
6878
|
var AdvancedFilterFooter = ({ onClick, count }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
|
|
6882
6879
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "h-px bg-[var(--color-dropdown-border)] mx-xs" }),
|
|
@@ -6889,9 +6886,9 @@ var AdvancedFilterFooter = ({ onClick, count }) => /* @__PURE__ */ (0, import_js
|
|
|
6889
6886
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
6890
6887
|
children: [
|
|
6891
6888
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
6892
|
-
|
|
6889
|
+
import_icons29.Icon,
|
|
6893
6890
|
{
|
|
6894
|
-
icon:
|
|
6891
|
+
icon: import_icons29.faFilterOutline,
|
|
6895
6892
|
size: "sm",
|
|
6896
6893
|
className: "shrink-0 text-[var(--color-dropdown-item-icon)]"
|
|
6897
6894
|
}
|
|
@@ -6991,9 +6988,9 @@ var PropertySelector = ({
|
|
|
6991
6988
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-col gap-xs", children: [
|
|
6992
6989
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex items-center gap-base px-md py-base border border-[var(--color-input)] rounded-md", children: [
|
|
6993
6990
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
6994
|
-
|
|
6991
|
+
import_icons29.Icon,
|
|
6995
6992
|
{
|
|
6996
|
-
icon:
|
|
6993
|
+
icon: import_icons29.faMagnifyingGlassOutline,
|
|
6997
6994
|
size: "sm",
|
|
6998
6995
|
className: "shrink-0 text-[var(--color-muted-foreground)]"
|
|
6999
6996
|
}
|
|
@@ -7023,7 +7020,7 @@ var PropertySelector = ({
|
|
|
7023
7020
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7024
7021
|
children: [
|
|
7025
7022
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7026
|
-
|
|
7023
|
+
import_icons29.Icon,
|
|
7027
7024
|
{
|
|
7028
7025
|
icon: prop.icon,
|
|
7029
7026
|
size: "sm",
|
|
@@ -7050,7 +7047,7 @@ var PropertySelector = ({
|
|
|
7050
7047
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7051
7048
|
children: [
|
|
7052
7049
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7053
|
-
|
|
7050
|
+
import_icons29.Icon,
|
|
7054
7051
|
{
|
|
7055
7052
|
icon: g.groupIcon,
|
|
7056
7053
|
size: "sm",
|
|
@@ -7060,9 +7057,9 @@ var PropertySelector = ({
|
|
|
7060
7057
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "flex-1 text-sm font-regular leading-sm text-[var(--color-dropdown-item-text)] text-left truncate", children: g.groupLabel }),
|
|
7061
7058
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "text-xs font-semibold leading-xs text-[var(--color-muted-foreground)]", children: g.count }),
|
|
7062
7059
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7063
|
-
|
|
7060
|
+
import_icons29.Icon,
|
|
7064
7061
|
{
|
|
7065
|
-
icon:
|
|
7062
|
+
icon: import_icons29.faChevronRightOutline,
|
|
7066
7063
|
size: "xs",
|
|
7067
7064
|
className: "shrink-0 text-[var(--color-dropdown-item-icon)]"
|
|
7068
7065
|
}
|
|
@@ -7089,9 +7086,9 @@ var PropertySelector = ({
|
|
|
7089
7086
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7090
7087
|
children: [
|
|
7091
7088
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7092
|
-
|
|
7089
|
+
import_icons29.Icon,
|
|
7093
7090
|
{
|
|
7094
|
-
icon:
|
|
7091
|
+
icon: import_icons29.faChevronLeftOutline,
|
|
7095
7092
|
size: "sm",
|
|
7096
7093
|
className: "shrink-0 text-[var(--color-dropdown-item-icon)]"
|
|
7097
7094
|
}
|
|
@@ -7102,9 +7099,9 @@ var PropertySelector = ({
|
|
|
7102
7099
|
),
|
|
7103
7100
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex items-center gap-base px-md py-base border border-[var(--color-input)] rounded-md", children: [
|
|
7104
7101
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7105
|
-
|
|
7102
|
+
import_icons29.Icon,
|
|
7106
7103
|
{
|
|
7107
|
-
icon:
|
|
7104
|
+
icon: import_icons29.faMagnifyingGlassOutline,
|
|
7108
7105
|
size: "sm",
|
|
7109
7106
|
className: "shrink-0 text-[var(--color-muted-foreground)]"
|
|
7110
7107
|
}
|
|
@@ -7133,7 +7130,7 @@ var PropertySelector = ({
|
|
|
7133
7130
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7134
7131
|
children: [
|
|
7135
7132
|
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
7136
|
-
|
|
7133
|
+
import_icons29.Icon,
|
|
7137
7134
|
{
|
|
7138
7135
|
icon: prop.icon,
|
|
7139
7136
|
size: "sm",
|
|
@@ -7165,7 +7162,7 @@ PropertySelector.displayName = "PropertySelector";
|
|
|
7165
7162
|
|
|
7166
7163
|
// src/components/ui/filter/kebab-menu.tsx
|
|
7167
7164
|
var PopoverPrimitive7 = __toESM(require("@radix-ui/react-popover"));
|
|
7168
|
-
var
|
|
7165
|
+
var import_icons30 = require("@l3mpire/icons");
|
|
7169
7166
|
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
7170
7167
|
var KebabMenu = ({
|
|
7171
7168
|
onConvertToAdvanced,
|
|
@@ -7200,9 +7197,9 @@ var KebabMenu = ({
|
|
|
7200
7197
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7201
7198
|
children: [
|
|
7202
7199
|
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
7203
|
-
|
|
7200
|
+
import_icons30.Icon,
|
|
7204
7201
|
{
|
|
7205
|
-
icon:
|
|
7202
|
+
icon: import_icons30.faArrowRightOutline,
|
|
7206
7203
|
size: "sm",
|
|
7207
7204
|
className: "shrink-0 text-[var(--color-dropdown-item-icon)]"
|
|
7208
7205
|
}
|
|
@@ -7223,9 +7220,9 @@ var KebabMenu = ({
|
|
|
7223
7220
|
className: "flex items-center gap-base p-base rounded-base cursor-pointer transition-colors hover:bg-[var(--color-dropdown-item-hover)]",
|
|
7224
7221
|
children: [
|
|
7225
7222
|
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
7226
|
-
|
|
7223
|
+
import_icons30.Icon,
|
|
7227
7224
|
{
|
|
7228
|
-
icon:
|
|
7225
|
+
icon: import_icons30.faTrashOutline,
|
|
7229
7226
|
size: "sm",
|
|
7230
7227
|
className: "shrink-0 text-[var(--color-destructive)]"
|
|
7231
7228
|
}
|
|
@@ -7243,7 +7240,7 @@ KebabMenu.displayName = "KebabMenu";
|
|
|
7243
7240
|
// src/components/ui/filter/filter-editor.tsx
|
|
7244
7241
|
var React45 = __toESM(require("react"));
|
|
7245
7242
|
var PopoverPrimitive8 = __toESM(require("@radix-ui/react-popover"));
|
|
7246
|
-
var
|
|
7243
|
+
var import_icons31 = require("@l3mpire/icons");
|
|
7247
7244
|
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
7248
7245
|
var FilterEditor = ({
|
|
7249
7246
|
propertyDef,
|
|
@@ -7307,7 +7304,7 @@ var FilterEditor = ({
|
|
|
7307
7304
|
children: [
|
|
7308
7305
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex items-center gap-base px-base pt-base pb-xs border-b border-[var(--color-border)]", children: [
|
|
7309
7306
|
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
7310
|
-
|
|
7307
|
+
import_icons31.Icon,
|
|
7311
7308
|
{
|
|
7312
7309
|
icon: propertyDef.icon,
|
|
7313
7310
|
size: "sm",
|
|
@@ -7434,7 +7431,7 @@ var InteractiveFilterChip = ({
|
|
|
7434
7431
|
setValueOpen(false);
|
|
7435
7432
|
};
|
|
7436
7433
|
const hasOperator = !!condition.operator;
|
|
7437
|
-
const displayValue = formatFilterValue(condition.value);
|
|
7434
|
+
const displayValue = formatFilterValue(condition.value, propertyDef.dynamicOptions);
|
|
7438
7435
|
const hasValue = hasOperator && displayValue != null;
|
|
7439
7436
|
const badgeCount = getBadgeCount(condition.value);
|
|
7440
7437
|
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
@@ -7570,11 +7567,11 @@ InteractiveFilterChip.displayName = "InteractiveFilterChip";
|
|
|
7570
7567
|
|
|
7571
7568
|
// src/components/ui/filter/filter-system.tsx
|
|
7572
7569
|
var React54 = __toESM(require("react"));
|
|
7573
|
-
var
|
|
7570
|
+
var import_icons38 = require("@l3mpire/icons");
|
|
7574
7571
|
|
|
7575
7572
|
// src/components/ui/filter/advanced-chip.tsx
|
|
7576
7573
|
var React47 = __toESM(require("react"));
|
|
7577
|
-
var
|
|
7574
|
+
var import_icons32 = require("@l3mpire/icons");
|
|
7578
7575
|
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
7579
7576
|
var btnBase = [
|
|
7580
7577
|
"flex items-center justify-center",
|
|
@@ -7600,9 +7597,9 @@ var AdvancedChip = React47.forwardRef(
|
|
|
7600
7597
|
...props,
|
|
7601
7598
|
children: [
|
|
7602
7599
|
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7603
|
-
|
|
7600
|
+
import_icons32.Icon,
|
|
7604
7601
|
{
|
|
7605
|
-
icon:
|
|
7602
|
+
icon: import_icons32.faFilterOutline,
|
|
7606
7603
|
size: "sm",
|
|
7607
7604
|
className: "shrink-0 text-[var(--color-foreground)]"
|
|
7608
7605
|
}
|
|
@@ -7626,7 +7623,7 @@ var AdvancedChip = React47.forwardRef(
|
|
|
7626
7623
|
"rounded-r-md -ml-px"
|
|
7627
7624
|
),
|
|
7628
7625
|
"aria-label": "Clear all advanced filters",
|
|
7629
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7626
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_icons32.Icon, { icon: import_icons32.faXmarkOutline, size: "sm", className: "text-[var(--color-foreground)]" })
|
|
7630
7627
|
}
|
|
7631
7628
|
)
|
|
7632
7629
|
] })
|
|
@@ -7636,17 +7633,17 @@ AdvancedChip.displayName = "AdvancedChip";
|
|
|
7636
7633
|
// src/components/ui/filter/advanced-popover.tsx
|
|
7637
7634
|
var React51 = __toESM(require("react"));
|
|
7638
7635
|
var PopoverPrimitive12 = __toESM(require("@radix-ui/react-popover"));
|
|
7639
|
-
var
|
|
7636
|
+
var import_icons36 = require("@l3mpire/icons");
|
|
7640
7637
|
|
|
7641
7638
|
// src/components/ui/filter/advanced-row.tsx
|
|
7642
7639
|
var React49 = __toESM(require("react"));
|
|
7643
7640
|
var PopoverPrimitive11 = __toESM(require("@radix-ui/react-popover"));
|
|
7644
|
-
var
|
|
7641
|
+
var import_icons34 = require("@l3mpire/icons");
|
|
7645
7642
|
|
|
7646
7643
|
// src/components/ui/filter/filter-node-actions.tsx
|
|
7647
7644
|
var React48 = __toESM(require("react"));
|
|
7648
7645
|
var PopoverPrimitive10 = __toESM(require("@radix-ui/react-popover"));
|
|
7649
|
-
var
|
|
7646
|
+
var import_icons33 = require("@l3mpire/icons");
|
|
7650
7647
|
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
7651
7648
|
var FilterNodeActions = ({
|
|
7652
7649
|
nodeType,
|
|
@@ -7658,17 +7655,17 @@ var FilterNodeActions = ({
|
|
|
7658
7655
|
const items = [
|
|
7659
7656
|
{
|
|
7660
7657
|
label: "Duplicate",
|
|
7661
|
-
icon:
|
|
7658
|
+
icon: import_icons33.faCopyOutline,
|
|
7662
7659
|
action: onDuplicate
|
|
7663
7660
|
},
|
|
7664
7661
|
{
|
|
7665
7662
|
label: nodeType === "condition" ? "Turn into group" : "Turn into filter",
|
|
7666
|
-
icon: nodeType === "condition" ?
|
|
7663
|
+
icon: nodeType === "condition" ? import_icons33.faFolderOutline : import_icons33.faFilterOutline,
|
|
7667
7664
|
action: onConvert
|
|
7668
7665
|
},
|
|
7669
7666
|
{
|
|
7670
7667
|
label: "Delete",
|
|
7671
|
-
icon:
|
|
7668
|
+
icon: import_icons33.faTrashOutline,
|
|
7672
7669
|
action: onDelete,
|
|
7673
7670
|
destructive: true
|
|
7674
7671
|
}
|
|
@@ -7681,9 +7678,9 @@ var FilterNodeActions = ({
|
|
|
7681
7678
|
className: "shrink-0 flex items-center justify-center p-sm rounded-md cursor-pointer transition-colors hover:bg-[var(--color-accent)]",
|
|
7682
7679
|
"aria-label": "More actions",
|
|
7683
7680
|
children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
7684
|
-
|
|
7681
|
+
import_icons33.Icon,
|
|
7685
7682
|
{
|
|
7686
|
-
icon:
|
|
7683
|
+
icon: import_icons33.faEllipsisOutline,
|
|
7687
7684
|
size: "sm",
|
|
7688
7685
|
className: "text-[var(--color-foreground)]"
|
|
7689
7686
|
}
|
|
@@ -7717,7 +7714,7 @@ var FilterNodeActions = ({
|
|
|
7717
7714
|
),
|
|
7718
7715
|
children: [
|
|
7719
7716
|
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
7720
|
-
|
|
7717
|
+
import_icons33.Icon,
|
|
7721
7718
|
{
|
|
7722
7719
|
icon: item.icon,
|
|
7723
7720
|
size: "sm",
|
|
@@ -7784,7 +7781,7 @@ var AdvancedRow = ({
|
|
|
7784
7781
|
const handleValueChange = (val) => {
|
|
7785
7782
|
onUpdate({ ...condition, value: val });
|
|
7786
7783
|
};
|
|
7787
|
-
const displayValue = formatFilterValue(condition.value);
|
|
7784
|
+
const displayValue = formatFilterValue(condition.value, propertyDef.dynamicOptions);
|
|
7788
7785
|
const badgeCount = getBadgeCount(condition.value);
|
|
7789
7786
|
const hasValue = displayValue != null;
|
|
7790
7787
|
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: "flex items-center gap-base w-full min-w-0", children: [
|
|
@@ -7803,15 +7800,15 @@ var AdvancedRow = ({
|
|
|
7803
7800
|
),
|
|
7804
7801
|
children: [
|
|
7805
7802
|
connector,
|
|
7806
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7803
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons34.Icon, { icon: import_icons34.faRefreshOutline, size: "xs", className: "text-[var(--color-foreground)]" })
|
|
7807
7804
|
]
|
|
7808
7805
|
}
|
|
7809
7806
|
),
|
|
7810
7807
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(PopoverPrimitive11.Root, { open: propertyOpen, onOpenChange: setPropertyOpen, children: [
|
|
7811
7808
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverPrimitive11.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("button", { type: "button", className: cn(selectBtnStyle, "min-w-0"), children: [
|
|
7812
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7809
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons34.Icon, { icon: propertyDef.icon, size: "sm", className: "shrink-0 text-[var(--color-muted-foreground)]" }),
|
|
7813
7810
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-foreground)] whitespace-nowrap truncate", children: propertyDef.label }),
|
|
7814
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7811
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons34.Icon, { icon: import_icons34.faChevronDownOutline, size: "xs", className: "shrink-0 text-[var(--color-foreground)]" })
|
|
7815
7812
|
] }) }),
|
|
7816
7813
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverPrimitive11.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7817
7814
|
PopoverPrimitive11.Content,
|
|
@@ -7839,7 +7836,7 @@ var AdvancedRow = ({
|
|
|
7839
7836
|
p.id === condition.propertyId && "bg-[var(--color-dropdown-item-hover)]"
|
|
7840
7837
|
),
|
|
7841
7838
|
children: [
|
|
7842
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7839
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons34.Icon, { icon: p.icon, size: "sm", className: "shrink-0 text-[var(--color-dropdown-item-icon)]" }),
|
|
7843
7840
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-dropdown-item-text)] truncate", children: p.label })
|
|
7844
7841
|
]
|
|
7845
7842
|
},
|
|
@@ -7851,7 +7848,7 @@ var AdvancedRow = ({
|
|
|
7851
7848
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(PopoverPrimitive11.Root, { open: operatorOpen, onOpenChange: setOperatorOpen, children: [
|
|
7852
7849
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverPrimitive11.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("button", { type: "button", className: cn(selectBtnStyle, "min-w-0"), children: [
|
|
7853
7850
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-foreground)] whitespace-nowrap truncate text-left", children: condition.operator ?? "Select" }),
|
|
7854
|
-
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7851
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_icons34.Icon, { icon: import_icons34.faChevronDownOutline, size: "xs", className: "shrink-0 text-[var(--color-foreground)]" })
|
|
7855
7852
|
] }) }),
|
|
7856
7853
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(PopoverPrimitive11.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7857
7854
|
PopoverPrimitive11.Content,
|
|
@@ -7902,9 +7899,9 @@ var AdvancedRow = ({
|
|
|
7902
7899
|
badgeCount - 1
|
|
7903
7900
|
] }),
|
|
7904
7901
|
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
7905
|
-
|
|
7902
|
+
import_icons34.Icon,
|
|
7906
7903
|
{
|
|
7907
|
-
icon:
|
|
7904
|
+
icon: import_icons34.faChevronDownOutline,
|
|
7908
7905
|
size: "xs",
|
|
7909
7906
|
className: "text-[var(--color-foreground)]"
|
|
7910
7907
|
}
|
|
@@ -7958,7 +7955,7 @@ AdvancedRow.displayName = "AdvancedRow";
|
|
|
7958
7955
|
|
|
7959
7956
|
// src/components/ui/filter/advanced-group.tsx
|
|
7960
7957
|
var React50 = __toESM(require("react"));
|
|
7961
|
-
var
|
|
7958
|
+
var import_icons35 = require("@l3mpire/icons");
|
|
7962
7959
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
7963
7960
|
var AdvancedGroup = ({
|
|
7964
7961
|
connector,
|
|
@@ -7987,7 +7984,7 @@ var AdvancedGroup = ({
|
|
|
7987
7984
|
),
|
|
7988
7985
|
children: [
|
|
7989
7986
|
connector,
|
|
7990
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
7987
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_icons35.Icon, { icon: import_icons35.faRefreshOutline, size: "xs", className: "text-[var(--color-foreground)]" })
|
|
7991
7988
|
]
|
|
7992
7989
|
}
|
|
7993
7990
|
) }),
|
|
@@ -8009,7 +8006,7 @@ var AdvancedGroup = ({
|
|
|
8009
8006
|
type: "button",
|
|
8010
8007
|
className: "flex items-center gap-sm px-base py-sm text-sm font-semibold leading-sm text-[var(--color-muted-foreground)] cursor-pointer transition-colors rounded-md hover:bg-[var(--color-accent)] hover:text-[var(--color-foreground)] w-fit",
|
|
8011
8008
|
children: [
|
|
8012
|
-
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
8009
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_icons35.Icon, { icon: import_icons35.faPlusOutline, size: "sm" }),
|
|
8013
8010
|
"Add filter"
|
|
8014
8011
|
]
|
|
8015
8012
|
}
|
|
@@ -8229,7 +8226,7 @@ var AdvancedPopover = ({
|
|
|
8229
8226
|
open: addSelectorOpen,
|
|
8230
8227
|
onOpenChange: setAddSelectorOpen,
|
|
8231
8228
|
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("button", { type: "button", className: cn(ghostBtn, "text-[var(--color-foreground)]"), children: [
|
|
8232
|
-
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
8229
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_icons36.Icon, { icon: import_icons36.faPlusOutline, size: "sm", className: "text-[var(--color-foreground)]" }),
|
|
8233
8230
|
"Add filter"
|
|
8234
8231
|
] })
|
|
8235
8232
|
}
|
|
@@ -8241,7 +8238,7 @@ var AdvancedPopover = ({
|
|
|
8241
8238
|
onClick: handleAddGroup,
|
|
8242
8239
|
className: cn(ghostBtn, "text-[var(--color-foreground)]"),
|
|
8243
8240
|
children: [
|
|
8244
|
-
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
8241
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_icons36.Icon, { icon: import_icons36.faPlusOutline, size: "sm", className: "text-[var(--color-foreground)]" }),
|
|
8245
8242
|
"Add filters group"
|
|
8246
8243
|
]
|
|
8247
8244
|
}
|
|
@@ -8254,7 +8251,7 @@ var AdvancedPopover = ({
|
|
|
8254
8251
|
onClick: handleClearAll,
|
|
8255
8252
|
className: cn(ghostBtn, "text-[var(--color-destructive,#ef4444)]"),
|
|
8256
8253
|
children: [
|
|
8257
|
-
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
8254
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_icons36.Icon, { icon: import_icons36.faXmarkOutline, size: "sm", className: "text-[var(--color-destructive,#ef4444)]" }),
|
|
8258
8255
|
"Clear filters"
|
|
8259
8256
|
]
|
|
8260
8257
|
}
|
|
@@ -8305,9 +8302,9 @@ var DraftRow = ({
|
|
|
8305
8302
|
children: [
|
|
8306
8303
|
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-muted-foreground)] whitespace-nowrap", children: "Select property" }),
|
|
8307
8304
|
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
8308
|
-
|
|
8305
|
+
import_icons36.Icon,
|
|
8309
8306
|
{
|
|
8310
|
-
icon:
|
|
8307
|
+
icon: import_icons36.faChevronDownOutline,
|
|
8311
8308
|
size: "xs",
|
|
8312
8309
|
className: "shrink-0 text-[var(--color-foreground)]"
|
|
8313
8310
|
}
|
|
@@ -8323,7 +8320,7 @@ var DraftRow = ({
|
|
|
8323
8320
|
// src/components/ui/filter/summary-chip.tsx
|
|
8324
8321
|
var React52 = __toESM(require("react"));
|
|
8325
8322
|
var PopoverPrimitive13 = __toESM(require("@radix-ui/react-popover"));
|
|
8326
|
-
var
|
|
8323
|
+
var import_icons37 = require("@l3mpire/icons");
|
|
8327
8324
|
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
8328
8325
|
var ghostBtn2 = [
|
|
8329
8326
|
"flex items-center gap-sm px-base py-sm",
|
|
@@ -8501,7 +8498,7 @@ var SummaryChip = ({
|
|
|
8501
8498
|
className
|
|
8502
8499
|
),
|
|
8503
8500
|
children: [
|
|
8504
|
-
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
8501
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_icons37.Icon, { icon: import_icons37.faFilterOutline, size: "sm", className: "shrink-0 text-[var(--color-foreground)]" }),
|
|
8505
8502
|
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "text-sm font-semibold leading-sm whitespace-nowrap text-[var(--color-foreground)]", children: "Filters" }),
|
|
8506
8503
|
count > 0 && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "flex items-center p-2xs rounded-xs bg-filter-chip-badge-bg", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "text-[10px] font-semibold leading-2xs text-filter-chip-badge-text", children: count }) })
|
|
8507
8504
|
]
|
|
@@ -8542,13 +8539,13 @@ var SummaryChip = ({
|
|
|
8542
8539
|
open: addSelectorOpen,
|
|
8543
8540
|
onOpenChange: setAddSelectorOpen,
|
|
8544
8541
|
children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("button", { type: "button", className: cn(ghostBtn2, "text-[var(--color-foreground)]"), children: [
|
|
8545
|
-
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
8542
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_icons37.Icon, { icon: import_icons37.faPlusOutline, size: "sm", className: "text-[var(--color-foreground)]" }),
|
|
8546
8543
|
"Add filter"
|
|
8547
8544
|
] })
|
|
8548
8545
|
}
|
|
8549
8546
|
),
|
|
8550
8547
|
/* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("button", { type: "button", onClick: handleAddGroup, className: cn(ghostBtn2, "text-[var(--color-foreground)]"), children: [
|
|
8551
|
-
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
8548
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_icons37.Icon, { icon: import_icons37.faPlusOutline, size: "sm", className: "text-[var(--color-foreground)]" }),
|
|
8552
8549
|
"Add filters group"
|
|
8553
8550
|
] })
|
|
8554
8551
|
] }),
|
|
@@ -8562,7 +8559,7 @@ var SummaryChip = ({
|
|
|
8562
8559
|
},
|
|
8563
8560
|
className: cn(ghostBtn2, "text-[var(--color-destructive,#ef4444)]"),
|
|
8564
8561
|
children: [
|
|
8565
|
-
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
8562
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_icons37.Icon, { icon: import_icons37.faXmarkOutline, size: "sm", className: "text-[var(--color-destructive,#ef4444)]" }),
|
|
8566
8563
|
"Clear filters"
|
|
8567
8564
|
]
|
|
8568
8565
|
}
|
|
@@ -8599,7 +8596,7 @@ var DraftRow2 = ({ properties, onSelect, open: openProp, onOpenChange }) => {
|
|
|
8599
8596
|
),
|
|
8600
8597
|
children: [
|
|
8601
8598
|
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "text-sm font-regular leading-sm text-[var(--color-muted-foreground)] whitespace-nowrap", children: "Select property" }),
|
|
8602
|
-
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
8599
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_icons37.Icon, { icon: import_icons37.faChevronDownOutline, size: "xs", className: "shrink-0 text-[var(--color-foreground)]" })
|
|
8603
8600
|
]
|
|
8604
8601
|
}
|
|
8605
8602
|
) })
|
|
@@ -8828,7 +8825,7 @@ var FilterSystem = ({
|
|
|
8828
8825
|
{
|
|
8829
8826
|
type: "button",
|
|
8830
8827
|
className: "shrink-0 inline-flex items-center justify-center size-8 rounded-md border border-[var(--color-btn-outlined-neutral-border-default)] bg-gradient-to-t from-[var(--color-btn-outlined-neutral-bg-default)] from-[10%] to-[var(--color-btn-outlined-neutral-bg-gradient-to-default)] shadow-sm cursor-pointer transition-colors hover:from-[var(--color-btn-outlined-neutral-bg-hover)] hover:to-[var(--color-btn-outlined-neutral-bg-gradient-to-hover)]",
|
|
8831
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
8828
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_icons38.Icon, { icon: import_icons38.faPlusOutline, size: "sm", className: "text-[var(--color-foreground)]" })
|
|
8832
8829
|
}
|
|
8833
8830
|
) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(FilterBarButton, {})
|
|
8834
8831
|
}
|
|
@@ -8841,7 +8838,7 @@ var FilterSystem = ({
|
|
|
8841
8838
|
type: "button",
|
|
8842
8839
|
onClick: handleClearAll,
|
|
8843
8840
|
className: "shrink-0 flex items-center gap-sm px-base py-sm min-h-[32px] max-h-[32px] rounded-md cursor-pointer transition-colors hover:bg-[var(--color-accent)]",
|
|
8844
|
-
children: isMinimal ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
8841
|
+
children: isMinimal ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_icons38.Icon, { icon: import_icons38.faXmarkOutline, size: "sm", className: "text-[var(--color-foreground)]" }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "text-sm font-semibold leading-sm text-[var(--color-foreground)]", children: "Clear" })
|
|
8845
8842
|
}
|
|
8846
8843
|
)
|
|
8847
8844
|
] }),
|