@almadar/ui 5.122.13 → 5.123.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/avl/index.cjs +105 -20
- package/dist/avl/index.js +104 -20
- package/dist/components/index.cjs +80 -10
- package/dist/components/index.d.cts +15 -10
- package/dist/components/index.d.ts +15 -10
- package/dist/components/index.js +79 -10
- package/dist/context/index.cjs +9 -0
- package/dist/context/index.js +9 -0
- package/dist/hooks/index.cjs +8 -0
- package/dist/hooks/index.js +8 -0
- package/dist/lib/drawable/three/index.cjs +6 -0
- package/dist/lib/drawable/three/index.js +6 -0
- package/dist/marketing/index.cjs +7 -0
- package/dist/marketing/index.js +7 -0
- package/dist/providers/index.cjs +72 -10
- package/dist/providers/index.d.cts +2 -2
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.js +71 -10
- package/dist/runtime/index.cjs +105 -20
- package/dist/runtime/index.js +104 -20
- package/package.json +5 -5
package/dist/marketing/index.cjs
CHANGED
|
@@ -2986,6 +2986,11 @@ var colorStyles = {
|
|
|
2986
2986
|
inherit: "text-inherit"
|
|
2987
2987
|
};
|
|
2988
2988
|
var weightStyles = {
|
|
2989
|
+
// Neutral: an atom default of "none" must not override the variant's baked
|
|
2990
|
+
// weight (C-PATTERN-ENUM-BLOCKS-NEUTRAL-OVERRIDE — `variant={h2}` rendered
|
|
2991
|
+
// tiny because the ui-typography atom's `weight: light`/`size: xs` defaults
|
|
2992
|
+
// clobbered every variant).
|
|
2993
|
+
none: "",
|
|
2989
2994
|
light: "font-light",
|
|
2990
2995
|
normal: "font-normal",
|
|
2991
2996
|
medium: "font-medium",
|
|
@@ -3011,6 +3016,7 @@ var defaultElements = {
|
|
|
3011
3016
|
label: "span"
|
|
3012
3017
|
};
|
|
3013
3018
|
var typographySizeStyles = {
|
|
3019
|
+
none: "",
|
|
3014
3020
|
xs: "text-xs",
|
|
3015
3021
|
sm: "text-sm",
|
|
3016
3022
|
md: "text-base",
|
|
@@ -3533,6 +3539,7 @@ var Button = React12__namespace.default.forwardRef(
|
|
|
3533
3539
|
"button",
|
|
3534
3540
|
{
|
|
3535
3541
|
ref,
|
|
3542
|
+
type: "button",
|
|
3536
3543
|
disabled: disabled || isLoading,
|
|
3537
3544
|
className: cn(
|
|
3538
3545
|
"relative inline-flex items-center justify-center gap-2",
|
package/dist/marketing/index.js
CHANGED
|
@@ -2965,6 +2965,11 @@ var colorStyles = {
|
|
|
2965
2965
|
inherit: "text-inherit"
|
|
2966
2966
|
};
|
|
2967
2967
|
var weightStyles = {
|
|
2968
|
+
// Neutral: an atom default of "none" must not override the variant's baked
|
|
2969
|
+
// weight (C-PATTERN-ENUM-BLOCKS-NEUTRAL-OVERRIDE — `variant={h2}` rendered
|
|
2970
|
+
// tiny because the ui-typography atom's `weight: light`/`size: xs` defaults
|
|
2971
|
+
// clobbered every variant).
|
|
2972
|
+
none: "",
|
|
2968
2973
|
light: "font-light",
|
|
2969
2974
|
normal: "font-normal",
|
|
2970
2975
|
medium: "font-medium",
|
|
@@ -2990,6 +2995,7 @@ var defaultElements = {
|
|
|
2990
2995
|
label: "span"
|
|
2991
2996
|
};
|
|
2992
2997
|
var typographySizeStyles = {
|
|
2998
|
+
none: "",
|
|
2993
2999
|
xs: "text-xs",
|
|
2994
3000
|
sm: "text-sm",
|
|
2995
3001
|
md: "text-base",
|
|
@@ -3512,6 +3518,7 @@ var Button = React12__default.forwardRef(
|
|
|
3512
3518
|
"button",
|
|
3513
3519
|
{
|
|
3514
3520
|
ref,
|
|
3521
|
+
type: "button",
|
|
3515
3522
|
disabled: disabled || isLoading,
|
|
3516
3523
|
className: cn(
|
|
3517
3524
|
"relative inline-flex items-center justify-center gap-2",
|
package/dist/providers/index.cjs
CHANGED
|
@@ -62,6 +62,7 @@ var langPowershell = require('react-syntax-highlighter/dist/esm/languages/prism/
|
|
|
62
62
|
var langMakefile = require('react-syntax-highlighter/dist/esm/languages/prism/makefile.js');
|
|
63
63
|
var langNginx = require('react-syntax-highlighter/dist/esm/languages/prism/nginx.js');
|
|
64
64
|
var langIni = require('react-syntax-highlighter/dist/esm/languages/prism/ini.js');
|
|
65
|
+
var langClike = require('react-syntax-highlighter/dist/esm/languages/prism/clike.js');
|
|
65
66
|
var ReactMarkdown = require('react-markdown');
|
|
66
67
|
var remarkGfm = require('remark-gfm');
|
|
67
68
|
var remarkMath = require('remark-math');
|
|
@@ -144,6 +145,7 @@ var langPowershell__default = /*#__PURE__*/_interopDefault(langPowershell);
|
|
|
144
145
|
var langMakefile__default = /*#__PURE__*/_interopDefault(langMakefile);
|
|
145
146
|
var langNginx__default = /*#__PURE__*/_interopDefault(langNginx);
|
|
146
147
|
var langIni__default = /*#__PURE__*/_interopDefault(langIni);
|
|
148
|
+
var langClike__default = /*#__PURE__*/_interopDefault(langClike);
|
|
147
149
|
var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
|
|
148
150
|
var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
|
|
149
151
|
var remarkMath__default = /*#__PURE__*/_interopDefault(remarkMath);
|
|
@@ -1162,6 +1164,7 @@ var init_Button = __esm({
|
|
|
1162
1164
|
"button",
|
|
1163
1165
|
{
|
|
1164
1166
|
ref,
|
|
1167
|
+
type: "button",
|
|
1165
1168
|
disabled: disabled || isLoading,
|
|
1166
1169
|
className: cn(
|
|
1167
1170
|
"relative inline-flex items-center justify-center gap-2",
|
|
@@ -1255,6 +1258,11 @@ var init_Typography = __esm({
|
|
|
1255
1258
|
inherit: "text-inherit"
|
|
1256
1259
|
};
|
|
1257
1260
|
weightStyles = {
|
|
1261
|
+
// Neutral: an atom default of "none" must not override the variant's baked
|
|
1262
|
+
// weight (C-PATTERN-ENUM-BLOCKS-NEUTRAL-OVERRIDE — `variant={h2}` rendered
|
|
1263
|
+
// tiny because the ui-typography atom's `weight: light`/`size: xs` defaults
|
|
1264
|
+
// clobbered every variant).
|
|
1265
|
+
none: "",
|
|
1258
1266
|
light: "font-light",
|
|
1259
1267
|
normal: "font-normal",
|
|
1260
1268
|
medium: "font-medium",
|
|
@@ -1280,6 +1288,7 @@ var init_Typography = __esm({
|
|
|
1280
1288
|
label: "span"
|
|
1281
1289
|
};
|
|
1282
1290
|
typographySizeStyles = {
|
|
1291
|
+
none: "",
|
|
1283
1292
|
xs: "text-xs",
|
|
1284
1293
|
sm: "text-sm",
|
|
1285
1294
|
md: "text-base",
|
|
@@ -14479,7 +14488,7 @@ async function loadPrismLanguage(lang) {
|
|
|
14479
14488
|
if (isLanguageRegistered(lang)) return;
|
|
14480
14489
|
try {
|
|
14481
14490
|
const grammar = codeLanguageLoader ? await codeLanguageLoader(lang) : null;
|
|
14482
|
-
|
|
14491
|
+
SyntaxHighlighter__default.default.registerLanguage(lang, grammar ?? langClike__default.default);
|
|
14483
14492
|
dynamicallyLoaded.add(lang);
|
|
14484
14493
|
} catch {
|
|
14485
14494
|
dynamicallyLoaded.add(lang);
|
|
@@ -14648,6 +14657,7 @@ var init_CodeBlock = __esm({
|
|
|
14648
14657
|
SyntaxHighlighter__default.default.registerLanguage("make", langMakefile__default.default);
|
|
14649
14658
|
SyntaxHighlighter__default.default.registerLanguage("nginx", langNginx__default.default);
|
|
14650
14659
|
SyntaxHighlighter__default.default.registerLanguage("ini", langIni__default.default);
|
|
14660
|
+
SyntaxHighlighter__default.default.registerLanguage("clike", langClike__default.default);
|
|
14651
14661
|
SyntaxHighlighter__default.default.registerLanguage("orb", syntax.orbLanguage);
|
|
14652
14662
|
SyntaxHighlighter__default.default.registerLanguage("lolo", syntax.loloLanguage);
|
|
14653
14663
|
dynamicallyLoaded = /* @__PURE__ */ new Set();
|
|
@@ -15197,7 +15207,7 @@ var init_CodeBlock = __esm({
|
|
|
15197
15207
|
] }) });
|
|
15198
15208
|
}
|
|
15199
15209
|
const hasHeader = showLanguageBadge || effectiveCopy;
|
|
15200
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: `relative group ${className || ""}`, style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
|
|
15210
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: `relative group not-prose ${className || ""}`, style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
|
|
15201
15211
|
hasHeader && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
15202
15212
|
HStack,
|
|
15203
15213
|
{
|
|
@@ -23140,6 +23150,13 @@ function DataGrid({
|
|
|
23140
23150
|
row: itemData
|
|
23141
23151
|
};
|
|
23142
23152
|
eventBus.emit(`UI:${action.event}`, payload);
|
|
23153
|
+
if (action.navigatesTo) {
|
|
23154
|
+
const url = action.navigatesTo.replace(
|
|
23155
|
+
/\{\{row\.(\w+(?:\.\w+)*)\}\}/g,
|
|
23156
|
+
(_, field) => String(itemData[field] ?? "")
|
|
23157
|
+
);
|
|
23158
|
+
eventBus.emit("UI:NAVIGATE", { url });
|
|
23159
|
+
}
|
|
23143
23160
|
};
|
|
23144
23161
|
const hasRenderProp = typeof children === "function";
|
|
23145
23162
|
React84.useEffect(() => {
|
|
@@ -23207,13 +23224,49 @@ function DataGrid({
|
|
|
23207
23224
|
const wrapDnd = (node) => dnd.isZone ? /* @__PURE__ */ jsxRuntime.jsx(dnd.SortableItem, { id: dndId, children: node }, dndId) : node;
|
|
23208
23225
|
if (hasRenderProp) {
|
|
23209
23226
|
return wrapDnd(
|
|
23210
|
-
/* @__PURE__ */ jsxRuntime.
|
|
23227
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
23211
23228
|
Box,
|
|
23212
23229
|
{
|
|
23213
23230
|
"data-entity-row": true,
|
|
23214
23231
|
"data-entity-id": id,
|
|
23215
23232
|
className: cn(isSelected && "ring-2 ring-primary rounded-lg"),
|
|
23216
|
-
children:
|
|
23233
|
+
children: [
|
|
23234
|
+
children(itemData, index),
|
|
23235
|
+
actionDefs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "px-4 py-3 border-t border-border", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", className: "justify-end", children: [
|
|
23236
|
+
(maxInlineActions != null ? actionDefs.slice(0, maxInlineActions) : actionDefs).map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
23237
|
+
Button,
|
|
23238
|
+
{
|
|
23239
|
+
variant: action.variant === "primary" ? "primary" : "ghost",
|
|
23240
|
+
size: "sm",
|
|
23241
|
+
onClick: handleActionClick(action, itemData),
|
|
23242
|
+
"data-testid": `action-${action.event}`,
|
|
23243
|
+
"data-row-id": String(itemData.id),
|
|
23244
|
+
className: action.variant === "danger" ? "text-error hover:text-error hover:bg-error/10" : void 0,
|
|
23245
|
+
children: [
|
|
23246
|
+
action.icon && renderIconInput(action.icon, { size: "xs", className: "mr-1" }),
|
|
23247
|
+
action.label
|
|
23248
|
+
]
|
|
23249
|
+
},
|
|
23250
|
+
idx
|
|
23251
|
+
)),
|
|
23252
|
+
maxInlineActions != null && actionDefs.length > maxInlineActions && /* @__PURE__ */ jsxRuntime.jsx(
|
|
23253
|
+
Menu,
|
|
23254
|
+
{
|
|
23255
|
+
position: "bottom-end",
|
|
23256
|
+
trigger: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "more-horizontal", size: "xs" }) }),
|
|
23257
|
+
items: actionDefs.slice(maxInlineActions).map((action) => ({
|
|
23258
|
+
label: action.label,
|
|
23259
|
+
icon: action.icon,
|
|
23260
|
+
event: action.event,
|
|
23261
|
+
onClick: () => eventBus.emit(`UI:${action.event}`, {
|
|
23262
|
+
id: itemData.id,
|
|
23263
|
+
row: itemData
|
|
23264
|
+
})
|
|
23265
|
+
}))
|
|
23266
|
+
}
|
|
23267
|
+
)
|
|
23268
|
+
] }) })
|
|
23269
|
+
]
|
|
23217
23270
|
},
|
|
23218
23271
|
id
|
|
23219
23272
|
)
|
|
@@ -24237,7 +24290,9 @@ var init_FilterGroup = __esm({
|
|
|
24237
24290
|
showIcon = true,
|
|
24238
24291
|
query,
|
|
24239
24292
|
isLoading,
|
|
24240
|
-
look = "toolbar"
|
|
24293
|
+
look = "toolbar",
|
|
24294
|
+
event,
|
|
24295
|
+
clearEvent
|
|
24241
24296
|
}) => {
|
|
24242
24297
|
const { t } = hooks.useTranslate();
|
|
24243
24298
|
const eventBus = useEventBus();
|
|
@@ -24274,14 +24329,18 @@ var init_FilterGroup = __esm({
|
|
|
24274
24329
|
queryState.setFilter(field, value === "all" ? null : value);
|
|
24275
24330
|
}
|
|
24276
24331
|
onFilterChange?.(field, value === "all" ? null : value);
|
|
24277
|
-
|
|
24332
|
+
const payload = {
|
|
24278
24333
|
entity,
|
|
24279
24334
|
field,
|
|
24280
24335
|
value: value === "all" || value === null ? "" : value,
|
|
24281
24336
|
query
|
|
24282
|
-
}
|
|
24337
|
+
};
|
|
24338
|
+
if (event && event !== "FILTER") {
|
|
24339
|
+
eventBus.emit(`UI:${event}`, payload);
|
|
24340
|
+
}
|
|
24341
|
+
eventBus.emit("UI:FILTER", payload);
|
|
24283
24342
|
},
|
|
24284
|
-
[onFilterChange, queryState, eventBus, entity, query]
|
|
24343
|
+
[onFilterChange, queryState, eventBus, entity, query, event]
|
|
24285
24344
|
);
|
|
24286
24345
|
const handleClearAll = React84.useCallback(() => {
|
|
24287
24346
|
setSelectedValues({});
|
|
@@ -24289,8 +24348,11 @@ var init_FilterGroup = __esm({
|
|
|
24289
24348
|
queryState.clearFilters();
|
|
24290
24349
|
}
|
|
24291
24350
|
onClearAll?.();
|
|
24351
|
+
if (clearEvent && clearEvent !== "CLEAR_FILTERS") {
|
|
24352
|
+
eventBus.emit(`UI:${clearEvent}`, { entity, query });
|
|
24353
|
+
}
|
|
24292
24354
|
eventBus.emit("UI:CLEAR_FILTERS", { entity, query });
|
|
24293
|
-
}, [onClearAll, queryState, eventBus, entity, query]);
|
|
24355
|
+
}, [onClearAll, queryState, eventBus, entity, query, clearEvent]);
|
|
24294
24356
|
const activeFilterCount = Object.keys(selectedValues).length;
|
|
24295
24357
|
if (variant === "pills") {
|
|
24296
24358
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -25418,7 +25480,7 @@ var init_SearchInput = __esm({
|
|
|
25418
25480
|
queryState.setSearch(newValue);
|
|
25419
25481
|
}
|
|
25420
25482
|
onSearch?.(newValue);
|
|
25421
|
-
if (event) {
|
|
25483
|
+
if (event && event !== "SEARCH") {
|
|
25422
25484
|
eventBus.emit(`UI:${event}`, { searchTerm: newValue, entity });
|
|
25423
25485
|
}
|
|
25424
25486
|
if (event || entity || query) {
|
|
@@ -35,7 +35,7 @@ interface EventBusContextTypeExtended extends EventBusContextType {
|
|
|
35
35
|
}
|
|
36
36
|
declare const EventBusContext: React__default.Context<EventBusContextTypeExtended | null>;
|
|
37
37
|
interface EventBusProviderProps {
|
|
38
|
-
children
|
|
38
|
+
children?: ReactNode;
|
|
39
39
|
/**
|
|
40
40
|
* @deprecated No-op. Logging is now gated by `@almadar/logger` —
|
|
41
41
|
* use `setLogLevel('DEBUG')` or `setNamespaceLevel('almadar:eventbus', 'DEBUG')`
|
|
@@ -288,7 +288,7 @@ type TraitScopeChain = readonly TraitScope[];
|
|
|
288
288
|
interface TraitScopeProviderProps {
|
|
289
289
|
orbital: string;
|
|
290
290
|
trait: string;
|
|
291
|
-
children
|
|
291
|
+
children?: React__default.ReactNode;
|
|
292
292
|
}
|
|
293
293
|
/**
|
|
294
294
|
* Wrap a trait's rendered subtree to qualify bare `UI:*` emits with the
|
|
@@ -35,7 +35,7 @@ interface EventBusContextTypeExtended extends EventBusContextType {
|
|
|
35
35
|
}
|
|
36
36
|
declare const EventBusContext: React__default.Context<EventBusContextTypeExtended | null>;
|
|
37
37
|
interface EventBusProviderProps {
|
|
38
|
-
children
|
|
38
|
+
children?: ReactNode;
|
|
39
39
|
/**
|
|
40
40
|
* @deprecated No-op. Logging is now gated by `@almadar/logger` —
|
|
41
41
|
* use `setLogLevel('DEBUG')` or `setNamespaceLevel('almadar:eventbus', 'DEBUG')`
|
|
@@ -288,7 +288,7 @@ type TraitScopeChain = readonly TraitScope[];
|
|
|
288
288
|
interface TraitScopeProviderProps {
|
|
289
289
|
orbital: string;
|
|
290
290
|
trait: string;
|
|
291
|
-
children
|
|
291
|
+
children?: React__default.ReactNode;
|
|
292
292
|
}
|
|
293
293
|
/**
|
|
294
294
|
* Wrap a trait's rendered subtree to qualify bare `UI:*` emits with the
|
package/dist/providers/index.js
CHANGED
|
@@ -63,6 +63,7 @@ import langPowershell from 'react-syntax-highlighter/dist/esm/languages/prism/po
|
|
|
63
63
|
import langMakefile from 'react-syntax-highlighter/dist/esm/languages/prism/makefile.js';
|
|
64
64
|
import langNginx from 'react-syntax-highlighter/dist/esm/languages/prism/nginx.js';
|
|
65
65
|
import langIni from 'react-syntax-highlighter/dist/esm/languages/prism/ini.js';
|
|
66
|
+
import langClike from 'react-syntax-highlighter/dist/esm/languages/prism/clike.js';
|
|
66
67
|
import ReactMarkdown from 'react-markdown';
|
|
67
68
|
import remarkGfm from 'remark-gfm';
|
|
68
69
|
import remarkMath from 'remark-math';
|
|
@@ -1088,6 +1089,7 @@ var init_Button = __esm({
|
|
|
1088
1089
|
"button",
|
|
1089
1090
|
{
|
|
1090
1091
|
ref,
|
|
1092
|
+
type: "button",
|
|
1091
1093
|
disabled: disabled || isLoading,
|
|
1092
1094
|
className: cn(
|
|
1093
1095
|
"relative inline-flex items-center justify-center gap-2",
|
|
@@ -1181,6 +1183,11 @@ var init_Typography = __esm({
|
|
|
1181
1183
|
inherit: "text-inherit"
|
|
1182
1184
|
};
|
|
1183
1185
|
weightStyles = {
|
|
1186
|
+
// Neutral: an atom default of "none" must not override the variant's baked
|
|
1187
|
+
// weight (C-PATTERN-ENUM-BLOCKS-NEUTRAL-OVERRIDE — `variant={h2}` rendered
|
|
1188
|
+
// tiny because the ui-typography atom's `weight: light`/`size: xs` defaults
|
|
1189
|
+
// clobbered every variant).
|
|
1190
|
+
none: "",
|
|
1184
1191
|
light: "font-light",
|
|
1185
1192
|
normal: "font-normal",
|
|
1186
1193
|
medium: "font-medium",
|
|
@@ -1206,6 +1213,7 @@ var init_Typography = __esm({
|
|
|
1206
1213
|
label: "span"
|
|
1207
1214
|
};
|
|
1208
1215
|
typographySizeStyles = {
|
|
1216
|
+
none: "",
|
|
1209
1217
|
xs: "text-xs",
|
|
1210
1218
|
sm: "text-sm",
|
|
1211
1219
|
md: "text-base",
|
|
@@ -14405,7 +14413,7 @@ async function loadPrismLanguage(lang) {
|
|
|
14405
14413
|
if (isLanguageRegistered(lang)) return;
|
|
14406
14414
|
try {
|
|
14407
14415
|
const grammar = codeLanguageLoader ? await codeLanguageLoader(lang) : null;
|
|
14408
|
-
|
|
14416
|
+
SyntaxHighlighter.registerLanguage(lang, grammar ?? langClike);
|
|
14409
14417
|
dynamicallyLoaded.add(lang);
|
|
14410
14418
|
} catch {
|
|
14411
14419
|
dynamicallyLoaded.add(lang);
|
|
@@ -14574,6 +14582,7 @@ var init_CodeBlock = __esm({
|
|
|
14574
14582
|
SyntaxHighlighter.registerLanguage("make", langMakefile);
|
|
14575
14583
|
SyntaxHighlighter.registerLanguage("nginx", langNginx);
|
|
14576
14584
|
SyntaxHighlighter.registerLanguage("ini", langIni);
|
|
14585
|
+
SyntaxHighlighter.registerLanguage("clike", langClike);
|
|
14577
14586
|
SyntaxHighlighter.registerLanguage("orb", orbLanguage);
|
|
14578
14587
|
SyntaxHighlighter.registerLanguage("lolo", loloLanguage);
|
|
14579
14588
|
dynamicallyLoaded = /* @__PURE__ */ new Set();
|
|
@@ -15123,7 +15132,7 @@ var init_CodeBlock = __esm({
|
|
|
15123
15132
|
] }) });
|
|
15124
15133
|
}
|
|
15125
15134
|
const hasHeader = showLanguageBadge || effectiveCopy;
|
|
15126
|
-
return /* @__PURE__ */ jsxs(Box, { className: `relative group ${className || ""}`, style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
|
|
15135
|
+
return /* @__PURE__ */ jsxs(Box, { className: `relative group not-prose ${className || ""}`, style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
|
|
15127
15136
|
hasHeader && /* @__PURE__ */ jsxs(
|
|
15128
15137
|
HStack,
|
|
15129
15138
|
{
|
|
@@ -23066,6 +23075,13 @@ function DataGrid({
|
|
|
23066
23075
|
row: itemData
|
|
23067
23076
|
};
|
|
23068
23077
|
eventBus.emit(`UI:${action.event}`, payload);
|
|
23078
|
+
if (action.navigatesTo) {
|
|
23079
|
+
const url = action.navigatesTo.replace(
|
|
23080
|
+
/\{\{row\.(\w+(?:\.\w+)*)\}\}/g,
|
|
23081
|
+
(_, field) => String(itemData[field] ?? "")
|
|
23082
|
+
);
|
|
23083
|
+
eventBus.emit("UI:NAVIGATE", { url });
|
|
23084
|
+
}
|
|
23069
23085
|
};
|
|
23070
23086
|
const hasRenderProp = typeof children === "function";
|
|
23071
23087
|
useEffect(() => {
|
|
@@ -23133,13 +23149,49 @@ function DataGrid({
|
|
|
23133
23149
|
const wrapDnd = (node) => dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: dndId, children: node }, dndId) : node;
|
|
23134
23150
|
if (hasRenderProp) {
|
|
23135
23151
|
return wrapDnd(
|
|
23136
|
-
/* @__PURE__ */
|
|
23152
|
+
/* @__PURE__ */ jsxs(
|
|
23137
23153
|
Box,
|
|
23138
23154
|
{
|
|
23139
23155
|
"data-entity-row": true,
|
|
23140
23156
|
"data-entity-id": id,
|
|
23141
23157
|
className: cn(isSelected && "ring-2 ring-primary rounded-lg"),
|
|
23142
|
-
children:
|
|
23158
|
+
children: [
|
|
23159
|
+
children(itemData, index),
|
|
23160
|
+
actionDefs.length > 0 && /* @__PURE__ */ jsx(Box, { className: "px-4 py-3 border-t border-border", children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: "justify-end", children: [
|
|
23161
|
+
(maxInlineActions != null ? actionDefs.slice(0, maxInlineActions) : actionDefs).map((action, idx) => /* @__PURE__ */ jsxs(
|
|
23162
|
+
Button,
|
|
23163
|
+
{
|
|
23164
|
+
variant: action.variant === "primary" ? "primary" : "ghost",
|
|
23165
|
+
size: "sm",
|
|
23166
|
+
onClick: handleActionClick(action, itemData),
|
|
23167
|
+
"data-testid": `action-${action.event}`,
|
|
23168
|
+
"data-row-id": String(itemData.id),
|
|
23169
|
+
className: action.variant === "danger" ? "text-error hover:text-error hover:bg-error/10" : void 0,
|
|
23170
|
+
children: [
|
|
23171
|
+
action.icon && renderIconInput(action.icon, { size: "xs", className: "mr-1" }),
|
|
23172
|
+
action.label
|
|
23173
|
+
]
|
|
23174
|
+
},
|
|
23175
|
+
idx
|
|
23176
|
+
)),
|
|
23177
|
+
maxInlineActions != null && actionDefs.length > maxInlineActions && /* @__PURE__ */ jsx(
|
|
23178
|
+
Menu,
|
|
23179
|
+
{
|
|
23180
|
+
position: "bottom-end",
|
|
23181
|
+
trigger: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", "aria-label": t("common.actions"), "data-testid": "action-overflow", children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", size: "xs" }) }),
|
|
23182
|
+
items: actionDefs.slice(maxInlineActions).map((action) => ({
|
|
23183
|
+
label: action.label,
|
|
23184
|
+
icon: action.icon,
|
|
23185
|
+
event: action.event,
|
|
23186
|
+
onClick: () => eventBus.emit(`UI:${action.event}`, {
|
|
23187
|
+
id: itemData.id,
|
|
23188
|
+
row: itemData
|
|
23189
|
+
})
|
|
23190
|
+
}))
|
|
23191
|
+
}
|
|
23192
|
+
)
|
|
23193
|
+
] }) })
|
|
23194
|
+
]
|
|
23143
23195
|
},
|
|
23144
23196
|
id
|
|
23145
23197
|
)
|
|
@@ -24163,7 +24215,9 @@ var init_FilterGroup = __esm({
|
|
|
24163
24215
|
showIcon = true,
|
|
24164
24216
|
query,
|
|
24165
24217
|
isLoading,
|
|
24166
|
-
look = "toolbar"
|
|
24218
|
+
look = "toolbar",
|
|
24219
|
+
event,
|
|
24220
|
+
clearEvent
|
|
24167
24221
|
}) => {
|
|
24168
24222
|
const { t } = useTranslate();
|
|
24169
24223
|
const eventBus = useEventBus();
|
|
@@ -24200,14 +24254,18 @@ var init_FilterGroup = __esm({
|
|
|
24200
24254
|
queryState.setFilter(field, value === "all" ? null : value);
|
|
24201
24255
|
}
|
|
24202
24256
|
onFilterChange?.(field, value === "all" ? null : value);
|
|
24203
|
-
|
|
24257
|
+
const payload = {
|
|
24204
24258
|
entity,
|
|
24205
24259
|
field,
|
|
24206
24260
|
value: value === "all" || value === null ? "" : value,
|
|
24207
24261
|
query
|
|
24208
|
-
}
|
|
24262
|
+
};
|
|
24263
|
+
if (event && event !== "FILTER") {
|
|
24264
|
+
eventBus.emit(`UI:${event}`, payload);
|
|
24265
|
+
}
|
|
24266
|
+
eventBus.emit("UI:FILTER", payload);
|
|
24209
24267
|
},
|
|
24210
|
-
[onFilterChange, queryState, eventBus, entity, query]
|
|
24268
|
+
[onFilterChange, queryState, eventBus, entity, query, event]
|
|
24211
24269
|
);
|
|
24212
24270
|
const handleClearAll = useCallback(() => {
|
|
24213
24271
|
setSelectedValues({});
|
|
@@ -24215,8 +24273,11 @@ var init_FilterGroup = __esm({
|
|
|
24215
24273
|
queryState.clearFilters();
|
|
24216
24274
|
}
|
|
24217
24275
|
onClearAll?.();
|
|
24276
|
+
if (clearEvent && clearEvent !== "CLEAR_FILTERS") {
|
|
24277
|
+
eventBus.emit(`UI:${clearEvent}`, { entity, query });
|
|
24278
|
+
}
|
|
24218
24279
|
eventBus.emit("UI:CLEAR_FILTERS", { entity, query });
|
|
24219
|
-
}, [onClearAll, queryState, eventBus, entity, query]);
|
|
24280
|
+
}, [onClearAll, queryState, eventBus, entity, query, clearEvent]);
|
|
24220
24281
|
const activeFilterCount = Object.keys(selectedValues).length;
|
|
24221
24282
|
if (variant === "pills") {
|
|
24222
24283
|
return /* @__PURE__ */ jsxs(
|
|
@@ -25344,7 +25405,7 @@ var init_SearchInput = __esm({
|
|
|
25344
25405
|
queryState.setSearch(newValue);
|
|
25345
25406
|
}
|
|
25346
25407
|
onSearch?.(newValue);
|
|
25347
|
-
if (event) {
|
|
25408
|
+
if (event && event !== "SEARCH") {
|
|
25348
25409
|
eventBus.emit(`UI:${event}`, { searchTerm: newValue, entity });
|
|
25349
25410
|
}
|
|
25350
25411
|
if (event || entity || query) {
|