@appthen/vibe-workspace 0.1.8 → 0.1.9

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 (44) hide show
  1. package/dist/{DocxPreview-CAmipQT3.js → DocxPreview-D2izjHfQ.js} +5 -5
  2. package/dist/{DocxPreview-CAmipQT3.js.map → DocxPreview-D2izjHfQ.js.map} +1 -1
  3. package/dist/{DotBadge-CeeLzNu3.js → DotBadge-BTtlqPqv.js} +2 -2
  4. package/dist/{DotBadge-CeeLzNu3.js.map → DotBadge-BTtlqPqv.js.map} +1 -1
  5. package/dist/{FreeCanvas-DritKIPq.js → FreeCanvas-D0qGlWl-.js} +2 -2
  6. package/dist/{FreeCanvas-DritKIPq.js.map → FreeCanvas-D0qGlWl-.js.map} +1 -1
  7. package/dist/{ImagePreview-ByIQrPzb.js → ImagePreview-CVw1IKRl.js} +4 -4
  8. package/dist/{ImagePreview-ByIQrPzb.js.map → ImagePreview-CVw1IKRl.js.map} +1 -1
  9. package/dist/{PdfPreview-0vwF3tLn.js → PdfPreview-BRDBxezL.js} +4 -4
  10. package/dist/{PdfPreview-0vwF3tLn.js.map → PdfPreview-BRDBxezL.js.map} +1 -1
  11. package/dist/{PluginContext-uAiGNF8S.js → PluginContext-DCtbrkoX.js} +2 -2
  12. package/dist/{PluginContext-uAiGNF8S.js.map → PluginContext-DCtbrkoX.js.map} +1 -1
  13. package/dist/{Workbench-8uTfTtsq.js → Workbench-Bz0iJPL8.js} +12 -12
  14. package/dist/{Workbench-8uTfTtsq.js.map → Workbench-Bz0iJPL8.js.map} +1 -1
  15. package/dist/{activate-DVnxnmfA.js → activate-B_lpUEhD.js} +3 -3
  16. package/dist/{activate-DVnxnmfA.js.map → activate-B_lpUEhD.js.map} +1 -1
  17. package/dist/canvas-core/index.js +1 -1
  18. package/dist/coding-kit/index.js +1 -1
  19. package/dist/components/index.js +4 -4
  20. package/dist/{dialog-ssICQNSV.js → dialog-RPHf7Mz2.js} +2 -2
  21. package/dist/{dialog-ssICQNSV.js.map → dialog-RPHf7Mz2.js.map} +1 -1
  22. package/dist/{docx-preview-lJ7EdPsl.js → docx-preview-CH7hwx62.js} +2 -2
  23. package/dist/{docx-preview-lJ7EdPsl.js.map → docx-preview-CH7hwx62.js.map} +1 -1
  24. package/dist/extension-dev-workbench/index.js +4 -4
  25. package/dist/{extensionRegistry-D35Ld-Wa.js → extensionRegistry-B6X2GQLX.js} +2 -2
  26. package/dist/{extensionRegistry-D35Ld-Wa.js.map → extensionRegistry-B6X2GQLX.js.map} +1 -1
  27. package/dist/index.js +13 -13
  28. package/dist/{list-detail-workspace-template-BTrgMGPx.js → list-detail-workspace-template-DsiEfhxo.js} +2 -2
  29. package/dist/{list-detail-workspace-template-BTrgMGPx.js.map → list-detail-workspace-template-DsiEfhxo.js.map} +1 -1
  30. package/dist/overlay/index.js +2 -2
  31. package/dist/{pluginCapabilities-BkCT7QDO.js → pluginCapabilities-BKLR6W4M.js} +2 -2
  32. package/dist/{pluginCapabilities-BkCT7QDO.js.map → pluginCapabilities-BKLR6W4M.js.map} +1 -1
  33. package/dist/plugins/agent/PluginModule.js +2 -2
  34. package/dist/plugins/base/index.js +1 -1
  35. package/dist/{sheet-Bsq3CLW4.js → sheet-tD__qqBd.js} +10 -10
  36. package/dist/{sheet-Bsq3CLW4.js.map → sheet-tD__qqBd.js.map} +1 -1
  37. package/dist/{skeleton-BSqTbX9l.js → skeleton-6VSIwQtG.js} +2 -2
  38. package/dist/{skeleton-BSqTbX9l.js.map → skeleton-6VSIwQtG.js.map} +1 -1
  39. package/dist/ui/index.js +3 -3
  40. package/dist/{useBinaryFileUrl-D11yvGuG.js → useBinaryFileUrl-_FJREA5b.js} +3 -3
  41. package/dist/{useBinaryFileUrl-D11yvGuG.js.map → useBinaryFileUrl-_FJREA5b.js.map} +1 -1
  42. package/dist/vibe-workspace.css +1 -1
  43. package/dist/workbench/index.js +2 -2
  44. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect } from "react";
3
- import { u as useBinaryFileUrl } from "./useBinaryFileUrl-D11yvGuG.js";
4
- import { L as LoaderCircle, F as FileText } from "./activate-DVnxnmfA.js";
5
- import { R as RefreshCw } from "./extensionRegistry-D35Ld-Wa.js";
3
+ import { u as useBinaryFileUrl } from "./useBinaryFileUrl-_FJREA5b.js";
4
+ import { L as LoaderCircle, F as FileText } from "./activate-B_lpUEhD.js";
5
+ import { R as RefreshCw } from "./extensionRegistry-B6X2GQLX.js";
6
6
  const DocxPreview = ({ file }) => {
7
7
  const [state, retry] = useBinaryFileUrl(file);
8
8
  const [docxError, setDocxError] = useState(null);
@@ -24,7 +24,7 @@ const DocxPreview = ({ file }) => {
24
24
  const container = containerRef.current;
25
25
  if (!container) return;
26
26
  container.innerHTML = "";
27
- const { renderAsync } = await import("./docx-preview-lJ7EdPsl.js");
27
+ const { renderAsync } = await import("./docx-preview-CH7hwx62.js");
28
28
  if (cancelled || generation !== renderGenerationRef.current) return;
29
29
  await renderAsync(buffer, container, null, {
30
30
  inWrapper: true,
@@ -96,4 +96,4 @@ const Center = ({ children }) => /* @__PURE__ */ jsx("div", { className: "flex h
96
96
  export {
97
97
  DocxPreview
98
98
  };
99
- //# sourceMappingURL=DocxPreview-CAmipQT3.js.map
99
+ //# sourceMappingURL=DocxPreview-D2izjHfQ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocxPreview-CAmipQT3.js","sources":["../src/plugins/binary-previews/DocxPreview.tsx"],"sourcesContent":["/**\n * Word(.docx)预览:docx-preview 动态 import(含 jszip,独立 lazy chunk)。\n * 签名 URL fetch 需要存储端 CORS 支持;runtime blob URL 同源无此问题。\n */\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Loader2Icon, FileTextIcon, RefreshCwIcon } from 'lucide-react';\nimport type { ICustomEditorProps } from '../../types';\nimport { useBinaryFileUrl } from './useBinaryFileUrl';\n\ntype DocxErrorKind = 'fetch' | 'render';\n\nexport const DocxPreview: React.FC<ICustomEditorProps> = ({ file }) => {\n const [state, retry] = useBinaryFileUrl(file);\n const [docxError, setDocxError] = useState<{ kind: DocxErrorKind; message: string } | null>(null);\n const [rendering, setRendering] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n // 防并发:渲染期间文件已切换时丢弃结果\n const renderGenerationRef = useRef(0);\n\n useEffect(() => {\n if (state.status !== 'ready') return;\n const generation = ++renderGenerationRef.current;\n let cancelled = false;\n\n (async () => {\n setRendering(true);\n setDocxError(null);\n try {\n const response = await fetch(state.url);\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const buffer = await response.arrayBuffer();\n if (cancelled || generation !== renderGenerationRef.current) return;\n\n const container = containerRef.current;\n if (!container) return;\n container.innerHTML = '';\n\n const { renderAsync } = await import('docx-preview');\n if (cancelled || generation !== renderGenerationRef.current) return;\n await renderAsync(buffer, container, null, {\n inWrapper: true,\n ignoreWidth: false,\n ignoreHeight: false,\n });\n } catch (e) {\n if (cancelled || generation !== renderGenerationRef.current) return;\n const message = e instanceof Error ? e.message : String(e);\n // 粗粒度区分:fetch 阶段(CORS/网络)vs 渲染阶段(文件损坏)\n setDocxError({\n kind: containerRef.current && containerRef.current.childElementCount > 0 ? 'render' : 'fetch',\n message,\n });\n } finally {\n if (!cancelled) setRendering(false);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.status === 'ready' ? state.url : null]);\n\n if (state.status === 'loading') {\n return (\n <Center>\n <Loader2Icon className=\"animate-spin text-vscode-accent\" size={28} />\n <span className=\"mt-3 text-xs text-vscode-textDark\">加载文档中...</span>\n </Center>\n );\n }\n\n if (state.status === 'no-asset') {\n return (\n <Center>\n <FileTextIcon size={32} className=\"text-vscode-textDark/50\" />\n <span className=\"mt-3 text-sm text-vscode-textDark\">该文件没有关联的二进制资产(未通过资产上传流程写入),无法预览</span>\n </Center>\n );\n }\n\n if (state.status === 'too-large') {\n return (\n <Center>\n <FileTextIcon size={32} className=\"text-vscode-textDark/50\" />\n <span className=\"mt-3 text-sm text-vscode-textDark\">文件过大,超过预览上限,不支持预览</span>\n </Center>\n );\n }\n\n if (state.status === 'error' || docxError) {\n const message = docxError\n ? docxError.kind === 'fetch'\n ? `无法获取文档内容(可能是存储端 CORS 限制):${docxError.message}`\n : `文档解析失败,文件可能已损坏或不是标准 .docx:${docxError.message}`\n : `文档加载失败:${(state as { message?: string }).message}`;\n return (\n <Center>\n <span className=\"text-sm text-red-400\">{message}</span>\n <button\n onClick={() => { setDocxError(null); retry(); }}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs bg-vscode-accent text-white hover:opacity-90\"\n >\n <RefreshCwIcon size={12} /> 重试\n </button>\n </Center>\n );\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col bg-vscode-bg\">\n <div className=\"flex h-10 shrink-0 items-center border-b border-[#202635]/60 px-3\">\n <span className=\"truncate text-[11px] text-vscode-textDark/60\">{file?.name}</span>\n {rendering && <Loader2Icon className=\"ml-2 animate-spin text-vscode-accent\" size={12} />}\n </div>\n <div ref={containerRef} className=\"min-h-0 flex-1 overflow-auto bg-[#ececec] px-4 py-6\" />\n </div>\n );\n};\n\nconst Center: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div className=\"flex h-full flex-col items-center justify-center bg-vscode-bg px-6 text-center\">\n {children}\n </div>\n);\n"],"names":["Loader2Icon","FileTextIcon","RefreshCwIcon"],"mappings":"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"}
1
+ {"version":3,"file":"DocxPreview-D2izjHfQ.js","sources":["../src/plugins/binary-previews/DocxPreview.tsx"],"sourcesContent":["/**\n * Word(.docx)预览:docx-preview 动态 import(含 jszip,独立 lazy chunk)。\n * 签名 URL fetch 需要存储端 CORS 支持;runtime blob URL 同源无此问题。\n */\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Loader2Icon, FileTextIcon, RefreshCwIcon } from 'lucide-react';\nimport type { ICustomEditorProps } from '../../types';\nimport { useBinaryFileUrl } from './useBinaryFileUrl';\n\ntype DocxErrorKind = 'fetch' | 'render';\n\nexport const DocxPreview: React.FC<ICustomEditorProps> = ({ file }) => {\n const [state, retry] = useBinaryFileUrl(file);\n const [docxError, setDocxError] = useState<{ kind: DocxErrorKind; message: string } | null>(null);\n const [rendering, setRendering] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n // 防并发:渲染期间文件已切换时丢弃结果\n const renderGenerationRef = useRef(0);\n\n useEffect(() => {\n if (state.status !== 'ready') return;\n const generation = ++renderGenerationRef.current;\n let cancelled = false;\n\n (async () => {\n setRendering(true);\n setDocxError(null);\n try {\n const response = await fetch(state.url);\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n const buffer = await response.arrayBuffer();\n if (cancelled || generation !== renderGenerationRef.current) return;\n\n const container = containerRef.current;\n if (!container) return;\n container.innerHTML = '';\n\n const { renderAsync } = await import('docx-preview');\n if (cancelled || generation !== renderGenerationRef.current) return;\n await renderAsync(buffer, container, null, {\n inWrapper: true,\n ignoreWidth: false,\n ignoreHeight: false,\n });\n } catch (e) {\n if (cancelled || generation !== renderGenerationRef.current) return;\n const message = e instanceof Error ? e.message : String(e);\n // 粗粒度区分:fetch 阶段(CORS/网络)vs 渲染阶段(文件损坏)\n setDocxError({\n kind: containerRef.current && containerRef.current.childElementCount > 0 ? 'render' : 'fetch',\n message,\n });\n } finally {\n if (!cancelled) setRendering(false);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.status === 'ready' ? state.url : null]);\n\n if (state.status === 'loading') {\n return (\n <Center>\n <Loader2Icon className=\"animate-spin text-vscode-accent\" size={28} />\n <span className=\"mt-3 text-xs text-vscode-textDark\">加载文档中...</span>\n </Center>\n );\n }\n\n if (state.status === 'no-asset') {\n return (\n <Center>\n <FileTextIcon size={32} className=\"text-vscode-textDark/50\" />\n <span className=\"mt-3 text-sm text-vscode-textDark\">该文件没有关联的二进制资产(未通过资产上传流程写入),无法预览</span>\n </Center>\n );\n }\n\n if (state.status === 'too-large') {\n return (\n <Center>\n <FileTextIcon size={32} className=\"text-vscode-textDark/50\" />\n <span className=\"mt-3 text-sm text-vscode-textDark\">文件过大,超过预览上限,不支持预览</span>\n </Center>\n );\n }\n\n if (state.status === 'error' || docxError) {\n const message = docxError\n ? docxError.kind === 'fetch'\n ? `无法获取文档内容(可能是存储端 CORS 限制):${docxError.message}`\n : `文档解析失败,文件可能已损坏或不是标准 .docx:${docxError.message}`\n : `文档加载失败:${(state as { message?: string }).message}`;\n return (\n <Center>\n <span className=\"text-sm text-red-400\">{message}</span>\n <button\n onClick={() => { setDocxError(null); retry(); }}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs bg-vscode-accent text-white hover:opacity-90\"\n >\n <RefreshCwIcon size={12} /> 重试\n </button>\n </Center>\n );\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col bg-vscode-bg\">\n <div className=\"flex h-10 shrink-0 items-center border-b border-[#202635]/60 px-3\">\n <span className=\"truncate text-[11px] text-vscode-textDark/60\">{file?.name}</span>\n {rendering && <Loader2Icon className=\"ml-2 animate-spin text-vscode-accent\" size={12} />}\n </div>\n <div ref={containerRef} className=\"min-h-0 flex-1 overflow-auto bg-[#ececec] px-4 py-6\" />\n </div>\n );\n};\n\nconst Center: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div className=\"flex h-full flex-col items-center justify-center bg-vscode-bg px-6 text-center\">\n {children}\n </div>\n);\n"],"names":["Loader2Icon","FileTextIcon","RefreshCwIcon"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { Z as Select, _ as SelectTrigger, $ as SelectValue, a0 as SelectIcon, a1 as SelectPortal, a2 as SelectContent, a3 as SelectViewport, a4 as SelectItem, a5 as SelectItemIndicator, a6 as SelectItemText } from "./skeleton-BSqTbX9l.js";
2
+ import { Z as Select, _ as SelectTrigger, $ as SelectValue, a0 as SelectIcon, a1 as SelectPortal, a2 as SelectContent, a3 as SelectViewport, a4 as SelectItem, a5 as SelectItemIndicator, a6 as SelectItemText } from "./skeleton-6VSIwQtG.js";
3
3
  import { c as cn } from "./utils-D7w9BxgN.js";
4
4
  import { C as ChevronDown } from "./chevron-right-D51vM8ri.js";
5
5
  import { C as Check } from "./circle-D1lKxHx-.js";
@@ -96,4 +96,4 @@ export {
96
96
  DotBadge as D,
97
97
  SimpleSelect as S
98
98
  };
99
- //# sourceMappingURL=DotBadge-CeeLzNu3.js.map
99
+ //# sourceMappingURL=DotBadge-BTtlqPqv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DotBadge-CeeLzNu3.js","sources":["../src/components/SimpleSelect.tsx","../src/components/DotBadge.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface SimpleSelectOption {\n value: string\n label: string\n}\n\nexport interface SimpleSelectProps {\n value: string\n onValueChange: (value: string) => void\n options: SimpleSelectOption[]\n className?: string\n size?: \"sm\" | \"xs\" | \"md\"\n \"aria-label\"?: string\n placeholder?: string\n}\n\n/**\n * 业务便利封装:以单组件 `{ value, onValueChange, options }` 形式提供下拉选择,\n * 对齐 CRM 列表页的使用范式,避免每次都写复合式 JSX。\n * 底层复用 shadcn `WorkbenchSelect`(SelectPrimitive),无障碍/键盘支持完整。\n */\nexport function SimpleSelect({\n value,\n onValueChange,\n options,\n className,\n size = \"md\",\n placeholder,\n ...rest\n}: SimpleSelectProps) {\n const sizeCls =\n size === \"sm\" ? \"h-7 text-xs\" : size === \"xs\" ? \"h-6 text-xs\" : \"h-9 text-sm\"\n return (\n <SelectPrimitive.Root value={value} onValueChange={onValueChange}>\n <SelectPrimitive.Trigger\n className={cn(\n \"inline-flex w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 ring-offset-background transition-colors placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:min-w-0 [&>span]:truncate\",\n sizeCls,\n className,\n )}\n aria-label={rest[\"aria-label\"]}\n >\n <SelectPrimitive.Value placeholder={placeholder} />\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={4}\n className=\"relative z-[1000] max-h-72 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <SelectPrimitive.Viewport className=\"p-1\">\n {options.map((opt) => (\n <SelectPrimitive.Item\n key={opt.value}\n value={opt.value}\n className=\"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{opt.label}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n )\n}\nSimpleSelect.displayName = \"SimpleSelect\"\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport type DotTone =\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"vip\"\n | \"potential\"\n\nconst TONE_VAR: Record<DotTone, string> = {\n neutral: \"var(--ck-border-strong)\",\n success: \"var(--ck-success, #18794e)\",\n warning: \"var(--ck-warning, #be5a00)\",\n danger: \"var(--ck-danger, #c5342f)\",\n info: \"var(--ck-brand-primary, #3e5bec)\",\n vip: \"var(--ck-vip, #b8750a)\",\n potential: \"var(--ck-potential, #475569)\",\n}\n\nexport interface DotBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: DotTone\n}\n\n/**\n * 中性胶囊 + 语义小圆点的徽标,对齐 CRM 列表页「灰底 + 圆点」视觉范式\n * (替代 shadcn `WorkbenchBadge` 的彩色填充 variants,消除 AI 味的强色块)。\n * 圆点色由语义 token 驱动,主题切换自动跟随。\n */\nexport function DotBadge({\n tone = \"neutral\",\n className,\n children,\n style,\n ...props\n}: DotBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border border-[var(--ck-border-default)] bg-[var(--ck-bg-surface)] px-2.5 py-0.5 text-xs font-medium text-[var(--ck-text-primary)]\",\n className,\n )}\n style={{ ...style, [\"--dot\" as string]: TONE_VAR[tone] }}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"h-1.5 w-1.5 shrink-0 rounded-full\"\n style={{ backgroundColor: \"var(--dot)\" }}\n />\n {children}\n </span>\n )\n}\nDotBadge.displayName = \"DotBadge\"\n"],"names":["SelectPrimitive.Root","SelectPrimitive.Trigger","SelectPrimitive.Value","SelectPrimitive.Icon","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.ItemText"],"mappings":";;;;;AA0BO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,UACJ,SAAS,OAAO,gBAAgB,SAAS,OAAO,gBAAgB;AAClE,SACE,qBAACA,QAAA,EAAqB,OAAc,eAClC,UAAA;AAAA,IAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,cAAY,KAAK,YAAY;AAAA,QAE7B,UAAA;AAAA,UAAA,oBAACC,aAAA,EAAsB,aAA0B;AAAA,UACjD,oBAACC,YAAA,EAAqB,SAAO,MAC3B,UAAA,oBAAC,aAAA,EAAY,WAAU,8BAAA,CAA8B,EAAA,CACvD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,oBAACC,cAAA,EACC,UAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAU;AAAA,QAEV,UAAA,oBAACC,gBAAA,EAAyB,WAAU,OACjC,UAAA,QAAQ,IAAI,CAAC,QACZ;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,OAAO,IAAI;AAAA,YACX,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,WAAU,gEACd,UAAA,oBAACC,qBAAA,EACC,UAAA,oBAAC,OAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B,GACF;AAAA,cACA,oBAACC,gBAAA,EAA0B,cAAI,MAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAThC,IAAI;AAAA,QAAA,CAWZ,EAAA,CACH;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AACA,aAAa,cAAc;AClE3B,MAAM,WAAoC;AAAA,EACxC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW;AACb;AAYO,SAAS,SAAS;AAAA,EACvB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG,OAAO,CAAC,OAAiB,GAAG,SAAS,IAAI,EAAA;AAAA,MACpD,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,aAAA;AAAA,UAAa;AAAA,QAAA;AAAA,QAExC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AACA,SAAS,cAAc;"}
1
+ {"version":3,"file":"DotBadge-BTtlqPqv.js","sources":["../src/components/SimpleSelect.tsx","../src/components/DotBadge.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface SimpleSelectOption {\n value: string\n label: string\n}\n\nexport interface SimpleSelectProps {\n value: string\n onValueChange: (value: string) => void\n options: SimpleSelectOption[]\n className?: string\n size?: \"sm\" | \"xs\" | \"md\"\n \"aria-label\"?: string\n placeholder?: string\n}\n\n/**\n * 业务便利封装:以单组件 `{ value, onValueChange, options }` 形式提供下拉选择,\n * 对齐 CRM 列表页的使用范式,避免每次都写复合式 JSX。\n * 底层复用 shadcn `WorkbenchSelect`(SelectPrimitive),无障碍/键盘支持完整。\n */\nexport function SimpleSelect({\n value,\n onValueChange,\n options,\n className,\n size = \"md\",\n placeholder,\n ...rest\n}: SimpleSelectProps) {\n const sizeCls =\n size === \"sm\" ? \"h-7 text-xs\" : size === \"xs\" ? \"h-6 text-xs\" : \"h-9 text-sm\"\n return (\n <SelectPrimitive.Root value={value} onValueChange={onValueChange}>\n <SelectPrimitive.Trigger\n className={cn(\n \"inline-flex w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 ring-offset-background transition-colors placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:min-w-0 [&>span]:truncate\",\n sizeCls,\n className,\n )}\n aria-label={rest[\"aria-label\"]}\n >\n <SelectPrimitive.Value placeholder={placeholder} />\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 shrink-0 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={4}\n className=\"relative z-[1000] max-h-72 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md\"\n >\n <SelectPrimitive.Viewport className=\"p-1\">\n {options.map((opt) => (\n <SelectPrimitive.Item\n key={opt.value}\n value={opt.value}\n className=\"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{opt.label}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n )\n}\nSimpleSelect.displayName = \"SimpleSelect\"\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport type DotTone =\n | \"neutral\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\"\n | \"vip\"\n | \"potential\"\n\nconst TONE_VAR: Record<DotTone, string> = {\n neutral: \"var(--ck-border-strong)\",\n success: \"var(--ck-success, #18794e)\",\n warning: \"var(--ck-warning, #be5a00)\",\n danger: \"var(--ck-danger, #c5342f)\",\n info: \"var(--ck-brand-primary, #3e5bec)\",\n vip: \"var(--ck-vip, #b8750a)\",\n potential: \"var(--ck-potential, #475569)\",\n}\n\nexport interface DotBadgeProps\n extends React.HTMLAttributes<HTMLSpanElement> {\n tone?: DotTone\n}\n\n/**\n * 中性胶囊 + 语义小圆点的徽标,对齐 CRM 列表页「灰底 + 圆点」视觉范式\n * (替代 shadcn `WorkbenchBadge` 的彩色填充 variants,消除 AI 味的强色块)。\n * 圆点色由语义 token 驱动,主题切换自动跟随。\n */\nexport function DotBadge({\n tone = \"neutral\",\n className,\n children,\n style,\n ...props\n}: DotBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border border-[var(--ck-border-default)] bg-[var(--ck-bg-surface)] px-2.5 py-0.5 text-xs font-medium text-[var(--ck-text-primary)]\",\n className,\n )}\n style={{ ...style, [\"--dot\" as string]: TONE_VAR[tone] }}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className=\"h-1.5 w-1.5 shrink-0 rounded-full\"\n style={{ backgroundColor: \"var(--dot)\" }}\n />\n {children}\n </span>\n )\n}\nDotBadge.displayName = \"DotBadge\"\n"],"names":["SelectPrimitive.Root","SelectPrimitive.Trigger","SelectPrimitive.Value","SelectPrimitive.Icon","SelectPrimitive.Portal","SelectPrimitive.Content","SelectPrimitive.Viewport","SelectPrimitive.Item","SelectPrimitive.ItemIndicator","SelectPrimitive.ItemText"],"mappings":";;;;;AA0BO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,QAAM,UACJ,SAAS,OAAO,gBAAgB,SAAS,OAAO,gBAAgB;AAClE,SACE,qBAACA,QAAA,EAAqB,OAAc,eAClC,UAAA;AAAA,IAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,cAAY,KAAK,YAAY;AAAA,QAE7B,UAAA;AAAA,UAAA,oBAACC,aAAA,EAAsB,aAA0B;AAAA,UACjD,oBAACC,YAAA,EAAqB,SAAO,MAC3B,UAAA,oBAAC,aAAA,EAAY,WAAU,8BAAA,CAA8B,EAAA,CACvD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,oBAACC,cAAA,EACC,UAAA;AAAA,MAACC;AAAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAU;AAAA,QAEV,UAAA,oBAACC,gBAAA,EAAyB,WAAU,OACjC,UAAA,QAAQ,IAAI,CAAC,QACZ;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,OAAO,IAAI;AAAA,YACX,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,WAAU,gEACd,UAAA,oBAACC,qBAAA,EACC,UAAA,oBAAC,OAAA,EAAM,WAAU,UAAA,CAAU,EAAA,CAC7B,GACF;AAAA,cACA,oBAACC,gBAAA,EAA0B,cAAI,MAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAThC,IAAI;AAAA,QAAA,CAWZ,EAAA,CACH;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AACA,aAAa,cAAc;AClE3B,MAAM,WAAoC;AAAA,EACxC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW;AACb;AAYO,SAAS,SAAS;AAAA,EACvB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,OAAO,EAAE,GAAG,OAAO,CAAC,OAAiB,GAAG,SAAS,IAAI,EAAA;AAAA,MACpD,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,aAAA;AAAA,UAAa;AAAA,QAAA;AAAA,QAExC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AACA,SAAS,cAAc;"}
@@ -5,7 +5,7 @@ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
5
5
  import * as React from "react";
6
6
  import React__default, { memo, useState, forwardRef, createContext, useCallback, useMemo, useContext, useRef, useEffect, useLayoutEffect } from "react";
7
7
  import { c as cn } from "./utils-D7w9BxgN.js";
8
- import { g as getDefaultExportFromCjs, n as nanoid, e as extensionRegistry, R as RefreshCw, P as Plus, L as LayoutGrid } from "./extensionRegistry-D35Ld-Wa.js";
8
+ import { g as getDefaultExportFromCjs, n as nanoid, e as extensionRegistry, R as RefreshCw, P as Plus, L as LayoutGrid } from "./extensionRegistry-B6X2GQLX.js";
9
9
  import { createPortal } from "react-dom";
10
10
  import { X } from "./x-DGVakEST.js";
11
11
  import { S as Search } from "./search-BmktXQFD.js";
@@ -13424,4 +13424,4 @@ export {
13424
13424
  applyNodeChanges as y,
13425
13425
  applyEdgeChanges as z
13426
13426
  };
13427
- //# sourceMappingURL=FreeCanvas-DritKIPq.js.map
13427
+ //# sourceMappingURL=FreeCanvas-D0qGlWl-.js.map