@burdenoff/fluidgrids-fe-sdk 2026.1031.2 → 2026.1031.3

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.
@@ -1,8 +1,10 @@
1
+ import { templatePreview } from './chunk-B6CCE2RW.js';
1
2
  import { Button, Badge } from './chunk-BQXVT32O.js';
2
3
  import './chunk-JL7CASN5.js';
3
4
  import { useTr } from './chunk-UULVIT25.js';
4
5
  import './chunk-62GWEYJ5.js';
5
6
  import { X, Sparkles, Star, Download, Eye, User, Calendar, Tag, ExternalLink } from 'lucide-react';
7
+ import { Icon } from '@iconify/react';
6
8
  import { jsxs, jsx } from 'react/jsx-runtime';
7
9
 
8
10
  function formatNumber(count) {
@@ -32,7 +34,7 @@ function TemplateDetailPanel({
32
34
  onUseTemplate
33
35
  }) {
34
36
  const tr = useTr();
35
- const previewImage = template.screenshots?.[0] || template.icon;
37
+ const preview = templatePreview(template);
36
38
  return /* @__PURE__ */ jsxs("div", { className: "w-full md:w-1/2 lg:w-2/5 border-l bg-background overflow-y-auto", children: [
37
39
  /* @__PURE__ */ jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-background border-b", children: [
38
40
  /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold truncate pr-4", children: tr(
@@ -52,14 +54,23 @@ function TemplateDetailPanel({
52
54
  ] }),
53
55
  /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-5", children: [
54
56
  /* @__PURE__ */ jsxs("div", { className: "relative aspect-video w-full rounded-lg overflow-hidden bg-gradient-to-br from-primary/5 to-primary/10", children: [
55
- previewImage ? /* @__PURE__ */ jsx(
57
+ preview.kind === "image" ? /* @__PURE__ */ jsx(
56
58
  "img",
57
59
  {
58
- src: previewImage,
60
+ src: preview.src,
59
61
  alt: template.name,
60
62
  className: "w-full h-full object-cover"
61
63
  }
62
- ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx(Sparkles, { className: "size-16 text-primary/30" }) }),
64
+ ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center", children: preview.kind === "icon" ? /* @__PURE__ */ jsx(
65
+ Icon,
66
+ {
67
+ icon: preview.name,
68
+ width: 64,
69
+ height: 64,
70
+ className: "text-primary/60",
71
+ "aria-hidden": "true"
72
+ }
73
+ ) : /* @__PURE__ */ jsx(Sparkles, { className: "size-16 text-primary/30" }) }),
63
74
  /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2", children: template.pricingModel === "FREE" ? /* @__PURE__ */ jsx(
64
75
  Badge,
65
76
  {
@@ -1,8 +1,9 @@
1
- export { WorkflowBuilder } from './chunk-VM73YKAA.js';
1
+ export { WorkflowBuilder } from './chunk-44KAAKFK.js';
2
2
  import './chunk-BHD4CDLL.js';
3
3
  import './chunk-PIKYQE7P.js';
4
- import './chunk-M6GUEJBJ.js';
4
+ import './chunk-DJAGZUHW.js';
5
5
  import './chunk-GEMNVFPK.js';
6
+ import './chunk-B6CCE2RW.js';
6
7
  import './chunk-IEVSFCFS.js';
7
8
  import './chunk-YXMFRQYV.js';
8
9
  import './chunk-BQXVT32O.js';
@@ -1,6 +1,6 @@
1
1
  import { isGuidedTourIntent, pickGuidedTour, withoutGuidedTourIntent, isCreateIntent, CreateWorkflowRefusalDialog, decideMissingWorkflow } from './chunk-BHD4CDLL.js';
2
2
  import { registerLiveCanvasHandler } from './chunk-PIKYQE7P.js';
3
- import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-M6GUEJBJ.js';
3
+ import { useWorkflowReloadStore, releaseLeaseKeptForReload, useInstalledNodes, buildNodeCheck, FlowBuilderPage, buildRequiredNodeTypes } from './chunk-DJAGZUHW.js';
4
4
  import { useLazyWorkflowDefinition, useCreateWorkflow } from './chunk-PKG6BCHB.js';
5
5
  import { useFlowStore, refetchStoreNodes, BILLING_PLANS_PATH, codeBuildIdOf, mergeStickyNotes, rememberRevision, blankWorkflowCreateInput, classifyCreateRefusal, useSaveStatusStore, workflowFingerprint, registerWorkflowNodeTypes, throwIfResultError } from './chunk-6PGLJWIC.js';
6
6
  import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
@@ -0,0 +1,16 @@
1
+ // src/utils/template-preview.ts
2
+ var ICONIFY_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*:[a-z0-9]+(?:[-_][a-z0-9]+)*$/i;
3
+ function isIconifyName(value) {
4
+ return ICONIFY_NAME.test(value) && !/^(https?|data|blob):/i.test(value);
5
+ }
6
+ function templatePreview(template) {
7
+ const screenshot = template.screenshots?.find(
8
+ (shot) => typeof shot === "string" && shot.trim() !== ""
9
+ );
10
+ if (screenshot) return { kind: "image", src: screenshot };
11
+ const icon = template.icon?.trim();
12
+ if (!icon) return { kind: "none" };
13
+ return isIconifyName(icon) ? { kind: "icon", name: icon } : { kind: "image", src: icon };
14
+ }
15
+
16
+ export { templatePreview };
@@ -1,4 +1,5 @@
1
1
  import { deepClone, applyTemplateInputs } from './chunk-GEMNVFPK.js';
2
+ import { templatePreview } from './chunk-B6CCE2RW.js';
2
3
  import { Input } from './chunk-IEVSFCFS.js';
3
4
  import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, DialogFooter } from './chunk-YXMFRQYV.js';
4
5
  import { Badge as Badge$1, Button } from './chunk-BQXVT32O.js';
@@ -30,8 +31,8 @@ import { useQuery, useMutation } from '@apollo/client/react';
30
31
  import { gql as gql$1 } from '@apollo/client/core';
31
32
  import 'jszip';
32
33
  import { Sparkles, Star, Download, Eye, Maximize2, Undo2, Redo2, LayoutGrid, Keyboard, Plus, Trash2, GitBranch, Loader2, AlertCircle, Search, RefreshCw, History, GitCompareArrows, Play, RotateCcw, Layers, Upload, Rocket, ArrowRight, Check, X, Link2, Unlink, GitCompare, ExternalLink, GitCommitHorizontal, CircleHelp, CheckCircle2, Package, SlidersHorizontal, Info, Copy, BadgeCheck, DollarSign, Type, Code, Hash, List, Braces, Workflow, PlusCircle, ChevronDown, ChevronRight, AlertTriangle } from 'lucide-react';
33
- import { create } from 'zustand';
34
34
  import { Icon } from '@iconify/react';
35
+ import { create } from 'zustand';
35
36
  import { toast } from 'sonner';
36
37
  import { useShallow, shallow } from 'zustand/shallow';
37
38
  import { Handle, Position, getBezierPath, MarkerType, getConnectedEdges, ReactFlowProvider, useReactFlow, ReactFlow, Background, useOnSelectionChange, useStore, MiniMap, EdgeLabelRenderer, useNodes, useNodesState, useEdgesState, addEdge, Controls, Panel } from '@xyflow/react';
@@ -1813,7 +1814,8 @@ function TemplateCard({
1813
1814
  }) {
1814
1815
  const tr = useTr();
1815
1816
  const [imageError, setImageError] = React4__default.useState(false);
1816
- const previewImage = template.screenshots?.[0] || template.icon || void 0;
1817
+ const preview = templatePreview(template);
1818
+ const previewImage = preview.kind === "image" ? preview.src : void 0;
1817
1819
  const hasPreview = Boolean(previewImage) && !imageError;
1818
1820
  const handleUseTemplate = (e) => {
1819
1821
  e.stopPropagation();
@@ -1840,7 +1842,16 @@ function TemplateCard({
1840
1842
  onError: handleImageError,
1841
1843
  className: "w-full h-full object-cover group-hover:scale-110 transition-transform duration-300"
1842
1844
  }
1843
- ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx(Sparkles, { className: "size-16 text-primary/30" }) }),
1845
+ ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center", children: preview.kind === "icon" ? /* @__PURE__ */ jsx(
1846
+ Icon,
1847
+ {
1848
+ icon: preview.name,
1849
+ width: 64,
1850
+ height: 64,
1851
+ className: "text-primary/60",
1852
+ "aria-hidden": "true"
1853
+ }
1854
+ ) : /* @__PURE__ */ jsx(Sparkles, { className: "size-16 text-primary/30" }) }),
1844
1855
  template.featured && /* @__PURE__ */ jsx("div", { className: "absolute top-2 right-2", children: /* @__PURE__ */ jsxs(
1845
1856
  Badge$1,
1846
1857
  {
@@ -25492,7 +25503,7 @@ function TemplatesGrid({
25492
25503
  ] });
25493
25504
  }
25494
25505
  var LazyTemplateDetailPanel = lazy$1(
25495
- () => import('./TemplateDetailPanel-F5SL7LZ5.js').then((m) => ({
25506
+ () => import('./TemplateDetailPanel-MTKW3SPM.js').then((m) => ({
25496
25507
  default: m.TemplateDetailPanel
25497
25508
  }))
25498
25509
  );
@@ -1,4 +1,4 @@
1
- import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-M6GUEJBJ.js';
1
+ import { useImportWorkflowTemplate, FlowBuilderPage, useWorkflowTemplates, TEMPLATE_STORE_CATEGORIES, TemplateCard, useTemplateSubmissions, usePublishToStore } from './chunk-DJAGZUHW.js';
2
2
  import { QuotaExhaustedDialog } from './chunk-IGROOI7E.js';
3
3
  import { templatesControls } from './chunk-FNZZ5JJL.js';
4
4
  import { useWorkflowDefinitions, useDuplicateWorkflow, useLazyWorkflowDefinition } from './chunk-PKG6BCHB.js';
@@ -1,4 +1,4 @@
1
- import { Card, FluidGridsMark } from './chunk-M6GUEJBJ.js';
1
+ import { Card, FluidGridsMark } from './chunk-DJAGZUHW.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Button } from './chunk-BQXVT32O.js';
4
4
  import { useWorkflowDefinition } from './chunk-PKG6BCHB.js';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { Label } from './chunk-VTQVPNUQ.js';
2
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-5R2JKC3S.js';
3
- export { GuidedTourStarter, WorkflowBuilder as WorkflowBuilderPage } from './chunk-VM73YKAA.js';
2
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-R4Q37Q4X.js';
3
+ export { GuidedTourStarter, WorkflowBuilder as WorkflowBuilderPage } from './chunk-44KAAKFK.js';
4
4
  export { FirstWorkflowChecklist, FirstWorkflowChecklistView, WorkflowsList, useCreateWorkflowFirst } from './chunk-475XP5J7.js';
5
5
  import { CreateWorkflowRefusalDialog } from './chunk-BHD4CDLL.js';
6
6
  export { CreateWorkflowRefusalDialog, GUIDED_FIRST_WORKFLOW_NAV, GUIDED_FIRST_WORKFLOW_STATE, GUIDED_TOUR_STATE, firstWorkflowProgress, isGuidedTourIntent, pickGuidedTour } from './chunk-BHD4CDLL.js';
@@ -19,11 +19,12 @@ export { SettingsPage } from './chunk-WHPQRYZD.js';
19
19
  import './chunk-VJWJGSRS.js';
20
20
  export { useDataSinkData, useDataSinks, useInsightsData, useLogStreamDestinationActions, useLogStreamDestinations, useRunReplayActions } from './chunk-CIR7WF4W.js';
21
21
  import './chunk-5ERAJC2I.js';
22
- import { ThemeProvider, extractTemplateGraph } from './chunk-YU7H4QO2.js';
23
- export { TemplatePreview, TemplatesPage } from './chunk-YU7H4QO2.js';
24
- import { external_exports, useAiWorkflowTemplates, AI_DRAFT_MAX_PROMPT_LENGTH, FlowBuilderPage, FluidGridsMark, useRunners, useRunnerActions, RunnerStatusPill, runnerInstallCommand, draftToCanvas, enrichDraftNodes } from './chunk-M6GUEJBJ.js';
25
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Popover, PopoverContent, PopoverTrigger, RUNNER_INSTALL_SCRIPT_URL, RunOnSection, RunnerStatusPill, RunsUsageMeter, RunsUsageMeterView, readRunsQuota, runnerInstallCommand, runsQuotaLevel, summarizeRunsQuota, useRunnerActions, useRunners, useRunsQuota } from './chunk-M6GUEJBJ.js';
22
+ import { ThemeProvider, extractTemplateGraph } from './chunk-GV5RJ6BU.js';
23
+ export { TemplatePreview, TemplatesPage } from './chunk-GV5RJ6BU.js';
24
+ import { external_exports, useAiWorkflowTemplates, AI_DRAFT_MAX_PROMPT_LENGTH, FlowBuilderPage, FluidGridsMark, useRunners, useRunnerActions, RunnerStatusPill, runnerInstallCommand, draftToCanvas, enrichDraftNodes } from './chunk-DJAGZUHW.js';
25
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Popover, PopoverContent, PopoverTrigger, RUNNER_INSTALL_SCRIPT_URL, RunOnSection, RunnerStatusPill, RunsUsageMeter, RunsUsageMeterView, readRunsQuota, runnerInstallCommand, runsQuotaLevel, summarizeRunsQuota, useRunnerActions, useRunners, useRunsQuota } from './chunk-DJAGZUHW.js';
26
26
  import './chunk-GEMNVFPK.js';
27
+ import './chunk-B6CCE2RW.js';
27
28
  export { Input } from './chunk-IEVSFCFS.js';
28
29
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-YXMFRQYV.js';
29
30
  export { Badge, Button, badgeVariants, buttonVariants } from './chunk-BQXVT32O.js';
@@ -82,7 +83,7 @@ var WorkflowsList2 = lazy(
82
83
  () => import('./WorkflowsList-BZXBTGNL.js').then((m) => ({ default: m.WorkflowsList }))
83
84
  );
84
85
  var WorkflowBuilder3 = lazy(
85
- () => import('./WorkflowBuilder-LJ7OX2WF.js').then((m) => ({
86
+ () => import('./WorkflowBuilder-N3ZUYFRK.js').then((m) => ({
86
87
  default: m.WorkflowBuilder
87
88
  }))
88
89
  );
package/dist/templates.js CHANGED
@@ -1,6 +1,7 @@
1
- export { TemplatePreview, TemplatesPage } from './chunk-YU7H4QO2.js';
2
- import './chunk-M6GUEJBJ.js';
1
+ export { TemplatePreview, TemplatesPage } from './chunk-GV5RJ6BU.js';
2
+ import './chunk-DJAGZUHW.js';
3
3
  import './chunk-GEMNVFPK.js';
4
+ import './chunk-B6CCE2RW.js';
4
5
  import './chunk-IEVSFCFS.js';
5
6
  import './chunk-YXMFRQYV.js';
6
7
  import './chunk-BQXVT32O.js';
@@ -1,9 +1,10 @@
1
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-5R2JKC3S.js';
2
- export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-VM73YKAA.js';
1
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-R4Q37Q4X.js';
2
+ export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-44KAAKFK.js';
3
3
  import './chunk-BHD4CDLL.js';
4
4
  import './chunk-PIKYQE7P.js';
5
- import './chunk-M6GUEJBJ.js';
5
+ import './chunk-DJAGZUHW.js';
6
6
  import './chunk-GEMNVFPK.js';
7
+ import './chunk-B6CCE2RW.js';
7
8
  import './chunk-IEVSFCFS.js';
8
9
  import './chunk-YXMFRQYV.js';
9
10
  import './chunk-BQXVT32O.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/fluidgrids-fe-sdk",
3
- "version": "2026.1031.2",
3
+ "version": "2026.1031.3",
4
4
  "description": "FluidGrids Workflow Builder SDK - Embeddable visual workflow automation",
5
5
  "type": "module",
6
6
  "imports": {