@lokvis/ui-react 0.2.2 → 0.4.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 (133) hide show
  1. package/dist/components/AssetPanel.d.ts.map +1 -1
  2. package/dist/components/AssetPanel.js +10 -54
  3. package/dist/components/AssetPanel.js.map +1 -1
  4. package/dist/components/Canvas.d.ts.map +1 -1
  5. package/dist/components/Canvas.js +4 -4
  6. package/dist/components/Canvas.js.map +1 -1
  7. package/dist/components/CompareSlider.d.ts +4 -3
  8. package/dist/components/CompareSlider.d.ts.map +1 -1
  9. package/dist/components/CompareSlider.js +5 -4
  10. package/dist/components/CompareSlider.js.map +1 -1
  11. package/dist/components/DownloadPanel.d.ts.map +1 -1
  12. package/dist/components/DownloadPanel.js +1 -8
  13. package/dist/components/DownloadPanel.js.map +1 -1
  14. package/dist/components/ErrorBoundary.d.ts +40 -0
  15. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  16. package/dist/components/ErrorBoundary.js +52 -0
  17. package/dist/components/ErrorBoundary.js.map +1 -0
  18. package/dist/components/ExifPanel.js +1 -1
  19. package/dist/components/ExifPanel.js.map +1 -1
  20. package/dist/components/GlobalDropzone.d.ts.map +1 -1
  21. package/dist/components/GlobalDropzone.js +10 -3
  22. package/dist/components/GlobalDropzone.js.map +1 -1
  23. package/dist/components/Inspector.d.ts.map +1 -1
  24. package/dist/components/Inspector.js +10 -7
  25. package/dist/components/Inspector.js.map +1 -1
  26. package/dist/components/ParamForm.d.ts.map +1 -1
  27. package/dist/components/ParamForm.js +8 -5
  28. package/dist/components/ParamForm.js.map +1 -1
  29. package/dist/components/PipelineBar.d.ts.map +1 -1
  30. package/dist/components/PipelineBar.js +17 -26
  31. package/dist/components/PipelineBar.js.map +1 -1
  32. package/dist/components/StatusBar.d.ts.map +1 -1
  33. package/dist/components/StatusBar.js +3 -12
  34. package/dist/components/StatusBar.js.map +1 -1
  35. package/dist/components/StatusDot.d.ts +12 -0
  36. package/dist/components/StatusDot.d.ts.map +1 -0
  37. package/dist/components/StatusDot.js +15 -0
  38. package/dist/components/StatusDot.js.map +1 -0
  39. package/dist/components/ThemeToggle.js +1 -1
  40. package/dist/components/ThemeToggle.js.map +1 -1
  41. package/dist/components/ToolRunner.d.ts +53 -0
  42. package/dist/components/ToolRunner.d.ts.map +1 -0
  43. package/dist/components/ToolRunner.js +142 -0
  44. package/dist/components/ToolRunner.js.map +1 -0
  45. package/dist/components/Toolbar.js +2 -2
  46. package/dist/components/Toolbar.js.map +1 -1
  47. package/dist/components/WorkflowEditor.d.ts.map +1 -1
  48. package/dist/components/WorkflowEditor.js +31 -40
  49. package/dist/components/WorkflowEditor.js.map +1 -1
  50. package/dist/components/WorkflowTemplates.d.ts.map +1 -1
  51. package/dist/components/WorkflowTemplates.js +15 -5
  52. package/dist/components/WorkflowTemplates.js.map +1 -1
  53. package/dist/components/Workspace.d.ts +23 -1
  54. package/dist/components/Workspace.d.ts.map +1 -1
  55. package/dist/components/Workspace.js +60 -13
  56. package/dist/components/Workspace.js.map +1 -1
  57. package/dist/hooks/useCustomPresets.d.ts +98 -0
  58. package/dist/hooks/useCustomPresets.d.ts.map +1 -0
  59. package/dist/hooks/useCustomPresets.js +210 -0
  60. package/dist/hooks/useCustomPresets.js.map +1 -0
  61. package/dist/hooks/useLokvis.d.ts +19 -1
  62. package/dist/hooks/useLokvis.d.ts.map +1 -1
  63. package/dist/hooks/useLokvis.js +30 -9
  64. package/dist/hooks/useLokvis.js.map +1 -1
  65. package/dist/index.d.ts +3 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +3 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/store/assets-slice.d.ts +8 -1
  70. package/dist/store/assets-slice.d.ts.map +1 -1
  71. package/dist/store/assets-slice.js +101 -54
  72. package/dist/store/assets-slice.js.map +1 -1
  73. package/dist/store/capabilities-slice.d.ts +1 -1
  74. package/dist/store/capabilities-slice.d.ts.map +1 -1
  75. package/dist/store/capabilities-slice.js +8 -1
  76. package/dist/store/capabilities-slice.js.map +1 -1
  77. package/dist/store/index.d.ts +1 -1
  78. package/dist/store/index.d.ts.map +1 -1
  79. package/dist/store/index.js +1 -1
  80. package/dist/store/index.js.map +1 -1
  81. package/dist/store/runtime-slice.d.ts.map +1 -1
  82. package/dist/store/runtime-slice.js +22 -16
  83. package/dist/store/runtime-slice.js.map +1 -1
  84. package/dist/store/subscribe-utils.d.ts +45 -0
  85. package/dist/store/subscribe-utils.d.ts.map +1 -0
  86. package/dist/store/subscribe-utils.js +69 -0
  87. package/dist/store/subscribe-utils.js.map +1 -0
  88. package/dist/store/types.d.ts +19 -11
  89. package/dist/store/types.d.ts.map +1 -1
  90. package/dist/store/types.js +0 -10
  91. package/dist/store/types.js.map +1 -1
  92. package/dist/store/workflow-slice.d.ts +1 -1
  93. package/dist/store/workflow-slice.d.ts.map +1 -1
  94. package/dist/store/workflow-slice.js +19 -51
  95. package/dist/store/workflow-slice.js.map +1 -1
  96. package/dist/utils.d.ts +24 -0
  97. package/dist/utils.d.ts.map +1 -0
  98. package/dist/utils.js +31 -0
  99. package/dist/utils.js.map +1 -0
  100. package/package.json +7 -6
  101. package/src/components/AssetPanel.tsx +18 -58
  102. package/src/components/Canvas.tsx +11 -7
  103. package/src/components/CompareSlider.tsx +13 -10
  104. package/src/components/DownloadPanel.tsx +1 -7
  105. package/src/components/ErrorBoundary.tsx +101 -0
  106. package/src/components/ExifPanel.tsx +1 -1
  107. package/src/components/GlobalDropzone.tsx +8 -3
  108. package/src/components/Inspector.tsx +24 -16
  109. package/src/components/ParamForm.tsx +12 -9
  110. package/src/components/PipelineBar.tsx +20 -27
  111. package/src/components/StatusBar.tsx +3 -10
  112. package/src/components/StatusDot.tsx +27 -0
  113. package/src/components/ThemeToggle.tsx +1 -1
  114. package/src/components/ToolRunner.tsx +352 -0
  115. package/src/components/Toolbar.tsx +2 -2
  116. package/src/components/WorkflowEditor.tsx +50 -43
  117. package/src/components/WorkflowTemplates.tsx +27 -4
  118. package/src/components/Workspace.tsx +97 -10
  119. package/src/hooks/useCustomPresets.ts +284 -0
  120. package/src/hooks/useLokvis.ts +43 -10
  121. package/src/index.ts +3 -0
  122. package/src/store/assets-slice.ts +106 -52
  123. package/src/store/capabilities-slice.ts +10 -2
  124. package/src/store/index.ts +1 -1
  125. package/src/store/runtime-slice.ts +20 -15
  126. package/src/store/subscribe-utils.ts +82 -0
  127. package/src/store/types.ts +19 -12
  128. package/src/store/workflow-slice.ts +19 -53
  129. package/src/utils.ts +41 -0
  130. package/dist/store.d.ts +0 -76
  131. package/dist/store.d.ts.map +0 -1
  132. package/dist/store.js +0 -217
  133. package/dist/store.js.map +0 -1
@@ -39,7 +39,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
39
39
  * ```
40
40
  */
41
41
  import * as React from 'react';
42
- import { Icon } from '@lokvis/ui-core';
42
+ import { ConfirmDialog, Icon } from '@lokvis/ui-core';
43
43
  import { useLokvis } from '../hooks/useLokvis.js';
44
44
  import { useBreakpoints } from '../hooks/useMediaQuery.js';
45
45
  import { Toolbar } from './Toolbar.js';
@@ -56,9 +56,10 @@ import { DownloadPanel } from './DownloadPanel.js';
56
56
  import { CommandPalette, useCommandPalette } from './CommandPalette.js';
57
57
  import { GlobalDropzone } from './GlobalDropzone.js';
58
58
  import { ThemeToggle } from './ThemeToggle.js';
59
+ import { ErrorBoundary } from './ErrorBoundary.js';
59
60
  import { useShareLink } from '../hooks/useShareLink.js';
60
61
  import { useWorkspaceStore } from '../store/index.js';
61
- export function Workspace({ title, showStatusBar = true, showHistoryPanel = true, enableGlobalDropzone = true, enableCommandPalette = true, enableThemeToggle = true, enableCompare = true, enableDownloadPanel = true, enableWorkflowEditor = false, enableProgressBar = true, enableErrorBanner = true, enableShareLink = true, className = '', ...lokvisOptions }) {
62
+ export function Workspace({ title, showStatusBar = true, showHistoryPanel = true, enableGlobalDropzone = true, enableCommandPalette = true, enableThemeToggle = true, enableCompare = true, enableDownloadPanel = true, enableWorkflowEditor = false, enableProgressBar = true, enableErrorBanner = true, enableShareLink = true, initialAssets, initialCapability, initialParams, mode = 'full', className = '', ...lokvisOptions }) {
62
63
  const { status, error } = useLokvis(lokvisOptions);
63
64
  const { isMobile } = useBreakpoints();
64
65
  const [paletteOpen, setPaletteOpen] = useCommandPalette({ enabled: enableCommandPalette });
@@ -66,17 +67,20 @@ export function Workspace({ title, showStatusBar = true, showHistoryPanel = true
66
67
  const [mobilePanel, setMobilePanel] = React.useState(null);
67
68
  // W11.5: 从 URL ?workflow= 参数加载分享工作流(runtime 就绪后执行一次)
68
69
  // 保护:若用户已通过其它路径(如 localStorage 恢复或手动添加)有 nodes,
69
- // 不静默替换 —— 用 confirm 让用户显式选择,避免丢失未保存工作。
70
+ // 不静默替换 —— 用 ConfirmDialog 让用户显式选择,避免丢失未保存工作。
70
71
  // 注:不用 useWorkspaceStore 订阅 nodes.length 做 effect 依赖
71
72
  // (review 反馈:那样 nodesLength 变化会触发 effect 重跑,而 ref 已 true
72
73
  // 时重跑无意义,且语义上 effect 只应在 status 切换时跑一次)。
73
74
  // 改用 getState() 在体内读取最新值,既不订阅也不进 deps。
74
75
  const { loadFromCurrentUrl } = useShareLink();
75
76
  const shareLoadedRef = React.useRef(false);
77
+ // 待确认的分享链接替换(nodes>0 时需用户确认才替换)
78
+ const [shareConfirmOpen, setShareConfirmOpen] = React.useState(false);
79
+ const [shareConfirmNodes, setShareConfirmNodes] = React.useState(0);
76
80
  React.useEffect(() => {
77
81
  if (enableShareLink && !shareLoadedRef.current && status !== 'initializing' && status !== 'error') {
78
82
  shareLoadedRef.current = true;
79
- // 仅在 URL 含 ?workflow= 参数时才提示(避免无谓 confirm 弹窗)
83
+ // 仅在 URL 含 ?workflow= 参数时才提示(避免无谓弹窗)
80
84
  const hasShareParam = typeof window !== 'undefined'
81
85
  && new URLSearchParams(window.location.search).has('workflow');
82
86
  if (!hasShareParam)
@@ -84,25 +88,68 @@ export function Workspace({ title, showStatusBar = true, showHistoryPanel = true
84
88
  // 读取当前 nodes 长度(最新值,非订阅快照)
85
89
  const currentNodesLength = useWorkspaceStore.getState().nodes.length;
86
90
  if (currentNodesLength > 0) {
87
- const ok = window.confirm(`检测到分享工作流链接,但当前已有 ${currentNodesLength} 个节点。是否替换为分享的工作流?`);
88
- if (!ok)
89
- return;
91
+ setShareConfirmNodes(currentNodesLength);
92
+ setShareConfirmOpen(true);
93
+ return;
90
94
  }
91
95
  loadFromCurrentUrl();
92
96
  }
93
97
  }, [enableShareLink, status, loadFromCurrentUrl]);
98
+ // 初始化 props:runtime 就绪后导入资产、添加节点、填充参数
99
+ const initDoneRef = React.useRef(false);
100
+ React.useEffect(() => {
101
+ if (initDoneRef.current || status !== 'ready')
102
+ return;
103
+ const store = useWorkspaceStore.getState();
104
+ if (!store.runtime)
105
+ return;
106
+ initDoneRef.current = true;
107
+ (async () => {
108
+ // 导入初始资产
109
+ if (initialAssets?.length) {
110
+ for (const { blob, name } of initialAssets) {
111
+ const file = new File([blob], name, { type: blob.type });
112
+ await store.runtime.importAsset({ kind: 'file', file });
113
+ }
114
+ await store.refreshAssets();
115
+ // 自动选中第一个资产
116
+ const assets = store.assets;
117
+ if (assets.length > 0) {
118
+ store.selectAsset(assets[0].id);
119
+ }
120
+ }
121
+ // 添加初始能力节点并填充参数
122
+ if (initialCapability) {
123
+ store.addNode(initialCapability);
124
+ if (initialParams) {
125
+ const nodes = useWorkspaceStore.getState().nodes;
126
+ const lastNode = nodes[nodes.length - 1];
127
+ if (lastNode) {
128
+ store.updateNodeParams(lastNode.id, initialParams);
129
+ }
130
+ }
131
+ }
132
+ })();
133
+ }, [status, initialAssets, initialCapability, initialParams]);
134
+ const isFocused = mode === 'focused';
94
135
  if (status === 'initializing') {
95
- return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsxs("div", { className: "flex flex-col items-center gap-4", children: [_jsxs("div", { className: "relative flex h-12 w-12 items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 rounded-full border-2 border-[var(--lokvis-primary)]/40" }), _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-transparent border-t-indigo-500" })] }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg-muted)]", children: "Initializing Runtime" }), _jsx("p", { className: "mt-1 text-xs text-[var(--lokvis-fg-subtle)]", children: "Loading plugins and capabilities..." })] })] }) }));
136
+ return (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsxs("div", { className: "flex flex-col items-center gap-4", children: [_jsxs("div", { className: "relative flex h-12 w-12 items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 rounded-full border-2 border-[var(--lokvis-primary)]/40" }), _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-transparent border-t-[var(--lokvis-primary)]" })] }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-sm font-medium text-[var(--lokvis-fg-muted)]", children: "Initializing Runtime" }), _jsx("p", { className: "mt-1 text-xs text-[var(--lokvis-fg-subtle)]", children: "Loading plugins and capabilities..." })] })] }) }));
96
137
  }
97
138
  if (status === 'error') {
98
139
  return (_jsx("div", { className: "flex h-full items-center justify-center px-6", children: _jsxs("div", { className: "max-w-md rounded-xl border border-[var(--lokvis-danger)]/30 bg-[var(--lokvis-danger)]/10 p-6 text-center", children: [_jsx("div", { className: "mb-3 flex h-10 w-10 mx-auto items-center justify-center rounded-full bg-[var(--lokvis-danger)]/15", children: _jsxs(Icon, { size: 20, className: "text-[var(--lokvis-danger)]", children: [_jsx("circle", { cx: "12", cy: "12", r: "10" }), _jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }), _jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })] }) }), _jsx("p", { className: "font-semibold text-[var(--lokvis-danger)]", children: "Failed to initialize" }), _jsx("p", { className: "mt-1.5 text-sm text-[var(--lokvis-danger)]/80", children: error })] }) }));
99
140
  }
100
141
  // W9.7 Toolbar rightExtra: ThemeToggle + ⌘K hint
101
142
  const toolbarRight = (_jsxs(_Fragment, { children: [enableCommandPalette && (_jsxs("button", { type: "button", onClick: () => setPaletteOpen(true), "aria-label": "Open command palette", title: "Command palette (\u2318K)", className: "flex h-7 items-center gap-1 rounded-md border border-[var(--lokvis-border)] px-1.5 text-[10px] text-[var(--lokvis-fg-muted)] transition-colors hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: [_jsxs(Icon, { size: 11, children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "m21 21-4.3-4.3" })] }), _jsx("kbd", { className: "font-sans", children: "\u2318K" })] })), enableThemeToggle && _jsx(ThemeToggle, {}), isMobile && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setMobilePanel(mobilePanel === 'asset' ? null : 'asset'), "aria-label": "Toggle asset panel", "aria-pressed": mobilePanel === 'asset', className: "flex h-7 w-7 items-center justify-center rounded-md text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: _jsxs(Icon, { size: 14, children: [_jsx("rect", { x: "3", y: "3", width: "7", height: "18", rx: "1" }), _jsx("path", { d: "M14 3h7v18h-7z", opacity: "0.3" })] }) }), _jsx("button", { type: "button", onClick: () => setMobilePanel(mobilePanel === 'inspector' ? null : 'inspector'), "aria-label": "Toggle inspector panel", "aria-pressed": mobilePanel === 'inspector', className: "flex h-7 w-7 items-center justify-center rounded-md text-[var(--lokvis-fg-muted)] hover:bg-[var(--lokvis-surface-muted)] hover:text-[var(--lokvis-fg-muted)]", children: _jsxs(Icon, { size: 14, children: [_jsx("path", { d: "M3 3h7v18H3z", opacity: "0.3" }), _jsx("rect", { x: "14", y: "3", width: "7", height: "18", rx: "1" })] }) })] }))] }));
102
- return (_jsxs("div", { className: `flex h-full flex-col bg-[var(--lokvis-surface)] ${className}`, children: [_jsx(Toolbar, { title: title, rightExtra: toolbarRight }), enableErrorBanner && _jsx(ErrorBanner, {}), enableGlobalDropzone && _jsx(GlobalDropzone, {}), enableCommandPalette && (_jsx(CommandPalette, { open: paletteOpen, onClose: () => setPaletteOpen(false) })), _jsxs("div", { className: "flex flex-1 overflow-hidden relative", children: [_jsx("div", { className: `${isMobile
103
- ? `absolute inset-y-0 left-0 z-20 w-64 max-w-[80vw] transition-transform duration-200 ${mobilePanel === 'asset' ? 'translate-x-0' : '-translate-x-full'}`
104
- : 'relative'}`, children: _jsx(AssetPanel, { className: "h-full" }) }), _jsx(Canvas, { enableCompare: enableCompare }), _jsx("div", { className: `${isMobile
105
- ? `absolute inset-y-0 right-0 z-20 w-72 max-w-[80vw] transition-transform duration-200 ${mobilePanel === 'inspector' ? 'translate-x-0' : 'translate-x-full'}`
106
- : 'relative'}`, children: _jsx(Inspector, { className: "h-full" }) }), isMobile && mobilePanel !== null && (_jsx("button", { type: "button", "aria-label": "Close panel", onClick: () => setMobilePanel(null), className: "absolute inset-0 z-10 bg-[var(--lokvis-overlay)]" }))] }), enableWorkflowEditor ? _jsx(WorkflowEditor, {}) : _jsx(PipelineBar, {}), enableProgressBar && _jsx(ProgressBar, {}), showHistoryPanel && _jsx(HistoryPanel, { variant: "horizontal" }), enableDownloadPanel && _jsx(DownloadPanel, {}), showStatusBar && _jsx(StatusBar, {})] }));
143
+ return (
144
+ // D6: ErrorBoundary 捕获子组件渲染异常,避免整个 workspace 白屏。
145
+ // useLokvis 异常不在本组件树内(早于本 return),由消费方在外层包裹处理。
146
+ _jsx(ErrorBoundary, { children: _jsxs("div", { className: `flex h-full flex-col bg-[var(--lokvis-surface)] ${className}`, children: [_jsx(Toolbar, { title: title, rightExtra: toolbarRight }), enableErrorBanner && _jsx(ErrorBanner, {}), enableGlobalDropzone && _jsx(GlobalDropzone, {}), enableCommandPalette && (_jsx(CommandPalette, { open: paletteOpen, onClose: () => setPaletteOpen(false) })), _jsxs("div", { className: "flex flex-1 overflow-hidden relative", children: [!isFocused && (_jsx("div", { className: `${isMobile
147
+ ? `absolute inset-y-0 left-0 z-20 w-64 max-w-[80vw] transition-transform duration-200 ${mobilePanel === 'asset' ? 'translate-x-0' : '-translate-x-full'}`
148
+ : 'relative'}`, children: _jsx(AssetPanel, { className: "h-full" }) })), _jsx(Canvas, { enableCompare: enableCompare }), _jsx("div", { className: `${isMobile
149
+ ? `absolute inset-y-0 right-0 z-20 w-72 max-w-[80vw] transition-transform duration-200 ${mobilePanel === 'inspector' ? 'translate-x-0' : 'translate-x-full'}`
150
+ : 'relative'}`, children: _jsx(Inspector, { className: "h-full" }) }), isMobile && mobilePanel !== null && !isFocused && (_jsx("button", { type: "button", "aria-label": "Close panel", onClick: () => setMobilePanel(null), className: "absolute inset-0 z-10 bg-[var(--lokvis-overlay)]" }))] }), !isFocused && (enableWorkflowEditor ? _jsx(WorkflowEditor, {}) : _jsx(PipelineBar, {})), enableProgressBar && _jsx(ProgressBar, {}), showHistoryPanel && _jsx(HistoryPanel, { variant: "horizontal" }), enableDownloadPanel && _jsx(DownloadPanel, {}), showStatusBar && _jsx(StatusBar, {}), _jsx(ConfirmDialog, { open: shareConfirmOpen, title: "\u52A0\u8F7D\u5206\u4EAB\u5DE5\u4F5C\u6D41", message: `检测到分享工作流链接,但当前已有 ${shareConfirmNodes} 个节点。是否替换为分享的工作流?`, confirmText: "\u66FF\u6362", variant: "danger", onConfirm: () => {
151
+ setShareConfirmOpen(false);
152
+ loadFromCurrentUrl();
153
+ }, onClose: () => setShareConfirmOpen(false) })] }) }));
107
154
  }
108
155
  //# sourceMappingURL=Workspace.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../src/components/Workspace.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../src/components/Workspace.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * useCustomPresets - 自定义尺寸预设持久化 hook(W17.5)
3
+ *
4
+ * 提供用户自定义图像尺寸预设的本地保存能力(免费 3 / Pro 无限)。
5
+ * 数据存储在 localStorage 的 `lokvis.customPresets` key,JSON 数组形式。
6
+ *
7
+ * 与 useWorkflows 的区别:
8
+ * - 自定义预设是尺寸配置(name/width/height/fit/format),轻量
9
+ * - 工作流槽位是完整 Workflow 定义(含 nodes/edges/inputs/outputs)
10
+ *
11
+ * 与 PLATFORM_PRESETS 的区别:
12
+ * - PLATFORM_PRESETS 是内置的固定预设(YouTube/TikTok 等平台标准尺寸)
13
+ * - 自定义预设是用户自建的任意尺寸配置,自由命名
14
+ *
15
+ * id 命名空间约定:自定义预设 id 以 `custom.` 前缀,与内置预设区分
16
+ * (如 `custom.my-instagram-square`),避免 PlatformPresetSelector 冲突。
17
+ *
18
+ * 多 tab / 多实例同步:
19
+ * - 原生 storage 事件:跨 tab 同步
20
+ * - 自定义 SYNC_EVENT:同 tab 多实例同步
21
+ *
22
+ * @module useCustomPresets
23
+ */
24
+ import type { PlatformFitStrategy, PlatformRecommendedFormat } from '@lokvis/capability';
25
+ /** 免费用户自定义预设上限 */
26
+ export declare const FREE_PRESET_LIMIT = 3;
27
+ /** Pro 用户无上限 */
28
+ export declare const PRO_PRESET_LIMIT: number;
29
+ /** 自定义尺寸预设存储格式 */
30
+ export interface CustomSizePreset {
31
+ /** 唯一 ID,以 `custom.` 前缀 */
32
+ id: string;
33
+ /** 用户自定义名称(如 "我的方形预设") */
34
+ name: string;
35
+ /** 目标宽度(像素) */
36
+ width: number;
37
+ /** 目标高度(像素) */
38
+ height: number;
39
+ /** fit 策略(默认 cover) */
40
+ fit: PlatformFitStrategy;
41
+ /** 推荐输出格式(可选) */
42
+ format?: PlatformRecommendedFormat;
43
+ /** 创建时间戳 */
44
+ createdAt: number;
45
+ /** 最后更新时间戳 */
46
+ updatedAt: number;
47
+ }
48
+ /** 保存预设时的输入(不含 id / 时间戳,由 save 自动生成) */
49
+ export interface SavePresetInput {
50
+ /** 预设名称 */
51
+ name: string;
52
+ /** 目标宽度(像素,>0) */
53
+ width: number;
54
+ /** 目标高度(像素,>0) */
55
+ height: number;
56
+ /** fit 策略(默认 cover) */
57
+ fit?: PlatformFitStrategy;
58
+ /** 推荐输出格式(可选) */
59
+ format?: PlatformRecommendedFormat;
60
+ /** 若指定则更新该 id 的预设,否则新增 */
61
+ id?: string;
62
+ }
63
+ export interface UseCustomPresetsResult {
64
+ /** 当前所有自定义预设(按 updatedAt 降序) */
65
+ presets: CustomSizePreset[];
66
+ /** 保存或更新预设;超限时抛 Error */
67
+ save(input: SavePresetInput): CustomSizePreset;
68
+ /** 按 id 删除预设 */
69
+ remove(id: string): void;
70
+ /** 按 id 查找预设 */
71
+ get(id: string): CustomSizePreset | null;
72
+ /** 当前上限(免费 3 / Pro 无限) */
73
+ limit: number;
74
+ /** 是否还能再保存 */
75
+ canSaveMore: boolean;
76
+ /** 还能再保存多少个 */
77
+ remaining: number;
78
+ }
79
+ /** 从 localStorage 读取自定义预设。
80
+ * 容错:JSON 解析失败 / 非数组 / 字段缺失时返回空数组。
81
+ *
82
+ * 导出供测试直接调用(避免渲染 React 组件)。 */
83
+ export declare function readCustomPresetsFromStorage(): CustomSizePreset[];
84
+ /**
85
+ * 写入 localStorage。
86
+ * @returns true 成功;false 失败(隐私模式 / 配额超限 / 序列化异常)
87
+ *
88
+ * 导出供测试直接调用。
89
+ */
90
+ export declare function writeCustomPresetsToStorage(presets: CustomSizePreset[]): boolean;
91
+ /** 生成唯一 ID(custom. 前缀,与内置预设命名空间隔离) */
92
+ export declare function genCustomPresetId(): string;
93
+ /**
94
+ * @param isPro 是否为 Pro 模式。父组件从 runtime.isPro 传入。
95
+ * 影响 limit:免费 3 / Pro 无上限。
96
+ */
97
+ export declare function useCustomPresets(isPro?: boolean): UseCustomPresetsResult;
98
+ //# sourceMappingURL=useCustomPresets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomPresets.d.ts","sourceRoot":"","sources":["../../src/hooks/useCustomPresets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAC;AAM5B,kBAAkB;AAClB,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,QAAW,CAAC;AAEzC,kBAAkB;AAClB,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,GAAG,EAAE,mBAAmB,CAAC;IACzB,iBAAiB;IACjB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,iBAAiB;IACjB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,0BAA0B;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,gCAAgC;IAChC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yBAAyB;IACzB,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAAC;IAC/C,gBAAgB;IAChB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB;IAChB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACzC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD;;;+BAG+B;AAC/B,wBAAgB,4BAA4B,IAAI,gBAAgB,EAAE,CA0CjE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAUhF;AAED,sCAAsC;AACtC,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,UAAQ,GAAG,sBAAsB,CA2GtE"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * useCustomPresets - 自定义尺寸预设持久化 hook(W17.5)
3
+ *
4
+ * 提供用户自定义图像尺寸预设的本地保存能力(免费 3 / Pro 无限)。
5
+ * 数据存储在 localStorage 的 `lokvis.customPresets` key,JSON 数组形式。
6
+ *
7
+ * 与 useWorkflows 的区别:
8
+ * - 自定义预设是尺寸配置(name/width/height/fit/format),轻量
9
+ * - 工作流槽位是完整 Workflow 定义(含 nodes/edges/inputs/outputs)
10
+ *
11
+ * 与 PLATFORM_PRESETS 的区别:
12
+ * - PLATFORM_PRESETS 是内置的固定预设(YouTube/TikTok 等平台标准尺寸)
13
+ * - 自定义预设是用户自建的任意尺寸配置,自由命名
14
+ *
15
+ * id 命名空间约定:自定义预设 id 以 `custom.` 前缀,与内置预设区分
16
+ * (如 `custom.my-instagram-square`),避免 PlatformPresetSelector 冲突。
17
+ *
18
+ * 多 tab / 多实例同步:
19
+ * - 原生 storage 事件:跨 tab 同步
20
+ * - 自定义 SYNC_EVENT:同 tab 多实例同步
21
+ *
22
+ * @module useCustomPresets
23
+ */
24
+ import { useCallback, useEffect, useState } from 'react';
25
+ const STORAGE_KEY = 'lokvis.customPresets';
26
+ /** 同 tab 多实例同步用的自定义事件名 */
27
+ const SYNC_EVENT = 'lokvis:custom-presets-change';
28
+ /** 免费用户自定义预设上限 */
29
+ export const FREE_PRESET_LIMIT = 3;
30
+ /** Pro 用户无上限 */
31
+ export const PRO_PRESET_LIMIT = Infinity;
32
+ /** 类型守卫:判断 unknown 是否为 Record<string, unknown> */
33
+ function isRecord(x) {
34
+ return typeof x === 'object' && x !== null;
35
+ }
36
+ const VALID_FIT_STRATEGIES = ['cover', 'contain', 'fill', 'inside', 'outside'];
37
+ const VALID_FORMATS = ['png', 'jpeg', 'webp'];
38
+ /** 从 localStorage 读取自定义预设。
39
+ * 容错:JSON 解析失败 / 非数组 / 字段缺失时返回空数组。
40
+ *
41
+ * 导出供测试直接调用(避免渲染 React 组件)。 */
42
+ export function readCustomPresetsFromStorage() {
43
+ if (typeof window === 'undefined')
44
+ return [];
45
+ try {
46
+ const raw = window.localStorage.getItem(STORAGE_KEY);
47
+ if (!raw)
48
+ return [];
49
+ const parsed = JSON.parse(raw);
50
+ if (!Array.isArray(parsed))
51
+ return [];
52
+ // 字段白名单过滤(防御损坏数据)
53
+ const result = parsed.filter((it) => {
54
+ if (!isRecord(it))
55
+ return false;
56
+ if (typeof it.id !== 'string' ||
57
+ typeof it.name !== 'string' ||
58
+ typeof it.width !== 'number' ||
59
+ typeof it.height !== 'number' ||
60
+ typeof it.fit !== 'string' ||
61
+ typeof it.createdAt !== 'number' ||
62
+ typeof it.updatedAt !== 'number') {
63
+ return false;
64
+ }
65
+ // id 必须以 custom. 前缀开头,与内置 PLATFORM_PRESETS 隔离
66
+ if (!it.id.startsWith('custom.'))
67
+ return false;
68
+ // fit 必须是合法值
69
+ if (!VALID_FIT_STRATEGIES.includes(it.fit)) {
70
+ return false;
71
+ }
72
+ // format 可选,若有则必须是合法值
73
+ if (it.format !== undefined && !VALID_FORMATS.includes(it.format)) {
74
+ return false;
75
+ }
76
+ // width / height 必须为正整数
77
+ if (it.width <= 0 || it.height <= 0)
78
+ return false;
79
+ return true;
80
+ });
81
+ // 按 updatedAt 降序(最新在前),与接口契约一致
82
+ result.sort((a, b) => b.updatedAt - a.updatedAt);
83
+ return result;
84
+ }
85
+ catch {
86
+ console.warn('[lokvis] Failed to read custom presets from storage');
87
+ return [];
88
+ }
89
+ }
90
+ /**
91
+ * 写入 localStorage。
92
+ * @returns true 成功;false 失败(隐私模式 / 配额超限 / 序列化异常)
93
+ *
94
+ * 导出供测试直接调用。
95
+ */
96
+ export function writeCustomPresetsToStorage(presets) {
97
+ if (typeof window === 'undefined')
98
+ return false;
99
+ try {
100
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(presets));
101
+ window.dispatchEvent(new CustomEvent(SYNC_EVENT));
102
+ return true;
103
+ }
104
+ catch (err) {
105
+ console.warn('[lokvis] Failed to persist custom presets to localStorage:', err);
106
+ return false;
107
+ }
108
+ }
109
+ /** 生成唯一 ID(custom. 前缀,与内置预设命名空间隔离) */
110
+ export function genCustomPresetId() {
111
+ const rand = Math.random().toString(36).slice(2, 8);
112
+ return `custom.${Date.now()}-${rand}`;
113
+ }
114
+ /**
115
+ * @param isPro 是否为 Pro 模式。父组件从 runtime.isPro 传入。
116
+ * 影响 limit:免费 3 / Pro 无上限。
117
+ */
118
+ export function useCustomPresets(isPro = false) {
119
+ const limit = isPro ? PRO_PRESET_LIMIT : FREE_PRESET_LIMIT;
120
+ const [presets, setPresets] = useState(() => readCustomPresetsFromStorage());
121
+ // 监听跨 tab storage + 同 tab SYNC_EVENT
122
+ useEffect(() => {
123
+ const handler = () => setPresets(readCustomPresetsFromStorage());
124
+ window.addEventListener('storage', handler);
125
+ window.addEventListener(SYNC_EVENT, handler);
126
+ return () => {
127
+ window.removeEventListener('storage', handler);
128
+ window.removeEventListener(SYNC_EVENT, handler);
129
+ };
130
+ }, []);
131
+ const save = useCallback((input) => {
132
+ // 输入校验
133
+ if (input.width <= 0 || input.height <= 0) {
134
+ throw new Error('预设尺寸必须为正数');
135
+ }
136
+ if (!input.name.trim()) {
137
+ throw new Error('预设名称不能为空');
138
+ }
139
+ const current = readCustomPresetsFromStorage();
140
+ const now = Date.now();
141
+ // 更新已有
142
+ if (input.id) {
143
+ const existing = current.find((p) => p.id === input.id);
144
+ if (existing) {
145
+ const updated = {
146
+ ...existing,
147
+ name: input.name,
148
+ width: input.width,
149
+ height: input.height,
150
+ fit: input.fit ?? existing.fit,
151
+ format: input.format ?? existing.format,
152
+ updatedAt: now,
153
+ };
154
+ const next = current.map((p) => (p.id === input.id ? updated : p));
155
+ const ok = writeCustomPresetsToStorage(next);
156
+ if (!ok) {
157
+ console.warn('[lokvis] 自定义预设未持久化到 localStorage,仅当前会话有效');
158
+ }
159
+ setPresets(next);
160
+ return updated;
161
+ }
162
+ }
163
+ // 新增
164
+ if (current.length >= limit) {
165
+ throw new Error(`自定义预设已达上限(${limit} 个)${isPro ? '' : ',升级 Pro 可无限制保存'}`);
166
+ }
167
+ const preset = {
168
+ id: genCustomPresetId(),
169
+ name: input.name,
170
+ width: input.width,
171
+ height: input.height,
172
+ fit: input.fit ?? 'cover',
173
+ format: input.format,
174
+ createdAt: now,
175
+ updatedAt: now,
176
+ };
177
+ const next = [...current, preset];
178
+ const ok = writeCustomPresetsToStorage(next);
179
+ if (!ok) {
180
+ console.warn('[lokvis] 自定义预设未持久化到 localStorage,仅当前会话有效');
181
+ }
182
+ setPresets(next);
183
+ return preset;
184
+ }, [limit, isPro]);
185
+ const remove = useCallback((id) => {
186
+ const current = readCustomPresetsFromStorage();
187
+ const next = current.filter((p) => p.id !== id);
188
+ const ok = writeCustomPresetsToStorage(next);
189
+ if (!ok) {
190
+ console.warn('[lokvis] Failed to persist custom presets removal');
191
+ }
192
+ setPresets(next);
193
+ }, []);
194
+ const get = useCallback((id) => {
195
+ const current = readCustomPresetsFromStorage();
196
+ return current.find((p) => p.id === id) ?? null;
197
+ }, []);
198
+ const canSaveMore = presets.length < limit;
199
+ const remaining = Math.max(0, limit - presets.length);
200
+ return {
201
+ presets,
202
+ save,
203
+ remove,
204
+ get,
205
+ limit,
206
+ canSaveMore,
207
+ remaining,
208
+ };
209
+ }
210
+ //# sourceMappingURL=useCustomPresets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCustomPresets.js","sourceRoot":"","sources":["../../src/hooks/useCustomPresets.ts"],"names":[],"mappings":"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"}
@@ -14,14 +14,32 @@
14
14
  * return <Workspace />;
15
15
  * }
16
16
  * ```
17
+ *
18
+ * @example 接 cloud session(W17.6)
19
+ * ```tsx
20
+ * const { runtime } = useLokvis({
21
+ * plugins: [imageToolsPlugin()],
22
+ * auth: { session: cloudJwt }, // → isPro: true,批量/槽位无上限
23
+ * });
24
+ * ```
17
25
  */
18
26
  import type { LokvisRuntime, RuntimeConfig } from '@lokvis/runtime';
19
- import type { PluginLoadEntry } from '@lokvis/sdk';
27
+ import type { LokvisAuthSession, PluginLoadEntry } from '@lokvis/sdk';
20
28
  export interface UseLokvisOptions extends RuntimeConfig {
21
29
  /** 预加载的插件列表 */
22
30
  plugins?: PluginLoadEntry[];
23
31
  /** 是否在挂载时自动初始化(默认 true) */
24
32
  autoInit?: boolean;
33
+ /**
34
+ * Cloud 注入的认证信息(W17.3 / W17.6)。
35
+ *
36
+ * 透传到 `createLokvis({ auth })`,SDK 据 presence 推导 `isPro`:
37
+ * - 传入非空 `session` 或 `token` 且未显式 `isPro: false` → Pro 模式
38
+ * - 不传 `auth`:保持 free 模式
39
+ *
40
+ * 详见 `@lokvis/sdk` 的 `LokvisAuthSession` 与 `resolveIsPro()` 文档。
41
+ */
42
+ auth?: LokvisAuthSession;
25
43
  }
26
44
  export interface UseLokvisResult {
27
45
  runtime: LokvisRuntime | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useLokvis.d.ts","sourceRoot":"","sources":["../../src/hooks/useLokvis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,eAAe;IACf,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAwCzE"}
1
+ {"version":3,"file":"useLokvis.d.ts","sourceRoot":"","sources":["../../src/hooks/useLokvis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,eAAe;IACf,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;IACpD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,eAAe,CAuDzE"}
@@ -14,33 +14,55 @@
14
14
  * return <Workspace />;
15
15
  * }
16
16
  * ```
17
+ *
18
+ * @example 接 cloud session(W17.6)
19
+ * ```tsx
20
+ * const { runtime } = useLokvis({
21
+ * plugins: [imageToolsPlugin()],
22
+ * auth: { session: cloudJwt }, // → isPro: true,批量/槽位无上限
23
+ * });
24
+ * ```
17
25
  */
18
26
  import { useEffect, useRef, useState } from 'react';
19
27
  import { createLokvis } from '@lokvis/sdk';
20
28
  import { useWorkspaceStore } from '../store/index.js';
21
29
  export function useLokvis(options = {}) {
22
- const { plugins = [], autoInit = true, ...runtimeConfig } = options;
30
+ const { plugins = [], autoInit = true, auth, ...runtimeConfig } = options;
23
31
  const [runtime, setRuntime] = useState(null);
24
32
  const [status, setStatus] = useState('idle');
25
33
  const [error, setError] = useState(null);
26
- const initRef = useRef(false);
27
34
  const storeInit = useWorkspaceStore((s) => s.init);
35
+ // 用 useRef 持有 plugins / runtimeConfig / auth / storeInit 的最新值,
36
+ // 避免 effect 依赖这些对象引用导致每次 render 都重新初始化 runtime。
37
+ // effect 仅在 authKey / autoInit 变化时触发,内部从 ref 读取当前值。
38
+ const pluginsRef = useRef(plugins);
39
+ const runtimeConfigRef = useRef(runtimeConfig);
40
+ const authRef = useRef(auth);
41
+ const storeInitRef = useRef(storeInit);
42
+ pluginsRef.current = plugins;
43
+ runtimeConfigRef.current = runtimeConfig;
44
+ authRef.current = auth;
45
+ storeInitRef.current = storeInit;
46
+ // 用 JSON.stringify(auth) 作为 effect 依赖,使 auth 变化时重新初始化。
47
+ // (auth 是对象,直接放依赖数组会因引用变化每次 render 都触发;
48
+ // JSON.stringify 提供稳定的 primitive 依赖,只在 auth 内容变化时重 init)
49
+ const authKey = JSON.stringify(auth ?? null);
28
50
  useEffect(() => {
29
- if (!autoInit || initRef.current)
51
+ if (!autoInit)
30
52
  return;
31
- initRef.current = true;
32
53
  let cancelled = false;
33
54
  (async () => {
34
55
  try {
35
56
  setStatus('initializing');
36
57
  const rt = await createLokvis({
37
- ...runtimeConfig,
38
- plugins,
58
+ ...runtimeConfigRef.current,
59
+ plugins: pluginsRef.current,
60
+ auth: authRef.current,
39
61
  });
40
62
  if (cancelled)
41
63
  return;
42
64
  setRuntime(rt);
43
- await storeInit(rt);
65
+ await storeInitRef.current(rt);
44
66
  if (cancelled)
45
67
  return;
46
68
  setStatus('ready');
@@ -55,8 +77,7 @@ export function useLokvis(options = {}) {
55
77
  return () => {
56
78
  cancelled = true;
57
79
  };
58
- // oxlint-disable-next-line react-hooks/exhaustive-deps
59
- }, []);
80
+ }, [authKey, autoInit]);
60
81
  return { runtime, status, error };
61
82
  }
62
83
  //# sourceMappingURL=useLokvis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLokvis.js","sourceRoot":"","sources":["../../src/hooks/useLokvis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAetD,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE;IACtD,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA4B,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO;QACzC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAEvB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,SAAS,CAAC,cAAc,CAAC,CAAC;gBAC1B,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC;oBAC5B,GAAG,aAAa;oBAChB,OAAO;iBACR,CAAC,CAAC;gBACH,IAAI,SAAS;oBAAE,OAAO;gBACtB,UAAU,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACpB,IAAI,SAAS;oBAAE,OAAO;gBACtB,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,SAAS;oBAAE,OAAO;gBACtB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"useLokvis.js","sourceRoot":"","sources":["../../src/hooks/useLokvis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAyBtD,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE;IACtD,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IAC1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAuB,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA4B,MAAM,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEnD,+DAA+D;IAC/D,gDAAgD;IAChD,oDAAoD;IACpD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IACzC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IAEjC,uDAAuD;IACvD,wCAAwC;IACxC,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC,KAAK,IAAI,EAAE;YACV,IAAI,CAAC;gBACH,SAAS,CAAC,cAAc,CAAC,CAAC;gBAC1B,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC;oBAC5B,GAAG,gBAAgB,CAAC,OAAO;oBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,IAAI,EAAE,OAAO,CAAC,OAAO;iBACtB,CAAC,CAAC;gBACH,IAAI,SAAS;oBAAE,OAAO;gBACtB,UAAU,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,SAAS;oBAAE,OAAO;gBACtB,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,SAAS;oBAAE,OAAO;gBACtB,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3D,SAAS,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACpC,CAAC"}