@burdenoff/fluidgrids-fe-sdk 2026.716.12 → 2026.720.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/ExecutionDetailPage-6ASC7CJW.js +8 -0
  2. package/dist/{ExecutionDetailPage-4RT4QFRT.js.map → ExecutionDetailPage-6ASC7CJW.js.map} +1 -1
  3. package/dist/ExecutionsListPage-OWOKDVXQ.js +8 -0
  4. package/dist/{ExecutionsListPage-I63SHREF.js.map → ExecutionsListPage-OWOKDVXQ.js.map} +1 -1
  5. package/dist/{TemplateConfigurationModal-ZMCT3ZCH.js → TemplateConfigurationModal-MTR7VP6G.js} +6 -5
  6. package/dist/TemplateConfigurationModal-MTR7VP6G.js.map +1 -0
  7. package/dist/{TemplateDetailPanel-UXH6KPCH.js → TemplateDetailPanel-T3ZHXOHX.js} +4 -3
  8. package/dist/TemplateDetailPanel-T3ZHXOHX.js.map +1 -0
  9. package/dist/WorkflowBuilder-COJQ2YBJ.js +16 -0
  10. package/dist/{WorkflowBuilder-2VTEBTJ6.js.map → WorkflowBuilder-COJQ2YBJ.js.map} +1 -1
  11. package/dist/WorkflowsList-AY6ZANWN.js +10 -0
  12. package/dist/{WorkflowsList-4RBTKPUJ.js.map → WorkflowsList-AY6ZANWN.js.map} +1 -1
  13. package/dist/{blocks-XUSH3L5M.js → blocks-J3YIE73T.js} +6 -4
  14. package/dist/{blocks-XUSH3L5M.js.map → blocks-J3YIE73T.js.map} +1 -1
  15. package/dist/chunk-3ZYUGTIT.js +10 -0
  16. package/dist/chunk-3ZYUGTIT.js.map +1 -0
  17. package/dist/{chunk-WTKD76BY.js → chunk-52EJMXGS.js} +12 -8
  18. package/dist/chunk-52EJMXGS.js.map +1 -0
  19. package/dist/{chunk-G7B4SYFM.js → chunk-6QCBKN3P.js} +3 -3
  20. package/dist/{chunk-G7B4SYFM.js.map → chunk-6QCBKN3P.js.map} +1 -1
  21. package/dist/{chunk-Z54K22LP.js → chunk-DBOMRIP5.js} +4 -8
  22. package/dist/chunk-DBOMRIP5.js.map +1 -0
  23. package/dist/{chunk-JXH7PRTS.js → chunk-DVSO5MTE.js} +3 -3
  24. package/dist/{chunk-JXH7PRTS.js.map → chunk-DVSO5MTE.js.map} +1 -1
  25. package/dist/{chunk-6MZFOWEO.js → chunk-EQVBECAC.js} +2 -2
  26. package/dist/chunk-EQVBECAC.js.map +1 -0
  27. package/dist/{chunk-5SENVZ7D.js → chunk-JVARXRIW.js} +296 -108
  28. package/dist/chunk-JVARXRIW.js.map +1 -0
  29. package/dist/{chunk-7VEOUEIN.js → chunk-MRVS73S2.js} +3 -3
  30. package/dist/{chunk-7VEOUEIN.js.map → chunk-MRVS73S2.js.map} +1 -1
  31. package/dist/{chunk-UYPB5TWQ.js → chunk-PNOA7CQV.js} +5 -2
  32. package/dist/chunk-PNOA7CQV.js.map +1 -0
  33. package/dist/{chunk-DKEETQVV.js → chunk-S2Z7ZTGV.js} +41 -30
  34. package/dist/chunk-S2Z7ZTGV.js.map +1 -0
  35. package/dist/chunk-UIY2HBWA.js +156 -0
  36. package/dist/chunk-UIY2HBWA.js.map +1 -0
  37. package/dist/{chunk-5W4EAURJ.js → chunk-ZPBFAT6K.js} +64 -44
  38. package/dist/chunk-ZPBFAT6K.js.map +1 -0
  39. package/dist/{global-operations-5FLHXHG3.js → global-operations-KVVOANLT.js} +3 -3
  40. package/dist/{global-operations-5FLHXHG3.js.map → global-operations-KVVOANLT.js.map} +1 -1
  41. package/dist/index.d.ts +139 -2
  42. package/dist/index.js +22 -36
  43. package/dist/index.js.map +1 -1
  44. package/package.json +1 -1
  45. package/dist/ExecutionDetailPage-4RT4QFRT.js +0 -6
  46. package/dist/ExecutionsListPage-I63SHREF.js +0 -8
  47. package/dist/TemplateConfigurationModal-ZMCT3ZCH.js.map +0 -1
  48. package/dist/TemplateDetailPanel-UXH6KPCH.js.map +0 -1
  49. package/dist/WorkflowBuilder-2VTEBTJ6.js +0 -14
  50. package/dist/WorkflowsList-4RBTKPUJ.js +0 -8
  51. package/dist/chunk-5SENVZ7D.js.map +0 -1
  52. package/dist/chunk-5W4EAURJ.js.map +0 -1
  53. package/dist/chunk-6MZFOWEO.js.map +0 -1
  54. package/dist/chunk-DKEETQVV.js.map +0 -1
  55. package/dist/chunk-UYPB5TWQ.js.map +0 -1
  56. package/dist/chunk-WTKD76BY.js.map +0 -1
  57. package/dist/chunk-Z54K22LP.js.map +0 -1
@@ -1,10 +1,12 @@
1
- import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, Input as Input$1, DialogFooter } from './chunk-7VEOUEIN.js';
2
- import { cn, Badge as Badge$1, Button } from './chunk-Z54K22LP.js';
3
- import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useSaveWorkflow, useNodeExecution, getNodeDetail, ConnectionSelector, createNodeWithDefaultData, NODE_CONFIGS, NODES_METADATA, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-DKEETQVV.js';
1
+ import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, Input as Input$1, DialogFooter } from './chunk-MRVS73S2.js';
2
+ import { Badge as Badge$1, Button } from './chunk-DBOMRIP5.js';
3
+ import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useSaveWorkflow, useNodeExecution, getNodeDetail, ConnectionSelector, createNodeWithDefaultData, NODE_CONFIGS, NODES_METADATA, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-S2Z7ZTGV.js';
4
4
  import { createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient, getGlobalStoreClient } from './chunk-BQXHJIER.js';
5
- import { BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, GetMyNodeInstallationsDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-UYPB5TWQ.js';
5
+ import { BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, GetMyNodeInstallationsDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-PNOA7CQV.js';
6
6
  import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeactivateWorkflow } from './chunk-OHIRHNRJ.js';
7
7
  import { useFlowStore } from './chunk-KU64CCSV.js';
8
+ import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS } from './chunk-UIY2HBWA.js';
9
+ import { cn } from './chunk-3ZYUGTIT.js';
8
10
  import { throwIfResultError, NodeSchemaIntrospectionDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-4NTHFDKQ.js';
9
11
  import { createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClient } from './chunk-5BDQNSP3.js';
10
12
  import { validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig, getFluidGridsConfig } from './chunk-WWU2O2SR.js';
@@ -1384,11 +1386,14 @@ function useInstalledNodes() {
1384
1386
  fetchPolicy: "cache-and-network"
1385
1387
  });
1386
1388
  const installations = data?.myStoreAppInstallations?.items || [];
1389
+ const activeInstallations = installations.filter(
1390
+ (item) => item.status === "ACTIVE"
1391
+ );
1387
1392
  const installedAppIds = new Set(
1388
- installations.filter((item) => item.status === "ACTIVE").map((item) => item.productId)
1393
+ activeInstallations.map((item) => item.productId)
1389
1394
  );
1390
1395
  const installationsMap = new Map(
1391
- installations.filter((item) => item.status === "ACTIVE").map((item) => [
1396
+ activeInstallations.map((item) => [
1392
1397
  item.productId,
1393
1398
  {
1394
1399
  installedVersion: item.version ?? void 0,
@@ -1397,10 +1402,14 @@ function useInstalledNodes() {
1397
1402
  }
1398
1403
  ])
1399
1404
  );
1405
+ const deprecatedInstallations = activeInstallations.filter(
1406
+ (item) => item.productStatus === "UNLISTED"
1407
+ );
1400
1408
  return {
1401
1409
  installations,
1402
1410
  installedAppIds,
1403
1411
  installationsMap,
1412
+ deprecatedInstallations,
1404
1413
  installedNodeTypes: /* @__PURE__ */ new Set(),
1405
1414
  totalCount: data?.myStoreAppInstallations?.total || 0,
1406
1415
  loading,
@@ -2278,6 +2287,7 @@ function StoreNodeListItem({
2278
2287
  isInstalled,
2279
2288
  isPrebuilt,
2280
2289
  hasUpdate,
2290
+ isDeprecated,
2281
2291
  nodeType,
2282
2292
  isDraggable,
2283
2293
  onClick
@@ -2300,11 +2310,30 @@ function StoreNodeListItem({
2300
2310
  className: "w-full flex items-center gap-3 px-2 py-2.5 rounded-md hover:bg-muted/60 transition-colors text-left group",
2301
2311
  style: isDraggable ? { cursor: "grab" } : void 0,
2302
2312
  children: [
2303
- /* @__PURE__ */ jsx("div", { className: "size-9 shrink-0 rounded-lg bg-muted flex items-center justify-center overflow-hidden", children: icon ? /* @__PURE__ */ jsx("img", { src: icon, alt: name, className: "w-full h-full object-cover" }) : /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-muted-foreground", children: name.charAt(0).toUpperCase() }) }),
2313
+ /* @__PURE__ */ jsx("div", { className: "relative size-9 shrink-0 rounded-lg bg-muted flex items-center justify-center overflow-hidden", children: icon ? /* @__PURE__ */ jsx(
2314
+ "img",
2315
+ {
2316
+ src: icon,
2317
+ alt: name,
2318
+ className: "w-full h-full object-cover"
2319
+ }
2320
+ ) : /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-muted-foreground", children: name.charAt(0).toUpperCase() }) }),
2304
2321
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
2305
2322
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 flex-wrap", children: [
2306
2323
  /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors truncate", children: name }),
2307
- hasUpdate && /* @__PURE__ */ jsx(
2324
+ isDeprecated && /* @__PURE__ */ jsx(
2325
+ "span",
2326
+ {
2327
+ title: "This node is no longer supported. Consider migrating to a newer alternative.",
2328
+ className: "shrink-0 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-semibold cursor-help",
2329
+ style: {
2330
+ background: "var(--color-status-warning-bgSubtle)",
2331
+ color: "var(--color-status-warning-text)"
2332
+ },
2333
+ children: "Deprecated"
2334
+ }
2335
+ ),
2336
+ hasUpdate && !isDeprecated && /* @__PURE__ */ jsx(
2308
2337
  "span",
2309
2338
  {
2310
2339
  className: "shrink-0 inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-semibold",
@@ -2315,7 +2344,7 @@ function StoreNodeListItem({
2315
2344
  children: "Update"
2316
2345
  }
2317
2346
  ),
2318
- isInstalled && !hasUpdate && /* @__PURE__ */ jsxs(
2347
+ isInstalled && !hasUpdate && !isDeprecated && /* @__PURE__ */ jsxs(
2319
2348
  "span",
2320
2349
  {
2321
2350
  className: "shrink-0 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-semibold",
@@ -2335,7 +2364,7 @@ function StoreNodeListItem({
2335
2364
  ]
2336
2365
  }
2337
2366
  ),
2338
- isPrebuilt && !isInstalled && !hasUpdate && /* @__PURE__ */ jsxs(
2367
+ isPrebuilt && !isInstalled && !hasUpdate && !isDeprecated && /* @__PURE__ */ jsxs(
2339
2368
  "span",
2340
2369
  {
2341
2370
  className: "shrink-0 inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-semibold",
@@ -2375,6 +2404,34 @@ function StoreNodeListItem({
2375
2404
  }
2376
2405
  );
2377
2406
  }
2407
+ function deprecatedItemToProduct(item) {
2408
+ return {
2409
+ id: item.productId,
2410
+ name: item.productName ?? "Unknown Node",
2411
+ icon: item.productIcon ?? null,
2412
+ description: null,
2413
+ type: null,
2414
+ subType: null,
2415
+ slug: "",
2416
+ rating: null,
2417
+ reviewCount: null,
2418
+ downloads: null,
2419
+ price: null,
2420
+ pricingModel: "FREE",
2421
+ currency: null,
2422
+ featured: false,
2423
+ manifest: item.manifest ?? null,
2424
+ manifestVersion: item.version ?? null,
2425
+ authorName: null,
2426
+ license: null,
2427
+ compatibleProducts: null,
2428
+ requiredPermissions: null,
2429
+ integrationDeps: null,
2430
+ zipFileUrl: null,
2431
+ isPurchased: null,
2432
+ publisher: null
2433
+ };
2434
+ }
2378
2435
  function StoreCategoryList({
2379
2436
  searchTerm,
2380
2437
  onSearchChange,
@@ -2382,6 +2439,7 @@ function StoreCategoryList({
2382
2439
  onSelectNode
2383
2440
  }) {
2384
2441
  const isSearching = searchTerm.trim().length > 0;
2442
+ const [showDeprecated, setShowDeprecated] = useState(false);
2385
2443
  const { products, loading, hasMore, fetchMore } = useStoreNodes({
2386
2444
  filter: {
2387
2445
  type: "NODE",
@@ -2389,7 +2447,10 @@ function StoreCategoryList({
2389
2447
  search: isSearching ? searchTerm.trim() : void 0
2390
2448
  }
2391
2449
  });
2392
- const { installedAppIds, installationsMap } = useInstalledNodes();
2450
+ const { installedAppIds, installationsMap, deprecatedInstallations } = useInstalledNodes();
2451
+ const filteredDeprecated = isSearching ? deprecatedInstallations.filter(
2452
+ (item) => (item.productName ?? "").toLowerCase().includes(searchTerm.trim().toLowerCase())
2453
+ ) : deprecatedInstallations;
2393
2454
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full overflow-hidden", children: [
2394
2455
  /* @__PURE__ */ jsx("div", { className: "px-3 pt-3 pb-2 shrink-0", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
2395
2456
  /* @__PURE__ */ jsx(
@@ -2403,7 +2464,10 @@ function StoreCategoryList({
2403
2464
  Input$1,
2404
2465
  {
2405
2466
  value: searchTerm,
2406
- onChange: (e) => onSearchChange(e.target.value),
2467
+ onChange: (e) => {
2468
+ onSearchChange(e.target.value);
2469
+ setShowDeprecated(false);
2470
+ },
2407
2471
  placeholder: "Search nodes...",
2408
2472
  className: "pl-8 text-sm h-9"
2409
2473
  }
@@ -2418,44 +2482,59 @@ function StoreCategoryList({
2418
2482
  )
2419
2483
  ] }) }),
2420
2484
  isSearching ? (
2421
- /* Search results */
2422
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: loading && products.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-10", children: /* @__PURE__ */ jsx(
2485
+ /* Search results — deprecated nodes that match appear inline */
2486
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: loading && products.length === 0 && filteredDeprecated.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-10", children: /* @__PURE__ */ jsx(
2423
2487
  Icon,
2424
2488
  {
2425
2489
  icon: "mynaui:spinner",
2426
2490
  className: "size-5 text-primary animate-spin"
2427
2491
  }
2428
- ) }) : products.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-center py-10 px-4", children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
2492
+ ) }) : products.length === 0 && filteredDeprecated.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-center py-10 px-4", children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
2429
2493
  "No nodes found for \u201C",
2430
2494
  searchTerm,
2431
2495
  "\u201D"
2432
2496
  ] }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2433
2497
  /* @__PURE__ */ jsxs("p", { className: "px-2 py-1.5 text-xs text-muted-foreground font-medium", children: [
2434
- products.length,
2498
+ products.length + filteredDeprecated.length,
2435
2499
  " result",
2436
- products.length !== 1 ? "s" : ""
2500
+ products.length + filteredDeprecated.length !== 1 ? "s" : ""
2437
2501
  ] }),
2438
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: products.map((node) => {
2439
- const installation = installationsMap.get(node.id);
2440
- const isInstalled = installedAppIds.has(node.id);
2441
- const hasUpdate = isInstalled && !!installation?.installedVersion && !!node.manifestVersion && installation.installedVersion !== node.manifestVersion;
2442
- const { nodeType, isPrebuilt, isDraggable } = getStoreNodeAvailability(node, isInstalled);
2443
- return /* @__PURE__ */ jsx(
2502
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5", children: [
2503
+ products.map((node) => {
2504
+ const installation = installationsMap.get(node.id);
2505
+ const isInstalled = installedAppIds.has(node.id);
2506
+ const hasUpdate = isInstalled && !!installation?.installedVersion && !!node.manifestVersion && installation.installedVersion !== node.manifestVersion;
2507
+ const { nodeType, isPrebuilt, isDraggable } = getStoreNodeAvailability(node, isInstalled);
2508
+ return /* @__PURE__ */ jsx(
2509
+ StoreNodeListItem,
2510
+ {
2511
+ name: node.name,
2512
+ description: node.description,
2513
+ icon: node.icon,
2514
+ isInstalled,
2515
+ isPrebuilt,
2516
+ hasUpdate,
2517
+ nodeType,
2518
+ isDraggable,
2519
+ onClick: () => onSelectNode(node)
2520
+ },
2521
+ node.id
2522
+ );
2523
+ }),
2524
+ filteredDeprecated.map((item) => /* @__PURE__ */ jsx(
2444
2525
  StoreNodeListItem,
2445
2526
  {
2446
- name: node.name,
2447
- description: node.description,
2448
- icon: node.icon,
2449
- isInstalled,
2450
- isPrebuilt,
2451
- hasUpdate,
2452
- nodeType,
2453
- isDraggable,
2454
- onClick: () => onSelectNode(node)
2527
+ name: item.productName ?? "Unknown Node",
2528
+ description: null,
2529
+ icon: item.productIcon ?? void 0,
2530
+ isInstalled: true,
2531
+ hasUpdate: false,
2532
+ isDeprecated: true,
2533
+ onClick: () => onSelectNode(deprecatedItemToProduct(item))
2455
2534
  },
2456
- node.id
2457
- );
2458
- }) }),
2535
+ item.productId
2536
+ ))
2537
+ ] }),
2459
2538
  hasMore && /* @__PURE__ */ jsx(
2460
2539
  "button",
2461
2540
  {
@@ -2465,44 +2544,130 @@ function StoreCategoryList({
2465
2544
  }
2466
2545
  )
2467
2546
  ] }) })
2547
+ ) : showDeprecated ? (
2548
+ /* Deprecated nodes list — shown when user drills into the Deprecated category */
2549
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: [
2550
+ /* @__PURE__ */ jsxs(
2551
+ "button",
2552
+ {
2553
+ onClick: () => setShowDeprecated(false),
2554
+ className: "flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors px-2 py-2",
2555
+ children: [
2556
+ /* @__PURE__ */ jsx(Icon, { icon: "mynaui:chevron-left", className: "size-3.5" }),
2557
+ "Back"
2558
+ ]
2559
+ }
2560
+ ),
2561
+ /* @__PURE__ */ jsxs("p", { className: "px-2 py-1 text-xs text-muted-foreground font-medium", children: [
2562
+ deprecatedInstallations.length,
2563
+ " deprecated node",
2564
+ deprecatedInstallations.length !== 1 ? "s" : ""
2565
+ ] }),
2566
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5", children: deprecatedInstallations.map((item) => /* @__PURE__ */ jsx(
2567
+ StoreNodeListItem,
2568
+ {
2569
+ name: item.productName ?? "Unknown Node",
2570
+ description: null,
2571
+ icon: item.productIcon ?? void 0,
2572
+ isInstalled: true,
2573
+ hasUpdate: false,
2574
+ isDeprecated: true,
2575
+ onClick: () => onSelectNode(deprecatedItemToProduct(item))
2576
+ },
2577
+ item.productId
2578
+ )) })
2579
+ ] })
2468
2580
  ) : (
2469
- /* Category list */
2470
- /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 pt-1", children: STORE_CATEGORIES.map((cat) => /* @__PURE__ */ jsxs(
2471
- "button",
2472
- {
2473
- onClick: () => onSelectCategory(cat),
2474
- className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
2475
- children: [
2476
- /* @__PURE__ */ jsx(
2477
- "div",
2478
- {
2479
- className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
2480
- style: { backgroundColor: `color-mix(in oklab, var(${cat.color}) 16%, transparent)` },
2481
- children: /* @__PURE__ */ jsx(
2482
- Icon,
2581
+ /* Main category list */
2582
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto px-2 pb-2", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 pt-1", children: [
2583
+ STORE_CATEGORIES.map((cat) => /* @__PURE__ */ jsxs(
2584
+ "button",
2585
+ {
2586
+ onClick: () => onSelectCategory(cat),
2587
+ className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
2588
+ children: [
2589
+ /* @__PURE__ */ jsx(
2590
+ "div",
2591
+ {
2592
+ className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
2593
+ style: {
2594
+ backgroundColor: `color-mix(in oklab, var(${cat.color}) 16%, transparent)`
2595
+ },
2596
+ children: /* @__PURE__ */ jsx(
2597
+ Icon,
2598
+ {
2599
+ icon: cat.icon,
2600
+ className: "size-5",
2601
+ style: { color: `var(${cat.color})` }
2602
+ }
2603
+ )
2604
+ }
2605
+ ),
2606
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
2607
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: cat.label }),
2608
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: cat.description })
2609
+ ] }),
2610
+ /* @__PURE__ */ jsx(
2611
+ Icon,
2612
+ {
2613
+ icon: "mynaui:chevron-right",
2614
+ className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
2615
+ }
2616
+ )
2617
+ ]
2618
+ },
2619
+ cat.key
2620
+ )),
2621
+ deprecatedInstallations.length > 0 && /* @__PURE__ */ jsxs(
2622
+ "button",
2623
+ {
2624
+ onClick: () => setShowDeprecated(true),
2625
+ className: "w-full flex items-center gap-3 px-2 py-3 rounded-lg border border-transparent hover:border-default hover:bg-muted/60 transition-colors text-left group",
2626
+ children: [
2627
+ /* @__PURE__ */ jsx(
2628
+ "div",
2629
+ {
2630
+ className: "size-9 shrink-0 rounded-lg flex items-center justify-center",
2631
+ style: {
2632
+ backgroundColor: "var(--color-status-warning-bgSubtle, color-mix(in oklab, #f59e0b 16%, transparent))"
2633
+ },
2634
+ children: /* @__PURE__ */ jsx(
2635
+ Icon,
2636
+ {
2637
+ icon: "mynaui:circle-warning",
2638
+ className: "size-5",
2639
+ style: { color: "var(--color-status-warning-text, #d97706)" }
2640
+ }
2641
+ )
2642
+ }
2643
+ ),
2644
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
2645
+ /* @__PURE__ */ jsx(
2646
+ "p",
2483
2647
  {
2484
- icon: cat.icon,
2485
- className: "size-5",
2486
- style: { color: `var(${cat.color})` }
2648
+ className: "text-sm font-medium group-hover:text-primary transition-colors",
2649
+ style: { color: "var(--color-status-warning-text, #d97706)" },
2650
+ children: "Deprecated"
2487
2651
  }
2488
- )
2489
- }
2490
- ),
2491
- /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
2492
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground group-hover:text-primary transition-colors", children: cat.label }),
2493
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: cat.description })
2494
- ] }),
2495
- /* @__PURE__ */ jsx(
2496
- Icon,
2497
- {
2498
- icon: "mynaui:chevron-right",
2499
- className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
2500
- }
2501
- )
2502
- ]
2503
- },
2504
- cat.key
2505
- )) }) })
2652
+ ),
2653
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground truncate mt-0.5", children: [
2654
+ deprecatedInstallations.length,
2655
+ " node",
2656
+ deprecatedInstallations.length !== 1 ? "s" : "",
2657
+ " no longer supported"
2658
+ ] })
2659
+ ] }),
2660
+ /* @__PURE__ */ jsx(
2661
+ Icon,
2662
+ {
2663
+ icon: "mynaui:chevron-right",
2664
+ className: "size-4 shrink-0 text-foreground/40 group-hover:translate-x-0.5 transition-transform"
2665
+ }
2666
+ )
2667
+ ]
2668
+ }
2669
+ )
2670
+ ] }) })
2506
2671
  )
2507
2672
  ] });
2508
2673
  }
@@ -3486,7 +3651,7 @@ function TemplatesGrid({
3486
3651
  ] });
3487
3652
  }
3488
3653
  var LazyTemplateDetailPanel = lazy(
3489
- () => import('./TemplateDetailPanel-UXH6KPCH.js').then((m) => ({
3654
+ () => import('./TemplateDetailPanel-T3ZHXOHX.js').then((m) => ({
3490
3655
  default: m.TemplateDetailPanel
3491
3656
  }))
3492
3657
  );
@@ -3611,7 +3776,7 @@ function TemplatesModal({
3611
3776
  ) });
3612
3777
  }
3613
3778
  var LazyTemplateConfigurationModal = lazy(
3614
- () => import('./TemplateConfigurationModal-ZMCT3ZCH.js').then((m) => ({
3779
+ () => import('./TemplateConfigurationModal-MTR7VP6G.js').then((m) => ({
3615
3780
  default: m.TemplateConfigurationModal
3616
3781
  }))
3617
3782
  );
@@ -3659,7 +3824,7 @@ function DesktopSidebarFragment({
3659
3824
  );
3660
3825
  if (nodesToInstall.length > 0) {
3661
3826
  const { getGlobalStoreClient: getStore } = await import('./global-client-OW43ZRDR.js');
3662
- const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-5FLHXHG3.js');
3827
+ const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-KVVOANLT.js');
3663
3828
  const { getFluidGridsConfig: getFluidGridsConfig3 } = await import('./config-E4E7M6IN.js');
3664
3829
  const storeClient = getStore();
3665
3830
  const cfg = getFluidGridsConfig3();
@@ -3758,7 +3923,7 @@ function DesktopSidebarFragment({
3758
3923
  if (importResult?.success && importResult.workflow) {
3759
3924
  try {
3760
3925
  const { getGlobalStoreClient: getStoreClient } = await import('./global-client-OW43ZRDR.js');
3761
- const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-5FLHXHG3.js');
3926
+ const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-KVVOANLT.js');
3762
3927
  const storeClient = getStoreClient();
3763
3928
  if (storeClient) {
3764
3929
  throwIfResultError(
@@ -3903,7 +4068,7 @@ function DesktopSidebarFragment({
3903
4068
  if (nodes) {
3904
4069
  const requiredNodeTypes = [];
3905
4070
  try {
3906
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-XUSH3L5M.js');
4071
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-J3YIE73T.js');
3907
4072
  await ensureNodeConfigsLoaded2().catch(() => {
3908
4073
  });
3909
4074
  const workflowNodeTypes = [
@@ -3915,7 +4080,7 @@ function DesktopSidebarFragment({
3915
4080
  (type) => !NODE_CONFIGS3.some((c) => c.type === type)
3916
4081
  );
3917
4082
  if (missingTypes.length > 0) {
3918
- const { BrowseWorkflowNodesDocument: BrowseWorkflowNodesDocument2 } = await import('./global-operations-5FLHXHG3.js');
4083
+ const { BrowseWorkflowNodesDocument: BrowseWorkflowNodesDocument2 } = await import('./global-operations-KVVOANLT.js');
3919
4084
  const storeResult = await client.query({
3920
4085
  query: BrowseWorkflowNodesDocument2,
3921
4086
  variables: {
@@ -10854,18 +11019,28 @@ var SaveFlowButton = ({ className }) => {
10854
11019
  });
10855
11020
  }
10856
11021
  });
10857
- return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
10858
- Button$1,
11022
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
11023
+ SdkPermissionButton,
10859
11024
  {
10860
- onClick: validateFlow,
10861
- disabled: isValidating || isSaving,
10862
- variant: "outline",
10863
- size: "sm",
10864
- className: cn$1("flex gap-4", className),
10865
- children: [
10866
- /* @__PURE__ */ jsx(Icon, { icon: "fluent:save-28-filled" }),
10867
- isSaving ? "Saving..." : "Save"
10868
- ]
11025
+ permission: [
11026
+ FLUIDGRIDS_PERMISSIONS.WORKFLOW_UPDATE,
11027
+ FLUIDGRIDS_PERMISSIONS.WORKFLOW_CREATE
11028
+ ],
11029
+ deniedTooltip: "You don't have permission to save workflows",
11030
+ children: /* @__PURE__ */ jsxs(
11031
+ Button$1,
11032
+ {
11033
+ onClick: validateFlow,
11034
+ disabled: isValidating || isSaving,
11035
+ variant: "outline",
11036
+ size: "sm",
11037
+ className: cn$1("flex gap-4", className),
11038
+ children: [
11039
+ /* @__PURE__ */ jsx(Icon, { icon: "fluent:save-28-filled" }),
11040
+ isSaving ? "Saving..." : "Save"
11041
+ ]
11042
+ }
11043
+ )
10869
11044
  }
10870
11045
  ) });
10871
11046
  };
@@ -11038,21 +11213,28 @@ var ExecuteWorkflowButton = ({
11038
11213
  }
11039
11214
  });
11040
11215
  return /* @__PURE__ */ jsxs(Fragment, { children: [
11041
- /* @__PURE__ */ jsxs(
11042
- Button$1,
11216
+ /* @__PURE__ */ jsx(
11217
+ SdkPermissionButton,
11043
11218
  {
11044
- onClick: validateFlow,
11045
- disabled: isValidating || isExecuting,
11046
- variant: "default",
11047
- size: "sm",
11048
- className: cn$1(
11049
- "flex items-center justify-center gap-2 h-8 rounded-l-lg rounded-r-none px-3 bg-[var(--color-status-success-bg)] hover:bg-[var(--color-status-success-bg)]/90 text-[var(--color-text-on-status)] font-medium",
11050
- className
11051
- ),
11052
- children: [
11053
- /* @__PURE__ */ jsx(Icon, { icon: "mdi:play", className: "size-4" }),
11054
- isExecuting ? "Running..." : isValidating ? "Validating..." : "Run"
11055
- ]
11219
+ permission: FLUIDGRIDS_PERMISSIONS.WORKFLOW_EXECUTE,
11220
+ deniedTooltip: "You don't have permission to execute workflows",
11221
+ children: /* @__PURE__ */ jsxs(
11222
+ Button$1,
11223
+ {
11224
+ onClick: validateFlow,
11225
+ disabled: isValidating || isExecuting,
11226
+ variant: "default",
11227
+ size: "sm",
11228
+ className: cn$1(
11229
+ "flex items-center justify-center gap-2 h-8 rounded-l-lg rounded-r-none px-3 bg-[var(--color-status-success-bg)] hover:bg-[var(--color-status-success-bg)]/90 text-[var(--color-text-on-status)] font-medium",
11230
+ className
11231
+ ),
11232
+ children: [
11233
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:play", className: "size-4" }),
11234
+ isExecuting ? "Running..." : isValidating ? "Validating..." : "Run"
11235
+ ]
11236
+ }
11237
+ )
11056
11238
  }
11057
11239
  ),
11058
11240
  /* @__PURE__ */ jsx(
@@ -13393,7 +13575,13 @@ var FlowBuilder = ({ readOnly = false }) => {
13393
13575
  /* @__PURE__ */ jsx(VersionHistoryPanel, {}),
13394
13576
  /* @__PURE__ */ jsx(SaveFlowButton, {}),
13395
13577
  /* @__PURE__ */ jsx(ActivateWorkflowButton, {}),
13396
- /* @__PURE__ */ jsx(RunWithViewRuns, { onViewRuns: handleViewRuns, canViewRuns: !!id })
13578
+ /* @__PURE__ */ jsx(
13579
+ RunWithViewRuns,
13580
+ {
13581
+ onViewRuns: handleViewRuns,
13582
+ canViewRuns: !!id
13583
+ }
13584
+ )
13397
13585
  ] }),
13398
13586
  /* @__PURE__ */ jsx("div", { className: "lg:hidden", children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
13399
13587
  /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
@@ -13582,7 +13770,7 @@ var FlowBuilderPage = ({
13582
13770
  ] });
13583
13771
  };
13584
13772
  var LazyTemplateConfigurationModal2 = lazy(
13585
- () => import('./TemplateConfigurationModal-ZMCT3ZCH.js').then(
13773
+ () => import('./TemplateConfigurationModal-MTR7VP6G.js').then(
13586
13774
  (m) => ({ default: m.TemplateConfigurationModal })
13587
13775
  )
13588
13776
  );
@@ -13642,7 +13830,7 @@ function WorkflowItem({
13642
13830
  setInstalling(true);
13643
13831
  try {
13644
13832
  const { getGlobalStoreClient: getGlobalStoreClient2 } = await import('./global-client-OW43ZRDR.js');
13645
- const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-5FLHXHG3.js');
13833
+ const { InstallWorkflowNodeDocument: InstallWorkflowNodeDocument2 } = await import('./global-operations-KVVOANLT.js');
13646
13834
  const { getFluidGridsConfig: getFluidGridsConfig2 } = await import('./config-E4E7M6IN.js');
13647
13835
  const storeClient = getGlobalStoreClient2();
13648
13836
  const cfg = getFluidGridsConfig2();
@@ -13722,7 +13910,7 @@ function WorkflowItem({
13722
13910
  };
13723
13911
  const requiredNodeTypes = [];
13724
13912
  try {
13725
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-XUSH3L5M.js');
13913
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-J3YIE73T.js');
13726
13914
  await ensureNodeConfigsLoaded2().catch(() => {
13727
13915
  });
13728
13916
  const workflowNodeTypes = [
@@ -13735,7 +13923,7 @@ function WorkflowItem({
13735
13923
  );
13736
13924
  if (missingTypes.length > 0) {
13737
13925
  const { getGlobalStoreClient: getGlobalStoreClient2 } = await import('./global-client-OW43ZRDR.js');
13738
- const { BrowseWorkflowNodesDocument: BrowseWorkflowNodesDocument2 } = await import('./global-operations-5FLHXHG3.js');
13926
+ const { BrowseWorkflowNodesDocument: BrowseWorkflowNodesDocument2 } = await import('./global-operations-KVVOANLT.js');
13739
13927
  const storeClient = getGlobalStoreClient2();
13740
13928
  if (storeClient) {
13741
13929
  const storeResult = await storeClient.query({
@@ -13991,5 +14179,5 @@ function WorkflowBuilder() {
13991
14179
  }
13992
14180
 
13993
14181
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsProvider, TemplateCard, WorkflowBuilder, useFluidGridsContext, useImportWorkflowTemplate, useWorkflowTemplates };
13994
- //# sourceMappingURL=chunk-5SENVZ7D.js.map
13995
- //# sourceMappingURL=chunk-5SENVZ7D.js.map
14182
+ //# sourceMappingURL=chunk-JVARXRIW.js.map
14183
+ //# sourceMappingURL=chunk-JVARXRIW.js.map