@kanyun-ai-infra/band-plugin-react 0.1.2 → 0.2.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.
- package/dist/chunk-ER2ITOG5.js +2425 -0
- package/dist/components.d.ts +297 -2
- package/dist/components.js +33 -4
- package/dist/index.d.ts +3 -153
- package/dist/index.js +472 -1245
- package/package.json +5 -5
- package/dist/chunk-HX653UQN.js +0 -729
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import * as react from 'react';
|
|
|
9
9
|
import { ReactNode, CompositionEvent, RefObject, KeyboardEvent } from 'react';
|
|
10
10
|
export { FORBIDDEN_CODE, NETWORK_LOST, NETWORK_LOST_CODE, errorText, failedBecause, isForbidden, isNetworkLost } from './errors.js';
|
|
11
11
|
import { SettingsGroup, SettingsBackTarget, SettingsTarget } from './components.js';
|
|
12
|
-
export { AgentAvatar, Avatar, BandMark, ErrorNote, Glyph, GlyphKind, INSTRUMENTS, InfoNote, Instrument, LogoLockup, PaneHeader, SettingsActions, SettingsBack, SettingsChoices, SettingsDanger, SettingsDangerRow, SettingsDialog, SettingsEmpty, SettingsFact, SettingsFacts, SettingsField, SettingsFieldProps, SettingsForm, SettingsHead, SettingsLayout, SettingsLoading, SettingsNavItem, SettingsNoAccess, SettingsNotice, SettingsReadError, SettingsRow, SettingsRows, SettingsSaveState, SettingsSaved, SettingsSection, SettingsSingle, WorkshopEmblem, WorkshopIcon, agentInstrument, avatarInitial, avatarTone, instrumentOf, memberOrder, settingsLinkHandler } from './components.js';
|
|
12
|
+
export { AgentAvatar, Avatar, BandMark, BlockedPerson, Combobox, ComboboxItem, DirectoryPage, ErrorNote, FilterGroup, FilterMenu, FilterOption, FilterRow, FilterSelection, Glyph, GlyphKind, INSTRUMENTS, InfoNote, Instrument, LogoLockup, PaneHeader, PersonDirectory, PersonPicker, PersonPickerProps, PersonSearch, PersonSearchProps, PickerOrg, PickerPerson, SettingsActions, SettingsBack, SettingsChoices, SettingsDanger, SettingsDangerRow, SettingsDialog, SettingsEmpty, SettingsFact, SettingsFacts, SettingsField, SettingsFieldProps, SettingsForm, SettingsHead, SettingsLayout, SettingsLoading, SettingsNavItem, SettingsNoAccess, SettingsNotice, SettingsPick, SettingsPicks, SettingsReadError, SettingsRow, SettingsRows, SettingsSaveState, SettingsSaved, SettingsSection, SettingsSingle, TagInput, ToastAction, ToastHost, ToastItem, ToastKind, ToastOptions, WorkshopEmblem, WorkshopIcon, agentInstrument, avatarInitial, avatarTone, dismissAllToasts, dismissToast, facetedCount, filterRows, instrumentOf, memberOrder, peopleDirectory, settingsLinkHandler, splitTags, toast } from './components.js';
|
|
13
13
|
import { ModelCredential, ProjectAgentModels } from '@kanyun-ai-infra/band-contracts/api';
|
|
14
14
|
export { MODEL_CREDENTIAL_CHANGED, MODEL_NOT_CONFIGURED, MODEL_PROJECT_CONSENT_PENDING, MODEL_SELECTION_REQUIRED, MODEL_SERVICE_NOT_FOUND } from '@kanyun-ai-infra/band-contracts/api';
|
|
15
15
|
export { scrollIntoPanel } from './scroll.js';
|
|
@@ -343,106 +343,6 @@ declare function useComposition(onEnd: (el: HTMLInputElement | HTMLTextAreaEleme
|
|
|
343
343
|
};
|
|
344
344
|
};
|
|
345
345
|
|
|
346
|
-
/** 下拉里的一项。`group` 相同的排在一段,段的顺序按它第一次出现的顺序。 */
|
|
347
|
-
interface ComboboxItem {
|
|
348
|
-
value: string;
|
|
349
|
-
label: string;
|
|
350
|
-
group?: string;
|
|
351
|
-
/** 行尾的补充说明(部门、类型),用等宽字体。 */
|
|
352
|
-
meta?: string;
|
|
353
|
-
/** label 之外用来搜索的文字(部门、拼音备注),不进占位提示。 */
|
|
354
|
-
keywords?: string;
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* 可搜索的单选 / 多选(样张 §2「Combobox」)。键盘:↑↓ 移动、回车选中、「空格」在多选里切换选中、
|
|
358
|
-
* Esc 关闭、输入过滤;退格在空输入时删掉最后一个已选。
|
|
359
|
-
*
|
|
360
|
-
* 空格只在查询为空时切换选中:查询里带了字时空格照常输入,否则「Wang Min」这种名字搜不了
|
|
361
|
-
* (样张只演示了空查询下的多选,这一点按能打字优先定)。
|
|
362
|
-
*/
|
|
363
|
-
declare function Combobox({ label, items, value, onChange, multiple, placeholder, emptyText, onCreate, createLabel, disabled, }: {
|
|
364
|
-
/** 输入框的无障碍名,也是空结果那句「没有匹配的<label>」里的名字。 */
|
|
365
|
-
label: string;
|
|
366
|
-
items: readonly ComboboxItem[];
|
|
367
|
-
/** 受控:已选的值,按选中的先后。 */
|
|
368
|
-
value: readonly string[];
|
|
369
|
-
onChange(next: readonly string[]): void;
|
|
370
|
-
/** 多选:回车与空格切换选中、列表不关;单选:回车选中并关闭。 */
|
|
371
|
-
multiple?: boolean;
|
|
372
|
-
placeholder?: string;
|
|
373
|
-
/** 空结果那一行的整句,缺省「没有匹配的<label>」。 */
|
|
374
|
-
emptyText?: string;
|
|
375
|
-
/**
|
|
376
|
-
* 查询非空、且没有名字正好相同的候选时,列表末尾多一行「新建」。选中它时把这句查询交回调用方
|
|
377
|
-
* (建完由调用方把新值放进 `value`)。
|
|
378
|
-
*/
|
|
379
|
-
onCreate?(name: string): void;
|
|
380
|
-
/** 「新建」那行的写法,缺省「新建「<查询>」」。 */
|
|
381
|
-
createLabel?(name: string): string;
|
|
382
|
-
disabled?: boolean;
|
|
383
|
-
}): react.JSX.Element;
|
|
384
|
-
/**
|
|
385
|
-
* 一段文字拆成标签:按逗号(半角、全角)、换行、制表符拆,去掉首尾空白与空串,**不去重**
|
|
386
|
-
* (重复要提示,不能悄悄吃掉)。纯函数,单测与 TagInput 共用。
|
|
387
|
-
*/
|
|
388
|
-
declare function splitTags(text: string): string[];
|
|
389
|
-
/**
|
|
390
|
-
* 数组值(样张 §2「Tag Input」):值受控,回车或逗号确认一个,粘贴带分隔符时整段拆开;重复的值不加入,
|
|
391
|
-
* 已有的那个闪一下红底并在下面写一句(「「x」重复了,已跳过」,1.8 秒后退回);输入框空着时退格删最后一个。
|
|
392
|
-
*
|
|
393
|
-
* 输入法:回车、退格都经 `withImeGuard`——组字中选字的回车不能当成「加一个标签」。
|
|
394
|
-
*/
|
|
395
|
-
declare function TagInput({ label, value, onChange, placeholder, hint, disabled, id, }: {
|
|
396
|
-
/** 输入框的无障碍名。 */
|
|
397
|
-
label: string;
|
|
398
|
-
/** 受控:标签,按加入的先后。 */
|
|
399
|
-
value: readonly string[];
|
|
400
|
-
onChange(next: readonly string[]): void;
|
|
401
|
-
placeholder?: string;
|
|
402
|
-
/** 常态那句说明(「粘贴「五年级, 分数」会拆成两个」);重复时换成提示,1.8 秒后退回这句。 */
|
|
403
|
-
hint?: string;
|
|
404
|
-
disabled?: boolean;
|
|
405
|
-
id?: string;
|
|
406
|
-
}): react.JSX.Element;
|
|
407
|
-
/** 筛选项:一段里的一个值。 */
|
|
408
|
-
interface FilterOption {
|
|
409
|
-
value: string;
|
|
410
|
-
label: string;
|
|
411
|
-
}
|
|
412
|
-
/** 一段筛选:`key` 是行数据里的字段名。 */
|
|
413
|
-
interface FilterGroup {
|
|
414
|
-
key: string;
|
|
415
|
-
label: string;
|
|
416
|
-
options: readonly FilterOption[];
|
|
417
|
-
}
|
|
418
|
-
/** 一行在各分组上的取值(`row[group.key]`)。 */
|
|
419
|
-
type FilterRow = Readonly<Record<string, string>>;
|
|
420
|
-
/** 已选:分组 key → 选中的值(段内是「或」)。 */
|
|
421
|
-
type FilterSelection = Readonly<Record<string, readonly string[]>>;
|
|
422
|
-
/**
|
|
423
|
-
* 计数(样张 §2「Filter Menu」的 faceted 口径):某个选项的计数 = 在**其他**分组的已选条件下还剩多少行,
|
|
424
|
-
* 也带自己这一段——和产物库的「勾了别的组,这一段的数跟着缩」同一口径。纯函数,单测与 FilterMenu 共用。
|
|
425
|
-
*/
|
|
426
|
-
declare function facetedCount(rows: readonly FilterRow[], groups: readonly FilterGroup[], selection: FilterSelection, groupKey: string, value: string): number;
|
|
427
|
-
/** 按已选筛行:每组内是「或」,组之间是「且」。纯函数。 */
|
|
428
|
-
declare function filterRows(rows: readonly FilterRow[], groups: readonly FilterGroup[], selection: FilterSelection): readonly FilterRow[];
|
|
429
|
-
/**
|
|
430
|
-
* 分组筛选(样张 §2「Filter Menu」)。分组可折叠(组标题是按钮,`aria-expanded`),计数按当前其他分组
|
|
431
|
-
* 的已选算(`facetedCount`),已选的做成 chip 可单个移除,右端「清空」。值受控。
|
|
432
|
-
*
|
|
433
|
-
* 键盘:组标题与每个勾选框都在正常的 Tab 顺序里(勾选框是原生 `<input type="checkbox">`),空格切换;
|
|
434
|
-
* 点组标题只折叠/展开,不改筛选。
|
|
435
|
-
*/
|
|
436
|
-
declare function FilterMenu({ groups, rows, value, onChange, emptyText, }: {
|
|
437
|
-
groups: readonly FilterGroup[];
|
|
438
|
-
/** 用来算计数的行(通常是未筛选的全量;传筛过的会让计数越筛越小)。 */
|
|
439
|
-
rows: readonly FilterRow[];
|
|
440
|
-
value: FilterSelection;
|
|
441
|
-
onChange(next: FilterSelection): void;
|
|
442
|
-
/** 一段里一个选项都没有时那一行,缺省「没有可筛的」。 */
|
|
443
|
-
emptyText?: string;
|
|
444
|
-
}): react.JSX.Element;
|
|
445
|
-
|
|
446
346
|
/** 重跑上一回合没做成或停下的阶段 `stage`(宿主给的 `retryStage`);没有 submit-change 的人置灰(服务端照旧逐动作判)。 */
|
|
447
347
|
declare function Retry({ ctx, stage }: {
|
|
448
348
|
ctx: ProjectCtx;
|
|
@@ -954,7 +854,7 @@ declare function useReactionPatches(ctx: Pick<ProjectCtx, "events" | "threads">,
|
|
|
954
854
|
* 消息间移动,`Home` `End` 到头尾。返回值挂在列表容器上。
|
|
955
855
|
*/
|
|
956
856
|
declare function useMessageList<T extends HTMLElement>(): {
|
|
957
|
-
ref: RefObject<T>;
|
|
857
|
+
ref: RefObject<T | null>;
|
|
958
858
|
onKeyDown: (e: KeyboardEvent<T>) => void;
|
|
959
859
|
onFocus: (e: React.FocusEvent<T>) => void;
|
|
960
860
|
};
|
|
@@ -1024,56 +924,6 @@ declare function MemoryNote({ ctx, turnId }: {
|
|
|
1024
924
|
turnId: string;
|
|
1025
925
|
}): react.JSX.Element | null;
|
|
1026
926
|
|
|
1027
|
-
/**
|
|
1028
|
-
* 页面里的 toast(backlog #5):刚做完一件事的即时回执。宿主(外壳)画唯一一层容器 `ToastHost`,
|
|
1029
|
-
* 插件与锁定插件只 import 这里的 `toast()` 入队,不自己画容器——两个插件同时弹也落进同一摞,不会各画一层。
|
|
1030
|
-
*
|
|
1031
|
-
* 模块级 store 是有意为之:`@kanyun-ai-infra/band-plugin-react` 是宿主提供的共享模块,宿主与每个插件拿到同一个
|
|
1032
|
-
* 实例;而每个插件各开一个 React root,React context 跨不过去,ctx 也没有这个能力(加它要改协议)。
|
|
1033
|
-
*
|
|
1034
|
-
* 规则照样张(docs/design/specimens/band-design-components.html §5,本卡按它实现):
|
|
1035
|
-
* - 成功 4 秒自己收;鼠标停在上面时不收,移开后 2 秒再收;
|
|
1036
|
-
* - 错误不自己走,要么点「重试」要么关掉(没给动作时容器补一个「关闭」);
|
|
1037
|
-
* - 进行中做完在同一条里变成勾(用同一个 id 再调一次 `toast`),不新弹一条;
|
|
1038
|
-
* - 同时最多三条,第四条挤掉最早的一条(进行中的先留着)。
|
|
1039
|
-
*
|
|
1040
|
-
* 模块级状态跟着页面活:测试要清干净用 `dismissAllToasts`。
|
|
1041
|
-
*/
|
|
1042
|
-
type ToastKind = "ok" | "bad" | "busy";
|
|
1043
|
-
/** toast 上的一个动作(错误一般是「重试」)。 */
|
|
1044
|
-
interface ToastAction {
|
|
1045
|
-
label: string;
|
|
1046
|
-
onClick: () => void;
|
|
1047
|
-
}
|
|
1048
|
-
interface ToastOptions {
|
|
1049
|
-
/** 缺省 `ok`。 */
|
|
1050
|
-
kind?: ToastKind;
|
|
1051
|
-
/** 一行说明。 */
|
|
1052
|
-
text: string;
|
|
1053
|
-
/** 第二行小字。 */
|
|
1054
|
-
detail?: string;
|
|
1055
|
-
/** 一个动作;错误的「重试」放这里。 */
|
|
1056
|
-
action?: ToastAction;
|
|
1057
|
-
/** 传已有的 id:改那一条(进行中做完变成勾),不新弹一条。 */
|
|
1058
|
-
id?: string;
|
|
1059
|
-
}
|
|
1060
|
-
interface ToastItem {
|
|
1061
|
-
id: string;
|
|
1062
|
-
kind: ToastKind;
|
|
1063
|
-
text: string;
|
|
1064
|
-
detail?: string;
|
|
1065
|
-
action?: ToastAction;
|
|
1066
|
-
}
|
|
1067
|
-
/** 弹一条;传 `id` 就是改那一条。返回它的 id。 */
|
|
1068
|
-
declare function toast(opts: ToastOptions): string;
|
|
1069
|
-
/** 收起一条(动作、Esc、关掉都走这里)。 */
|
|
1070
|
-
declare function dismissToast(id: string): void;
|
|
1071
|
-
/** 全部收掉(换身份、测试收尾)。 */
|
|
1072
|
-
declare function dismissAllToasts(): void;
|
|
1073
|
-
|
|
1074
|
-
/** 宿主画的一次性容器;一页只有一个(`band-shell`)。插件调 `toast()`,不自己画。 */
|
|
1075
|
-
declare function ToastHost(): react.JSX.Element;
|
|
1076
|
-
|
|
1077
927
|
/**
|
|
1078
928
|
* Rondo 状态消息与回执页脚的写法([note](../../../../.agents/notes/proposed/feature/2026-10-28-agent-presence-in-thread.md)
|
|
1079
929
|
* §3、§7):用时怎么念、回执页脚那一句怎么拼。纯函数,`band-chat`、`band-comment`、`band-turn-bar` 共用。
|
|
@@ -1308,4 +1158,4 @@ declare function useSavedNote(): [string, (text: string) => void];
|
|
|
1308
1158
|
/** 跨页提示落到本页:挂上后取一次(放在 effect 里:`aria-live` 只在内容变化时播报)。 */
|
|
1309
1159
|
declare function useCrossPageNotice(slug: string): [string, (text: string) => void];
|
|
1310
1160
|
|
|
1311
|
-
export { type AddableItem, type AttachSource,
|
|
1161
|
+
export { type AddableItem, type AttachSource, type Draft, type DraftItem, ExternalImportPanel, type ExternalImportSource, type FileCheck, type FileItem, type FileLimits, FirstDeliveryAction, type FirstTurnEnd, MODELS_FOR_PAGE, MODEL_NEEDS_PERSONAL, MODEL_NEEDS_SETTINGS, MODEL_PROVISION_REASON, MODEL_REQUIRED_REASON, Markdown, type MemoNote, MemoryNote, Message, MessageAttachments, type MessageAttachmentsProps, type MessageProps, ModelHint, Mount, NO_KEY_BUTTON, NO_KEY_TEXT, NoKeyNotice, PASTE_FOLD_CHARS, PERSONAL_MODELS_PAGE, PROJECT_MODEL_HEADING, PROJECT_MODEL_NEEDS_ME, PROJECT_MODEL_SPEND, type PendingReaction, type PluginState, type ProjectModelNeeds, PromptInput, type PromptInputProps, QUOTE_DRAW, REACTION_MEANING, REPO_URL_EXAMPLE, RESUME_PAGE, type RefCandidate, type RefItem, Retry, STAGE_EVENTS, STATUS_CHIP, STOPPED_UNDONE, STOP_COST, type SelectedEntity, SettingsBackTarget, SettingsFrame, SettingsGroup, SettingsTarget, type ShownReaction, type StallView, StatusMessage, StopTurn, TARGET_REPO_DOCS, THREAD_EVENTS, TURN_STATUS_ATTR, TargetRepoNote, type Trigger, TurnStopped, type TurnStoppedEvent, type Uploader, VersionReference, type VersionReferenceInfo, type VersionReferences, afterSend, agentIn, agentLabel, alreadyHandedText, anchorLabel, anchorQuote, canRestoreProject, checkFiles, clearFresh, composerSpendLine, createState, credentialOptionLabel, defaultOf, deletedProjectText, draftFileBytes, durationText, emptyDraft, enterSection, entriesFor, errorRepo, errorRequestAccessUrl, estimateMinutesText, failed, failureReason, fileExt, filterByQuery, firstTurnEnd, flushAllDrafts, formatBytes, gateRule, gateWho, hasContent, importConnector, importFrom, inline, isModelRequired, isProvisionFailure, isThreadTail, itemKey, leaveThen, loadVersionReferences, localDay, markFresh, markFreshMany, markNotice, markdownOf, memberName, memoNote, memoryItem, mentionCandidates, mentionQuery, mentionsIn, mergeReactions, modelHintText, parseDraft, parseMemoryItem, peekFresh, peekFreshAll, persistable, personalImportSource, personalImportSources, plainText, popoverLeft, projectModelNeedsOf, projectModelNeedsText, projectModelNote, provisionConsentText, queuePosition, queueSlot, queuedMessages, quoteFace, quoteLine, reactMount, reactedBy, reactionLabel, reactionWho, readComments, receiptFileNames, receiptFooter, refTargets, registerDraftFlusher, rejectionText, replaceRange, repoFieldHint, roleLabel, saveDraft, settingsLink, settingsNavigate, settledPending, shortTime, shortWhen, stallNoteOf, statusText, stopQueuedNote, takeDraft, takeNotice, targetRepoErrorId, threadConfirmation, threadPath, toMessageExtras, triggerAt, turnEndWord, turnStoppedOf, uploadFailureLines, uploading, useAppData, useArtifactRole, useComposition, useCrossPageNotice, useCtxData, useDraft, useElapsed, useFreshRow, useFreshRows, useHandToAgent, useLeaveGuard, useMembers, useMessageList, useNarrow, useNow, useProjectAttachments, useReactionPatches, useRoute, useSavedNote, useSelectedArtifact, useSelectedEntity, useSettledText, useSlotEntries, useStateOf, useTurnStatusOnPage, useUnsavedGuard, useVersionReferences, usualDurationText, versionLabel, versionReferenceLabel, versionReferenceText, wasStopped };
|