@umodeapporg/ui 0.23.0 → 0.24.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.
Files changed (40) hide show
  1. package/dist/assets/umode-ui.css +0 -5
  2. package/dist/components/Form/ControlledSelect.js +5 -3
  3. package/dist/components/Form/ControlledSelect.js.map +1 -1
  4. package/dist/components/UI/Flow/FlowCanvas.d.ts +4 -5
  5. package/dist/components/UI/Flow/FlowCanvas.js +58 -69
  6. package/dist/components/UI/Flow/FlowCanvas.js.map +1 -1
  7. package/dist/components/UI/Flow/FlowConnectionEdge.d.ts +8 -0
  8. package/dist/components/UI/Flow/FlowConnectionEdge.js +64 -3
  9. package/dist/components/UI/Flow/FlowConnectionEdge.js.map +1 -1
  10. package/dist/components/UI/Flow/FlowInspector.d.ts +1 -1
  11. package/dist/components/UI/Flow/FlowInspector.js.map +1 -1
  12. package/dist/components/UI/Flow/FlowLaneMap.js +2 -2
  13. package/dist/components/UI/Flow/FlowLaneMap.js.map +1 -1
  14. package/dist/components/UI/Flow/FlowResizablePanel.d.ts +1 -1
  15. package/dist/components/UI/Flow/FlowResizablePanel.js.map +1 -1
  16. package/dist/components/UI/Flow/flowBlockRegistry.d.ts +2 -2
  17. package/dist/components/UI/Flow/flowBlockRegistry.js +8 -3
  18. package/dist/components/UI/Flow/flowBlockRegistry.js.map +1 -1
  19. package/dist/components/UI/Flow/flowEditorStore.d.ts +7 -2
  20. package/dist/components/UI/Flow/flowEditorStore.js +56 -13
  21. package/dist/components/UI/Flow/flowEditorStore.js.map +1 -1
  22. package/dist/components/UI/Flow/flowGraph.d.ts +0 -1
  23. package/dist/components/UI/Flow/flowGraph.js +3 -4
  24. package/dist/components/UI/Flow/flowGraph.js.map +1 -1
  25. package/dist/components/UI/Flow/flowTypes.d.ts +2 -4
  26. package/dist/components/UI/Flow/index.d.ts +2 -4
  27. package/dist/components/UI/Flow/index.js +5 -9
  28. package/dist/components/UI/Flow/index.js.map +1 -1
  29. package/dist/locales/en/ui.json.d.ts +3 -6
  30. package/dist/locales/en/ui.json.js +1 -1
  31. package/dist/locales/index.d.ts +6 -12
  32. package/dist/locales/pt/ui.json.d.ts +3 -6
  33. package/dist/locales/pt/ui.json.js +1 -1
  34. package/package.json +1 -1
  35. package/dist/components/UI/Flow/FlowPalette.d.ts +0 -7
  36. package/dist/components/UI/Flow/FlowPalette.js +0 -90
  37. package/dist/components/UI/Flow/FlowPalette.js.map +0 -1
  38. package/dist/components/UI/Flow/flowConstants.d.ts +0 -2
  39. package/dist/components/UI/Flow/flowConstants.js +0 -5
  40. package/dist/components/UI/Flow/flowConstants.js.map +0 -1
@@ -1,90 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { useState, useMemo } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { twMerge } from "tailwind-merge";
5
- import ControlledButton from "../../Form/ControlledButton.js";
6
- import UnifiedSearchBar from "../../Search/UnifiedSearchBar.js";
7
- import { MaterialSymbol } from "../MaterialSymbol/index.js";
8
- import NoDataFound from "../NoDataFound/index.js";
9
- import { FLOW_BLOCK_DRAG_TYPE } from "./flowConstants.js";
10
- import { useFlowBlockRegistry, useFlowEditorStore, useFlowEditor } from "./FlowEditorProvider.js";
11
- import { useFlowLabels } from "./useFlowLabels.js";
12
- const CATEGORY_ORDER = ["trigger", "condition", "action"];
13
- const FlowPalette = ({ readOnly = false, className }) => {
14
- const { t } = useTranslation("ui");
15
- const labels = useFlowLabels();
16
- const registry = useFlowBlockRegistry();
17
- const store = useFlowEditorStore();
18
- const nodes = useFlowEditor((state) => state.graph.nodes);
19
- const [visibleBlocks, setVisibleBlocks] = useState(registry.list);
20
- const instancesByType = useMemo(() => {
21
- const counts = /* @__PURE__ */ new Map();
22
- nodes.forEach((node) => counts.set(node.type, (counts.get(node.type) ?? 0) + 1));
23
- return counts;
24
- }, [nodes]);
25
- const startDrag = (event, type) => {
26
- event.dataTransfer.setData(FLOW_BLOCK_DRAG_TYPE, type);
27
- event.dataTransfer.effectAllowed = "copy";
28
- };
29
- return /* @__PURE__ */ jsxs(
30
- "aside",
31
- {
32
- className: twMerge(
33
- "flex h-full min-h-0 flex-col gap-y-3 rounded-xl border border-border bg-surface p-3",
34
- className
35
- ),
36
- children: [
37
- /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground", children: t("flow.palette.title") }),
38
- /* @__PURE__ */ jsx(
39
- UnifiedSearchBar,
40
- {
41
- mode: "default",
42
- label: t("flow.palette.search"),
43
- searchableItems: registry.list,
44
- searchKeys: ["label", "description"],
45
- setFilteredItems: setVisibleBlocks,
46
- minSearchLength: 1,
47
- debounceTime: 150
48
- }
49
- ),
50
- /* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col gap-y-4 overflow-y-auto", children: [
51
- visibleBlocks.length === 0 && /* @__PURE__ */ jsx(NoDataFound, { compact: true, variant: "search", message: t("flow.palette.empty") }),
52
- CATEGORY_ORDER.map((category) => {
53
- const blocks = visibleBlocks.filter((block) => block.category === category);
54
- if (blocks.length === 0) return null;
55
- return /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-y-1", children: [
56
- /* @__PURE__ */ jsx("span", { className: "text-xxs font-semibold uppercase tracking-wide text-foreground-subtle", children: labels.categories[category] }),
57
- blocks.map((block) => {
58
- const limitReached = block.maxInstances !== void 0 && (instancesByType.get(block.type) ?? 0) >= block.maxInstances;
59
- const disabled = readOnly || limitReached;
60
- return /* @__PURE__ */ jsxs(
61
- ControlledButton,
62
- {
63
- defaultHtmlButton: true,
64
- draggable: !disabled,
65
- disabled,
66
- onDragStart: (event) => startDrag(event, block.type),
67
- onClick: () => store.getState().addNode(block.type),
68
- className: "interactive flex items-start gap-x-2 rounded-lg border border-transparent px-2 py-2 text-left hover:border-border hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60",
69
- children: [
70
- /* @__PURE__ */ jsx("span", { className: "flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-foreground-muted", children: /* @__PURE__ */ jsx(MaterialSymbol, { icon: block.icon, size: 16, "aria-hidden": true }) }),
71
- /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
72
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground", children: block.label }),
73
- limitReached ? /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground-subtle", children: t("flow.palette.limitReached") }) : block.description && /* @__PURE__ */ jsx("span", { className: "text-xs text-foreground-subtle", children: block.description })
74
- ] })
75
- ]
76
- },
77
- block.type
78
- );
79
- })
80
- ] }, category);
81
- })
82
- ] })
83
- ]
84
- }
85
- );
86
- };
87
- export {
88
- FlowPalette as default
89
- };
90
- //# sourceMappingURL=FlowPalette.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FlowPalette.js","sources":["../../../../src/components/UI/Flow/FlowPalette.tsx"],"sourcesContent":["import { DragEvent, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { twMerge } from 'tailwind-merge';\n\nimport ControlledButton from '@/components/Form/ControlledButton';\nimport UnifiedSearchBar from '@/components/Search/UnifiedSearchBar';\nimport { MaterialSymbol } from '@/components/UI/MaterialSymbol';\nimport NoDataFound from '@/components/UI/NoDataFound';\n\nimport { FLOW_BLOCK_DRAG_TYPE } from './flowConstants';\nimport { useFlowBlockRegistry, useFlowEditor, useFlowEditorStore } from './FlowEditorProvider';\nimport type { IFlowBlockDefinition, TFlowBlockCategory } from './flowTypes';\nimport { useFlowLabels } from './useFlowLabels';\n\nconst CATEGORY_ORDER: Array<TFlowBlockCategory> = ['trigger', 'condition', 'action'];\n\ninterface IFlowPaletteProps {\n readOnly?: boolean;\n className?: string;\n}\n\n/** The blocks a flow can use, grouped by category. Drag one onto the canvas, or click to add it below the selection. */\nconst FlowPalette: React.FC<IFlowPaletteProps> = ({ readOnly = false, className }) => {\n const { t } = useTranslation('ui');\n const labels = useFlowLabels();\n const registry = useFlowBlockRegistry();\n const store = useFlowEditorStore();\n const nodes = useFlowEditor((state) => state.graph.nodes);\n const [visibleBlocks, setVisibleBlocks] = useState<Array<IFlowBlockDefinition>>(registry.list);\n\n const instancesByType = useMemo(() => {\n const counts = new Map<string, number>();\n nodes.forEach((node) => counts.set(node.type, (counts.get(node.type) ?? 0) + 1));\n return counts;\n }, [nodes]);\n\n const startDrag = (event: DragEvent<HTMLButtonElement>, type: string) => {\n event.dataTransfer.setData(FLOW_BLOCK_DRAG_TYPE, type);\n event.dataTransfer.effectAllowed = 'copy';\n };\n\n return (\n <aside\n className={twMerge(\n 'flex h-full min-h-0 flex-col gap-y-3 rounded-xl border border-border bg-surface p-3',\n className,\n )}\n >\n <span className=\"text-sm font-semibold text-foreground\">{t('flow.palette.title')}</span>\n <UnifiedSearchBar<IFlowBlockDefinition>\n mode=\"default\"\n label={t('flow.palette.search')}\n searchableItems={registry.list}\n searchKeys={['label', 'description']}\n setFilteredItems={setVisibleBlocks}\n minSearchLength={1}\n debounceTime={150}\n />\n <div className=\"flex min-h-0 flex-1 flex-col gap-y-4 overflow-y-auto\">\n {visibleBlocks.length === 0 && <NoDataFound compact variant=\"search\" message={t('flow.palette.empty')} />}\n {CATEGORY_ORDER.map((category) => {\n const blocks = visibleBlocks.filter((block) => block.category === category);\n if (blocks.length === 0) return null;\n return (\n <section key={category} className=\"flex flex-col gap-y-1\">\n <span className=\"text-xxs font-semibold uppercase tracking-wide text-foreground-subtle\">\n {labels.categories[category]}\n </span>\n {blocks.map((block) => {\n const limitReached =\n block.maxInstances !== undefined && (instancesByType.get(block.type) ?? 0) >= block.maxInstances;\n const disabled = readOnly || limitReached;\n return (\n <ControlledButton\n key={block.type}\n defaultHtmlButton\n draggable={!disabled}\n disabled={disabled}\n onDragStart={(event) => startDrag(event, block.type)}\n onClick={() => store.getState().addNode(block.type)}\n className=\"interactive flex items-start gap-x-2 rounded-lg border border-transparent px-2 py-2 text-left hover:border-border hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60\"\n >\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-md bg-muted text-foreground-muted\">\n <MaterialSymbol icon={block.icon} size={16} aria-hidden />\n </span>\n <span className=\"flex min-w-0 flex-col\">\n <span className=\"text-sm font-medium text-foreground\">{block.label}</span>\n {limitReached ? (\n <span className=\"text-xs text-foreground-subtle\">{t('flow.palette.limitReached')}</span>\n ) : (\n block.description && <span className=\"text-xs text-foreground-subtle\">{block.description}</span>\n )}\n </span>\n </ControlledButton>\n );\n })}\n </section>\n );\n })}\n </div>\n </aside>\n );\n};\n\nexport default FlowPalette;\n"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- /** The MIME type a palette item puts on the drag so the canvas knows which block was dropped. */
2
- export declare const FLOW_BLOCK_DRAG_TYPE = "application/x-umode-flow-block";
@@ -1,5 +0,0 @@
1
- const FLOW_BLOCK_DRAG_TYPE = "application/x-umode-flow-block";
2
- export {
3
- FLOW_BLOCK_DRAG_TYPE
4
- };
5
- //# sourceMappingURL=flowConstants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flowConstants.js","sources":["../../../../src/components/UI/Flow/flowConstants.ts"],"sourcesContent":["/** The MIME type a palette item puts on the drag so the canvas knows which block was dropped. */\nexport const FLOW_BLOCK_DRAG_TYPE = 'application/x-umode-flow-block';\n"],"names":[],"mappings":"AACO,MAAM,uBAAuB;"}