@astryx-vue/lab 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { MaybeRef, VNodeChild } from "vue";
2
- import { FieldStatusInput, IconSize, PopoverAlignment, PopoverPlacement, SyntaxThemeDefinition, TokenLine } from "@astryx-vue/core";
1
+ import { Component, InjectionKey, MaybeRef, VNode, VNodeChild } from "vue";
2
+ import { ChatComposerTrigger, FieldStatusInput, IconSize, MarkdownInlinePlugin, MarkdownPlugin, PlainDate, PopoverAlignment, PopoverPlacement, SyntaxThemeDefinition, TokenColor, TokenLine } from "@astryx-vue/core";
3
3
  //#region src/Chat/types.d.ts
4
4
  interface ChatEmojiOption {
5
5
  /** 表情字符,例如 "🎉"。 */
@@ -80,24 +80,24 @@ interface ChatReactionBarEmits {
80
80
  }
81
81
  //#endregion
82
82
  //#region src/Chat/ChatEmojiPicker.vue.d.ts
83
- type __VLS_Slots$7 = ChatEmojiPickerSlots;
84
- declare const __VLS_base$7: import("vue").DefineComponent<ChatEmojiPickerProps, {
83
+ type __VLS_Slots$11 = ChatEmojiPickerSlots;
84
+ declare const __VLS_base$11: import("vue").DefineComponent<ChatEmojiPickerProps, {
85
85
  element: Readonly<import("vue").ShallowRef<HTMLDivElement | null>>;
86
86
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
87
87
  select: (emoji: string) => any;
88
88
  }, string, import("vue").PublicProps, Readonly<ChatEmojiPickerProps> & Readonly<{
89
89
  onSelect?: ((emoji: string) => any) | undefined;
90
90
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
91
- declare const __VLS_export$14: __VLS_WithSlots$7<typeof __VLS_base$7, __VLS_Slots$7>;
92
- declare const _default: typeof __VLS_export$14;
93
- type __VLS_WithSlots$7<T, S> = T & {
91
+ declare const __VLS_export$21: __VLS_WithSlots$11<typeof __VLS_base$11, __VLS_Slots$11>;
92
+ declare const _default: typeof __VLS_export$21;
93
+ type __VLS_WithSlots$11<T, S> = T & {
94
94
  new (): {
95
95
  $slots: S;
96
96
  };
97
97
  };
98
98
  //#endregion
99
99
  //#region src/Chat/ChatReactionBar.vue.d.ts
100
- declare const __VLS_export$13: import("vue").DefineComponent<ChatReactionBarProps, {
100
+ declare const __VLS_export$20: import("vue").DefineComponent<ChatReactionBarProps, {
101
101
  element: Readonly<import("vue").ShallowRef<HTMLDivElement | null>>;
102
102
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
103
103
  add: (emoji: string) => any;
@@ -106,7 +106,7 @@ declare const __VLS_export$13: import("vue").DefineComponent<ChatReactionBarProp
106
106
  onAdd?: ((emoji: string) => any) | undefined;
107
107
  onToggle?: ((emoji: string) => any) | undefined;
108
108
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
109
- declare const _default$1: typeof __VLS_export$13;
109
+ declare const _default$1: typeof __VLS_export$20;
110
110
  //#endregion
111
111
  //#region src/Chat/emojis.d.ts
112
112
  /**
@@ -178,10 +178,10 @@ interface CircularProgressProps {
178
178
  //#endregion
179
179
  //#region src/CircularProgress/CircularProgress.vue.d.ts
180
180
  declare var __VLS_1$1: {};
181
- type __VLS_Slots$6 = {} & {
181
+ type __VLS_Slots$10 = {} & {
182
182
  default?: (props: typeof __VLS_1$1) => any;
183
183
  };
184
- declare const __VLS_base$6: import("vue").DefineComponent<CircularProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CircularProgressProps> & Readonly<{}>, {
184
+ declare const __VLS_base$10: import("vue").DefineComponent<CircularProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CircularProgressProps> & Readonly<{}>, {
185
185
  value: number;
186
186
  max: number;
187
187
  isLabelHidden: boolean;
@@ -192,9 +192,9 @@ declare const __VLS_base$6: import("vue").DefineComponent<CircularProgressProps,
192
192
  isIndeterminate: boolean;
193
193
  isDisabled: boolean;
194
194
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
195
- declare const __VLS_export$12: __VLS_WithSlots$6<typeof __VLS_base$6, __VLS_Slots$6>;
196
- declare const _default$2: typeof __VLS_export$12;
197
- type __VLS_WithSlots$6<T, S> = T & {
195
+ declare const __VLS_export$19: __VLS_WithSlots$10<typeof __VLS_base$10, __VLS_Slots$10>;
196
+ declare const _default$2: typeof __VLS_export$19;
197
+ type __VLS_WithSlots$10<T, S> = T & {
198
198
  new (): {
199
199
  $slots: S;
200
200
  };
@@ -222,7 +222,7 @@ interface CodeEditorEmits {
222
222
  }
223
223
  //#endregion
224
224
  //#region src/CodeEditor/CodeEditor.vue.d.ts
225
- declare const __VLS_export$11: import("vue").DefineComponent<CodeEditorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
225
+ declare const __VLS_export$18: import("vue").DefineComponent<CodeEditorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
226
226
  change: (value: string) => any;
227
227
  }, string, import("vue").PublicProps, Readonly<CodeEditorProps> & Readonly<{
228
228
  onChange?: ((value: string) => any) | undefined;
@@ -231,7 +231,658 @@ declare const __VLS_export$11: import("vue").DefineComponent<CodeEditorProps, {}
231
231
  language: string;
232
232
  escapeHint: string;
233
233
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
234
- declare const _default$3: typeof __VLS_export$11;
234
+ declare const _default$3: typeof __VLS_export$18;
235
+ //#endregion
236
+ //#region src/CommentPin/types.d.ts
237
+ /**
238
+ * Identity data for one representative shown inside a CommentPin.
239
+ */
240
+ interface CommentPinParticipant {
241
+ /** Stable identity used to remove duplicate representatives. */
242
+ id: string;
243
+ /** Display name used by Avatar for image fallback initials. */
244
+ name: string;
245
+ /** Optional image source passed to Avatar. */
246
+ avatarSrc?: string;
247
+ }
248
+ /** Pin heights on the shared element-size scale: 28, 32, or 36px. */
249
+ type CommentPinSize = 'sm' | 'md' | 'lg';
250
+ interface CommentPinProps {
251
+ /**
252
+ * Accessible action name and visual hover/focus tooltip.
253
+ * Include grouped, unread, or resolved context when it changes the action's
254
+ * meaning.
255
+ */
256
+ label: string;
257
+ /**
258
+ * Ordered participants, lead first. A single marker shows the first. A
259
+ * grouped marker shows distinct IDs as an AvatarGroup of at most three
260
+ * circles: every participant when three or fewer are distinct, otherwise the
261
+ * first two plus an ellipsis overflow circle. Pass every distinct
262
+ * participant so the overflow appears only when more than three people
263
+ * participate.
264
+ */
265
+ participants: readonly [CommentPinParticipant, ...CommentPinParticipant[]];
266
+ /**
267
+ * Pin height on the element-size scale: `sm` 28px, `md` 32px, `lg` 36px,
268
+ * with 22px, 24px, and 28px participant circles.
269
+ * @default 'sm'
270
+ */
271
+ size?: CommentPinSize;
272
+ /**
273
+ * Total number of threads represented by this marker. Values above one use
274
+ * the grouped presentation and show the exact total.
275
+ * @default 1
276
+ */
277
+ threadCount?: number;
278
+ /**
279
+ * Number of represented threads with unread activity. When above zero, an
280
+ * accent status dot appears at the end of the pin: after the thread total,
281
+ * or after the participant on a single pin. Values above `threadCount` are
282
+ * capped.
283
+ * @default 0
284
+ */
285
+ unreadCount?: number;
286
+ /** Whether this pin is the currently selected annotation target. */
287
+ isSelected?: boolean;
288
+ /**
289
+ * Whether another pin is selected in the host. Dims this pin without
290
+ * disabling it, so it remains available to switch selection.
291
+ */
292
+ isDimmed?: boolean;
293
+ /**
294
+ * Whether every thread represented by this pin is resolved. A resolved pin
295
+ * renders nothing unless it is selected, so resolved discussion leaves the
296
+ * content while a thread the reader opened keeps its anchor.
297
+ */
298
+ isResolved?: boolean;
299
+ /** Whether activation is unavailable. */
300
+ isDisabled?: boolean;
301
+ }
302
+ interface CommentPinEmits {
303
+ click: [event: MouseEvent];
304
+ }
305
+ //#endregion
306
+ //#region src/CommentPin/CommentPin.vue.d.ts
307
+ declare const __VLS_export$17: import("vue").DefineComponent<CommentPinProps, {
308
+ element: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
309
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
310
+ click: (event: MouseEvent) => any;
311
+ }, string, import("vue").PublicProps, Readonly<CommentPinProps> & Readonly<{
312
+ onClick?: ((event: MouseEvent) => any) | undefined;
313
+ }>, {
314
+ size: CommentPinSize;
315
+ isDisabled: boolean;
316
+ threadCount: number;
317
+ unreadCount: number;
318
+ isSelected: boolean;
319
+ isDimmed: boolean;
320
+ isResolved: boolean;
321
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
322
+ declare const _default$6: typeof __VLS_export$17;
323
+ //#endregion
324
+ //#region src/Comments/types.d.ts
325
+ /**
326
+ * The passage an inline comment discusses. The host owns anchoring; the
327
+ * composer quotes the selected text above the input.
328
+ */
329
+ interface CommentAnchor {
330
+ /** The selected text, quoted above the comment. */
331
+ quote: string;
332
+ /**
333
+ * `orphaned` when edits removed the passage. Standalone CommentComposer
334
+ * still quotes it; threads will show an Outdated badge later.
335
+ * @default 'anchored'
336
+ */
337
+ status?: 'anchored' | 'orphaned';
338
+ }
339
+ /**
340
+ * A color of the Astryx palette, as a host highlights inline comments'
341
+ * passages in it. Quotes draw their rule in `--astryx-color-border-<color>`.
342
+ */
343
+ type CommentHighlightColor = 'blue' | 'cyan' | 'gray' | 'green' | 'orange' | 'pink' | 'purple' | 'red' | 'teal' | 'yellow';
344
+ /** An image the host's upload flow stored. */
345
+ interface CommentUploadedImage {
346
+ /** URL of the stored image. */
347
+ url: string;
348
+ /** Description used as the image's alt text. */
349
+ alt: string;
350
+ }
351
+ /** Which composer a callback came from. */
352
+ type CommentComposerContext = {
353
+ kind: 'comment';
354
+ /** The passage a new inline comment will attach to, when there is one. */
355
+ anchor?: CommentAnchor;
356
+ } | {
357
+ kind: 'edit';
358
+ commentId: string;
359
+ } | {
360
+ kind: 'reply';
361
+ parentCommentId: string;
362
+ repliedToCommentId: string;
363
+ };
364
+ /** What a `renderComposer` replacement receives. */
365
+ interface CommentComposerRenderProps {
366
+ value: string;
367
+ onChange: (value: string) => void;
368
+ onSubmit: (value: string) => void;
369
+ placeholder: string;
370
+ isSubmitting: boolean;
371
+ error?: string;
372
+ contextLabel?: string;
373
+ context: CommentComposerContext;
374
+ onCancel?: () => void;
375
+ }
376
+ /**
377
+ * An agent a comment can address with a slash command: typing `/` in a
378
+ * composer offers it, and a posted comment shows the command as its chip.
379
+ */
380
+ interface CommentAgentCommand {
381
+ /** The command after the slash: `ask` for `/ask`. Letters, digits, `-` and `_`. */
382
+ command: string;
383
+ /** The agent's name, on its chip. */
384
+ name: string;
385
+ /** What asking it does, in the `/` menu. */
386
+ description: string;
387
+ /** Square agent logo; initials without one. */
388
+ logoUrl?: string;
389
+ }
390
+ interface CommentComposerBaseProps {
391
+ value: string;
392
+ placeholder: string;
393
+ label?: string;
394
+ isSubmitting?: boolean;
395
+ error?: string;
396
+ contextLabel?: string;
397
+ context: CommentComposerContext;
398
+ anchor?: CommentAnchor;
399
+ highlightColor?: CommentHighlightColor;
400
+ triggers?: readonly ChatComposerTrigger[];
401
+ agentCommands?: readonly CommentAgentCommand[];
402
+ hasEmojiPicker?: boolean;
403
+ /** Focuses the input whenever it changes, e.g. when Reply opens it. */
404
+ focusKey?: string;
405
+ /** Shows Retry on the error Banner. */
406
+ hasRetry?: boolean;
407
+ /** Shows Cancel beside an edit context label. */
408
+ hasCancel?: boolean;
409
+ /** Adds Remove quoted text to the quoted passage. */
410
+ hasAnchorDismiss?: boolean;
411
+ /**
412
+ * Uploads images attached, pasted, or dropped in the input, and appends the
413
+ * stored images to the draft as Markdown. Adds the attach button.
414
+ */
415
+ onUploadImages?: (files: readonly File[]) => readonly CommentUploadedImage[] | Promise<readonly CommentUploadedImage[]>;
416
+ renderComposer?: (props: CommentComposerRenderProps) => VNode;
417
+ }
418
+ interface CommentComposerBaseEmits {
419
+ change: [value: string];
420
+ submit: [value: string];
421
+ retry: [];
422
+ cancel: [];
423
+ anchorDismiss: [];
424
+ actionPendingChange: [isPending: boolean];
425
+ }
426
+ interface CommentComposerProps {
427
+ /** The draft, controlled. Bind with `value` / `@change` or `v-model`. */
428
+ value?: string;
429
+ modelValue?: string;
430
+ /** Placeholder of the input. Defaults to the localized "Write a comment…". */
431
+ placeholder?: string;
432
+ /** Accessible name of the input. Defaults to the placeholder. */
433
+ label?: string;
434
+ /** Holds Post and the attach and emoji buttons while a post is in flight. */
435
+ isSubmitting?: boolean;
436
+ /** Shows an error Banner above the composer. */
437
+ error?: string;
438
+ /** The passage a new inline comment attaches to, quoted above the input. */
439
+ anchor?: CommentAnchor;
440
+ /** The palette color the host highlights passages in. @default 'yellow' */
441
+ highlightColor?: CommentHighlightColor;
442
+ /** Typeahead triggers, such as an `@` people search. */
443
+ triggers?: readonly ChatComposerTrigger[];
444
+ /** Agents the comment can address: typing `/` lists them. */
445
+ agentCommands?: readonly CommentAgentCommand[];
446
+ /** Whether the emoji picker button shows. @default true */
447
+ hasEmojiPicker?: boolean;
448
+ /**
449
+ * Uploads images attached, pasted, or dropped in the input, and appends the
450
+ * stored images to the draft as Markdown. Adds the attach button.
451
+ */
452
+ onUploadImages?: (files: readonly File[]) => readonly CommentUploadedImage[] | Promise<readonly CommentUploadedImage[]>;
453
+ }
454
+ interface CommentComposerEmits {
455
+ 'change': [value: string];
456
+ 'update:modelValue': [value: string];
457
+ /** Posts the draft: Enter, or the Post button. Empty drafts never post. */
458
+ 'submit': [value: string];
459
+ /** Retry on the error Banner. */
460
+ 'retry': [];
461
+ /** Remove quoted text on the quoted passage. */
462
+ 'anchorDismiss': [];
463
+ }
464
+ interface CommentComposerSlots {
465
+ /** Product-owned controls after the attach and emoji buttons. Keep it to one short control. */
466
+ controls?: () => VNode[];
467
+ /** Replaces the default composer while keeping its state and context. */
468
+ composer?: (props: CommentComposerRenderProps) => VNode[];
469
+ }
470
+ interface CommentComposerBaseSlots extends CommentComposerSlots {}
471
+ /**
472
+ * `interactive` enables every permitted action; `non-editable` keeps create,
473
+ * reply and react but removes edit and delete; `read-only` removes every
474
+ * control that changes data.
475
+ */
476
+ type CommentMode = 'interactive' | 'non-editable' | 'read-only';
477
+ /**
478
+ * Where a comment is in being posted, in Chat's message-status vocabulary:
479
+ * `sending` while the post is in flight, `sent` once it has posted, and
480
+ * `error` when it couldn't be posted.
481
+ */
482
+ type CommentStatus = 'sending' | 'sent' | 'error';
483
+ /** A person or agent who writes comments, reacts, or acts on the item. */
484
+ interface CommentUser {
485
+ /** Stable host-owned id, used for equality ("is this my comment?"). */
486
+ id: string;
487
+ /** Full display name. Never a viewer-relative label such as "You". */
488
+ name: string;
489
+ /**
490
+ * An agent shows its logo (`avatarUrl`), or square-cornered initials
491
+ * without one, and an Agent badge beside its name.
492
+ * @default 'person'
493
+ */
494
+ kind?: 'person' | 'agent';
495
+ /** Where the author's name links, such as their profile. */
496
+ href?: string;
497
+ /** Profile picture, or an agent's square logo. Initials without one. */
498
+ avatarUrl?: string;
499
+ }
500
+ /** A selectable reaction. */
501
+ interface CommentReactionOption {
502
+ /** Stable key the host stores, such as `like`. */
503
+ key: string;
504
+ /** Emoji or compact glyph shown in the picker and on the reaction. */
505
+ label: string;
506
+ /**
507
+ * Human-readable name, such as "Like", for the reaction's accessible label
508
+ * and tooltip. Optional for the keys in DEFAULT_COMMENT_REACTIONS, which
509
+ * take their localized names.
510
+ */
511
+ description?: string;
512
+ }
513
+ /** A reaction summary on a comment. */
514
+ interface CommentReaction extends CommentReactionOption {
515
+ count: number;
516
+ /** Whether the viewer is one of the people who reacted. */
517
+ reactedByViewer?: boolean;
518
+ /** Who reacted, named in the reaction's tooltip. */
519
+ actors?: readonly Pick<CommentUser, 'id' | 'name'>[];
520
+ }
521
+ /** One version of a comment in its edit history. */
522
+ interface CommentVersion {
523
+ id: string;
524
+ body: string;
525
+ editedAt: string | number;
526
+ author?: CommentUser;
527
+ isCurrent?: boolean;
528
+ }
529
+ /**
530
+ * What a comment's author, typically an agent, is doing while it still writes
531
+ * the comment, and where to watch the work.
532
+ */
533
+ interface CommentProgress {
534
+ /** What the author is doing, as a reader would say it: "Reading the file…". */
535
+ label: string;
536
+ /** Where to watch the work, such as the agent's session. */
537
+ link?: {
538
+ label: string;
539
+ href: string;
540
+ };
541
+ }
542
+ /** A comment: a thread's first comment or one of its replies. */
543
+ interface CommentData {
544
+ id: string;
545
+ author: CommentUser;
546
+ /** Markdown. */
547
+ body: string;
548
+ createdAt: string | number;
549
+ updatedAt?: string | number;
550
+ /** Shows Edited beside the time; opens the edit history when there is one. */
551
+ isEdited?: boolean;
552
+ /** Host-owned unread state. Shows a New badge that fades after five seconds. */
553
+ isUnread?: boolean;
554
+ /** Earlier versions, newest first, when the host already has them. */
555
+ previousVersions?: readonly CommentVersion[];
556
+ /**
557
+ * Host-controlled metadata for people who have seen this comment. Comments
558
+ * does not render it by default; render callbacks receive it with the comment.
559
+ */
560
+ seenBy?: readonly CommentUser[];
561
+ reactions?: readonly CommentReaction[];
562
+ /** @default 'sent' */
563
+ status?: CommentStatus;
564
+ /** Shown when `status` is `error`. */
565
+ errorMessage?: string;
566
+ /**
567
+ * Marks a comment its author is still writing. The label shows in place of
568
+ * the body. The comment takes no reactions, replies, edits or deletions
569
+ * until it is written.
570
+ */
571
+ progress?: CommentProgress;
572
+ /** Per-comment permission; the host stays authoritative. @default true */
573
+ canReply?: boolean;
574
+ /** @default true */
575
+ canReact?: boolean;
576
+ /** @default the viewer wrote it */
577
+ canEdit?: boolean;
578
+ /** @default the viewer wrote it */
579
+ canDelete?: boolean;
580
+ }
581
+ /** A thread: its first comment, which carries the thread's replies. */
582
+ interface CommentThreadData extends CommentData {
583
+ /**
584
+ * Other people currently composing in this thread. Controlled, transient
585
+ * state: update it from your collaboration layer and expire stale entries
586
+ * there. While this thread is open, the current viewer is not shown.
587
+ */
588
+ typingUsers?: readonly CommentUser[];
589
+ /** One level of replies, oldest first. */
590
+ replies?: readonly CommentData[];
591
+ /** Makes this an inline comment: the passage its thread discusses. */
592
+ anchor?: CommentAnchor;
593
+ /** A resolved thread: Resolved beside the time, muted text, and Reopen. */
594
+ isResolved?: boolean;
595
+ /** Who resolved the thread, named in the Resolved label's tooltip. */
596
+ resolvedBy?: CommentUser;
597
+ /**
598
+ * Calls the thread out without selecting it, such as the comment a playing
599
+ * video has reached: it takes the selected thread's muted fill, and nothing
600
+ * expands, scrolls, or takes focus.
601
+ */
602
+ isHighlighted?: boolean;
603
+ /**
604
+ * Whether the viewer may resolve or reopen this thread when the host
605
+ * handles it. Its Resolved label shows either way.
606
+ * @default true
607
+ */
608
+ canResolve?: boolean;
609
+ }
610
+ /** A timeline row for a status change or other activity on the item. */
611
+ interface CommentActivityEvent {
612
+ id: string;
613
+ /** What happened, as a sentence: "Status changed to Ready for review". */
614
+ label: string;
615
+ description?: string;
616
+ createdAt: string | number;
617
+ actor?: CommentUser;
618
+ /** Where the event's time links. */
619
+ href?: string;
620
+ }
621
+ /** Uploads images for a composer and returns where they were stored. */
622
+ type CommentImageUploader = (files: readonly File[], context: CommentComposerContext) => readonly CommentUploadedImage[] | Promise<readonly CommentUploadedImage[]>;
623
+ type MaybePromise = void | Promise<void>;
624
+ /**
625
+ * Behavior and rendering shared by Comments and a standalone CommentThread.
626
+ * Inside a Comments panel, its threads take these from the Comments.
627
+ */
628
+ interface CommentThreadSharedProps {
629
+ currentUser?: CommentUser;
630
+ /** @default 'interactive' */
631
+ mode?: CommentMode;
632
+ /**
633
+ * The parent surface. `section` renders each thread as an outlined Card;
634
+ * `card` renders divider-bounded Sections so cards never nest.
635
+ * @default 'section'
636
+ */
637
+ container?: 'section' | 'card';
638
+ composerPlaceholder?: string;
639
+ /** @default 'yellow' */
640
+ highlightColor?: CommentHighlightColor;
641
+ /** @default DEFAULT_COMMENT_REACTIONS */
642
+ reactionOptions?: readonly CommentReactionOption[];
643
+ agentCommands?: readonly CommentAgentCommand[];
644
+ composerTriggers?: readonly ChatComposerTrigger[];
645
+ markdownPlugins?: readonly MarkdownPlugin[];
646
+ markdownInlinePlugins?: readonly MarkdownInlinePlugin[];
647
+ getReplyMention?: (author: CommentUser) => string | undefined;
648
+ /** @default true */
649
+ hasEmojiPicker?: boolean;
650
+ isSubmitting?: boolean;
651
+ onComposerDraftChange?: (value: string, context: CommentComposerContext) => void;
652
+ onSubmit?: (content: string, parentCommentId?: string) => MaybePromise;
653
+ onSaveEdit?: (commentId: string, content: string) => MaybePromise;
654
+ onDelete?: (commentId: string) => MaybePromise;
655
+ onReact?: (commentId: string, reactionKey: string, option?: CommentReactionOption) => MaybePromise;
656
+ onRetryComment?: (commentId: string) => MaybePromise;
657
+ onResolveThread?: (commentId: string) => MaybePromise;
658
+ onReopenThread?: (commentId: string) => MaybePromise;
659
+ loadVersions?: (commentId: string) => Promise<readonly CommentVersion[]>;
660
+ onUploadImages?: CommentImageUploader;
661
+ renderAnchor?: (comment: CommentThreadData, defaultAnchor: VNode) => VNode;
662
+ renderBody?: (comment: CommentData) => VNode;
663
+ renderVersionBody?: (version: CommentVersion) => VNode;
664
+ renderAdditionalActions?: (comment: CommentData) => VNode;
665
+ renderComposer?: (props: CommentComposerRenderProps) => VNode;
666
+ }
667
+ interface CommentThreadBindProps extends CommentThreadSharedProps {
668
+ /** The thread: its first comment, which carries its replies. */
669
+ comment: CommentThreadData;
670
+ /**
671
+ * Whether the thread is open. Omit it to let the thread own selection.
672
+ * Host selection does not move focus or open the reply composer.
673
+ */
674
+ isSelected?: boolean;
675
+ }
676
+ interface CommentThreadProps extends CommentThreadBindProps {
677
+ /** Called when the viewer opens or closes the thread. Prefer `@selected-change`. */
678
+ onSelectedChange?: (isSelected: boolean) => void;
679
+ /**
680
+ * Hands the thread its anchored host's light dismissal. Prefer `@dismiss`.
681
+ * Pair it with `hasLightDismiss={false}` and `hasEscapeDismiss={false}` on
682
+ * the host Popover.
683
+ */
684
+ onDismiss?: () => void;
685
+ }
686
+ interface CommentThreadEmits {
687
+ selectedChange: [isSelected: boolean];
688
+ dismiss: [];
689
+ }
690
+ interface CommentThreadSlots {
691
+ anchor?: (props: {
692
+ comment: CommentThreadData;
693
+ defaultAnchor: VNode;
694
+ }) => VNode[];
695
+ body?: (props: {
696
+ comment: CommentData;
697
+ }) => VNode[];
698
+ versionBody?: (props: {
699
+ version: CommentVersion;
700
+ }) => VNode[];
701
+ additionalActions?: (props: {
702
+ comment: CommentData;
703
+ }) => VNode[];
704
+ composer?: (props: CommentComposerRenderProps) => VNode[];
705
+ }
706
+ /**
707
+ * The reactions a thread offers when the host passes none: Like, Love, Haha,
708
+ * Wow, Sad, and Celebrate, named in the viewer's language.
709
+ */
710
+ export declare const DEFAULT_COMMENT_REACTIONS: readonly CommentReactionOption[];
711
+ type CommentsComposerPosition = 'top' | 'bottom' | 'none';
712
+ type CommentsDensity = 'compact' | 'balanced';
713
+ type CommentsLayout = 'pane' | 'embedded';
714
+ /** The comments on one item: threads, activity events, and a new-comment composer. */
715
+ interface CommentsProps extends CommentThreadSharedProps {
716
+ comments: readonly CommentThreadData[];
717
+ events?: readonly CommentActivityEvent[];
718
+ label?: string;
719
+ /** @default 'bottom' */
720
+ composerPosition?: CommentsComposerPosition;
721
+ /** @default 'balanced' */
722
+ density?: CommentsDensity;
723
+ /** @default 'pane' */
724
+ layout?: CommentsLayout;
725
+ selectedThreadId?: string | null;
726
+ composerAnchor?: CommentAnchor;
727
+ onComposerAnchorDismiss?: () => void;
728
+ composerControls?: VNode;
729
+ isLoading?: boolean;
730
+ /** Description on the load-failure Banner. The title is the localized "Comments couldn't load". */
731
+ loadError?: string;
732
+ onRetryLoad?: () => MaybePromise;
733
+ hasOlderComments?: boolean;
734
+ isLoadingOlder?: boolean;
735
+ onLoadOlder?: () => MaybePromise;
736
+ composerError?: string;
737
+ emptyState?: VNode;
738
+ renderEvent?: (event: CommentActivityEvent) => VNode;
739
+ }
740
+ interface CommentsEmits {
741
+ selectedThreadChange: [threadId: string | null];
742
+ }
743
+ interface CommentsSlots {
744
+ emptyState?: () => VNode[];
745
+ event?: (props: {
746
+ event: CommentActivityEvent;
747
+ }) => VNode[];
748
+ composer?: (props: CommentComposerRenderProps) => VNode[];
749
+ composerControls?: () => VNode[];
750
+ }
751
+ //#endregion
752
+ //#region src/Comments/CommentComposer.vue.d.ts
753
+ type __VLS_Slots$9 = CommentComposerSlots;
754
+ declare const __VLS_base$9: import("vue").DefineComponent<CommentComposerProps, {
755
+ element: import("vue").ComputedRef<{
756
+ value?: HTMLElement | null;
757
+ } | {
758
+ element?: {
759
+ value?: HTMLElement | null;
760
+ };
761
+ } | null>;
762
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
763
+ "update:modelValue": (value: string) => any;
764
+ change: (value: string) => any;
765
+ submit: (value: string) => any;
766
+ retry: () => any;
767
+ anchorDismiss: () => any;
768
+ }, string, import("vue").PublicProps, Readonly<CommentComposerProps> & Readonly<{
769
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
770
+ onChange?: ((value: string) => any) | undefined;
771
+ onSubmit?: ((value: string) => any) | undefined;
772
+ onRetry?: (() => any) | undefined;
773
+ onAnchorDismiss?: (() => any) | undefined;
774
+ }>, {
775
+ highlightColor: CommentHighlightColor;
776
+ hasEmojiPicker: boolean;
777
+ isSubmitting: boolean;
778
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
779
+ declare const __VLS_export$16: __VLS_WithSlots$9<typeof __VLS_base$9, __VLS_Slots$9>;
780
+ declare const _default$4: typeof __VLS_export$16;
781
+ type __VLS_WithSlots$9<T, S> = T & {
782
+ new (): {
783
+ $slots: S;
784
+ };
785
+ };
786
+ //#endregion
787
+ //#region src/Comments/CommentComposerBase.vue.d.ts
788
+ type __VLS_Slots$8 = CommentComposerBaseSlots;
789
+ declare const __VLS_base$8: import("vue").DefineComponent<CommentComposerBaseProps, {
790
+ element: Readonly<import("vue").ShallowRef<HTMLElement | null>>;
791
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
792
+ change: (value: string) => any;
793
+ submit: (value: string) => any;
794
+ retry: () => any;
795
+ anchorDismiss: () => any;
796
+ cancel: () => any;
797
+ actionPendingChange: (isPending: boolean) => any;
798
+ }, string, import("vue").PublicProps, Readonly<CommentComposerBaseProps> & Readonly<{
799
+ onChange?: ((value: string) => any) | undefined;
800
+ onSubmit?: ((value: string) => any) | undefined;
801
+ onRetry?: (() => any) | undefined;
802
+ onAnchorDismiss?: (() => any) | undefined;
803
+ onCancel?: (() => any) | undefined;
804
+ onActionPendingChange?: ((isPending: boolean) => any) | undefined;
805
+ }>, {
806
+ highlightColor: CommentHighlightColor;
807
+ hasEmojiPicker: boolean;
808
+ isSubmitting: boolean;
809
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
810
+ declare const __VLS_export$15: __VLS_WithSlots$8<typeof __VLS_base$8, __VLS_Slots$8>;
811
+ declare const _default$5: typeof __VLS_export$15;
812
+ type __VLS_WithSlots$8<T, S> = T & {
813
+ new (): {
814
+ $slots: S;
815
+ };
816
+ };
817
+ //#endregion
818
+ //#region src/Comments/Comments.vue.d.ts
819
+ type __VLS_Slots$7 = CommentsSlots;
820
+ declare const __VLS_base$7: import("vue").DefineComponent<CommentsProps, {
821
+ element: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
822
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
823
+ selectedThreadChange: (threadId: string | null) => any;
824
+ }, string, import("vue").PublicProps, Readonly<CommentsProps> & Readonly<{
825
+ onSelectedThreadChange?: ((threadId: string | null) => any) | undefined;
826
+ }>, {
827
+ isLoading: boolean;
828
+ mode: CommentMode;
829
+ composerPosition: CommentsComposerPosition;
830
+ density: CommentsDensity;
831
+ layout: CommentsLayout;
832
+ hasOlderComments: boolean;
833
+ isLoadingOlder: boolean;
834
+ container: "section" | "card";
835
+ highlightColor: CommentHighlightColor;
836
+ hasEmojiPicker: boolean;
837
+ isSubmitting: boolean;
838
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
839
+ declare const __VLS_export$14: __VLS_WithSlots$7<typeof __VLS_base$7, __VLS_Slots$7>;
840
+ declare const _default$8: typeof __VLS_export$14;
841
+ type __VLS_WithSlots$7<T, S> = T & {
842
+ new (): {
843
+ $slots: S;
844
+ };
845
+ };
846
+ //#endregion
847
+ //#region src/Comments/CommentThread.vue.d.ts
848
+ type __VLS_Slots$6 = CommentThreadSlots;
849
+ declare const __VLS_base$6: import("vue").DefineComponent<CommentThreadBindProps, {
850
+ element: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
851
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
852
+ dismiss: () => any;
853
+ selectedChange: (isSelected: boolean) => any;
854
+ }, string, import("vue").PublicProps, Readonly<CommentThreadBindProps> & Readonly<{
855
+ onDismiss?: (() => any) | undefined;
856
+ onSelectedChange?: ((isSelected: boolean) => any) | undefined;
857
+ }>, {
858
+ isSelected: boolean;
859
+ mode: CommentMode;
860
+ container: "section" | "card";
861
+ highlightColor: CommentHighlightColor;
862
+ hasEmojiPicker: boolean;
863
+ isSubmitting: boolean;
864
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
865
+ declare const __VLS_export$13: __VLS_WithSlots$6<typeof __VLS_base$6, __VLS_Slots$6>;
866
+ declare const _default$7: typeof __VLS_export$13;
867
+ type __VLS_WithSlots$6<T, S> = T & {
868
+ new (): {
869
+ $slots: S;
870
+ };
871
+ };
872
+ //#endregion
873
+ //#region src/Comments/icons.d.ts
874
+ /** Stable icon-registry keys for the Comments family's glyphs. */
875
+ export declare const COMMENT_ICON_KEYS: {
876
+ readonly addReaction: "comment:addReaction";
877
+ readonly reply: "comment:reply";
878
+ readonly copyLink: "comment:copyLink";
879
+ readonly resolve: "comment:resolve";
880
+ readonly edit: "comment:edit";
881
+ readonly delete: "comment:delete";
882
+ readonly attach: "comment:attach";
883
+ readonly emoji: "comment:emoji";
884
+ readonly event: "comment:event";
885
+ };
235
886
  //#endregion
236
887
  //#region src/DiffViewer/diffTypes.d.ts
237
888
  /**
@@ -461,8 +1112,8 @@ declare const __VLS_base$5: import("vue").DefineComponent<DiffViewerProps, {}, {
461
1112
  syntaxTheme: import("@astryx-vue/core").SyntaxThemeDefinition;
462
1113
  renderLineAnnotation: (ref: DiffViewerLineRef) => import("vue").VNodeChild;
463
1114
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
464
- declare const __VLS_export$10: __VLS_WithSlots$5<typeof __VLS_base$5, __VLS_Slots$5>;
465
- declare const _default$4: typeof __VLS_export$10;
1115
+ declare const __VLS_export$12: __VLS_WithSlots$5<typeof __VLS_base$5, __VLS_Slots$5>;
1116
+ declare const _default$9: typeof __VLS_export$12;
466
1117
  type __VLS_WithSlots$5<T, S> = T & {
467
1118
  new (): {
468
1119
  $slots: S;
@@ -513,6 +1164,74 @@ interface InlineDiffResult {
513
1164
  */
514
1165
  export declare function parseUnifiedDiff(patch: string): DiffViewerFile[];
515
1166
  //#endregion
1167
+ //#region src/EmojiPicker/types.d.ts
1168
+ interface EmojiOption {
1169
+ /** 表情字符,例如 "🎉"。 */
1170
+ emoji: string;
1171
+ /** 名称,用于搜索和按钮的无障碍名,例如 "Party popper"。 */
1172
+ name: string;
1173
+ /** 搜索时一并匹配的其他词,例如 ["celebration", "tada"]。 */
1174
+ keywords?: readonly string[];
1175
+ }
1176
+ interface EmojiCategory {
1177
+ /** 分组标题,例如 "Smileys & emotion"。 */
1178
+ name: string;
1179
+ emojis: readonly EmojiOption[];
1180
+ }
1181
+ interface EmojiPickerProps {
1182
+ /**
1183
+ * 列在最前面、出现在「常用」下面的表情。传入空数组则不显示这一行。
1184
+ * @default DEFAULT_FREQUENT_EMOJIS
1185
+ */
1186
+ frequentEmojis?: readonly EmojiOption[];
1187
+ /**
1188
+ * 按组分好的表情。不传时,第一次挂载会加载内置集:Emoji 15 以内的全部表情,
1189
+ * 带英文 CLDR 名称。要本地化或自定义时传入自己的分组。
1190
+ */
1191
+ categories?: readonly EmojiCategory[];
1192
+ /**
1193
+ * 可滚动表情列表的高度。
1194
+ * @default 'calc(var(--astryx-spacing-8, 32px) * 10)'
1195
+ */
1196
+ height?: number | string;
1197
+ /**
1198
+ * 挂载时聚焦搜索框,适合内嵌或放在对话框里。
1199
+ * 放在弹出层里时,应改用弹出层自己的自动聚焦。
1200
+ * @default false
1201
+ */
1202
+ hasAutoFocus?: boolean;
1203
+ /**
1204
+ * 表情列表的无障碍名称。
1205
+ * 不传时用 `@astryx.emojiPicker.label`。
1206
+ */
1207
+ label?: string;
1208
+ /**
1209
+ * 搜索框的占位符和隐藏标签。
1210
+ * 不传时用 `@astryx.emojiPicker.searchLabel`。
1211
+ */
1212
+ searchLabel?: string;
1213
+ }
1214
+ interface EmojiPickerEmits {
1215
+ /** 选中的表情字符和对应的选项。 */
1216
+ select: [emoji: string, option: EmojiOption];
1217
+ }
1218
+ //#endregion
1219
+ //#region src/EmojiPicker/constants.d.ts
1220
+ /** 没有传入常用表情时,列在最前面的默认一组。 */
1221
+ export declare const DEFAULT_FREQUENT_EMOJIS: readonly EmojiOption[];
1222
+ //#endregion
1223
+ //#region src/EmojiPicker/EmojiPicker.vue.d.ts
1224
+ declare const __VLS_export$11: import("vue").DefineComponent<EmojiPickerProps, {
1225
+ element: Readonly<import("vue").ShallowRef<HTMLElement | null>>;
1226
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
1227
+ select: (emoji: string, option: EmojiOption) => any;
1228
+ }, string, import("vue").PublicProps, Readonly<EmojiPickerProps> & Readonly<{
1229
+ onSelect?: ((emoji: string, option: EmojiOption) => any) | undefined;
1230
+ }>, {
1231
+ hasAutoFocus: boolean;
1232
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
1233
+ declare const _default$10: typeof __VLS_export$11;
1234
+ //#endregion
516
1235
  //#region src/InfoTip/types.d.ts
517
1236
  /**
518
1237
  * Size of the info icon. Maps 1:1 to core `Icon` sizes
@@ -546,8 +1265,8 @@ declare const __VLS_base$4: import("vue").DefineComponent<InfoTipProps, {}, {},
546
1265
  size: import("@astryx-vue/core").IconSize;
547
1266
  content: string;
548
1267
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
549
- declare const __VLS_export$9: __VLS_WithSlots$4<typeof __VLS_base$4, __VLS_Slots$4>;
550
- declare const _default$5: typeof __VLS_export$9;
1268
+ declare const __VLS_export$10: __VLS_WithSlots$4<typeof __VLS_base$4, __VLS_Slots$4>;
1269
+ declare const _default$11: typeof __VLS_export$10;
551
1270
  type __VLS_WithSlots$4<T, S> = T & {
552
1271
  new (): {
553
1272
  $slots: S;
@@ -663,7 +1382,7 @@ interface ListInputEmits<T> {
663
1382
  }
664
1383
  //#endregion
665
1384
  //#region src/ListInput/ListInput.vue.d.ts
666
- declare const __VLS_export$8: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1385
+ declare const __VLS_export$9: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$3<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
667
1386
  props: import("vue").PublicProps & __VLS_PrettifyLocal$3<ListInputProps<T> & {
668
1387
  "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
669
1388
  onChange?: ((value: T[], change: ListInputChange<T>) => any) | undefined;
@@ -677,7 +1396,7 @@ declare const __VLS_export$8: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_
677
1396
  }>) => import("vue").VNode & {
678
1397
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
679
1398
  };
680
- declare const _default$6: typeof __VLS_export$8;
1399
+ declare const _default$12: typeof __VLS_export$9;
681
1400
  type __VLS_PrettifyLocal$3<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
682
1401
  //#endregion
683
1402
  //#region src/LogStream/types.d.ts
@@ -762,8 +1481,8 @@ declare const __VLS_base$3: import("vue").DefineComponent<__VLS_PublicProps, {},
762
1481
  maxHeight: string | number;
763
1482
  hasTimestamps: boolean;
764
1483
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
765
- declare const __VLS_export$7: __VLS_WithSlots$3<typeof __VLS_base$3, __VLS_Slots$3>;
766
- declare const _default$7: typeof __VLS_export$7;
1484
+ declare const __VLS_export$8: __VLS_WithSlots$3<typeof __VLS_base$3, __VLS_Slots$3>;
1485
+ declare const _default$13: typeof __VLS_export$8;
767
1486
  type __VLS_WithSlots$3<T, S> = T & {
768
1487
  new (): {
769
1488
  $slots: S;
@@ -837,7 +1556,7 @@ interface MobileTokenizerEmits<T extends SearchableItem = SearchableItem> {
837
1556
  }
838
1557
  //#endregion
839
1558
  //#region src/MobileTokenizer/MobileTokenizer.vue.d.ts
840
- declare const __VLS_export$6: <T extends SearchableItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
1559
+ declare const __VLS_export$7: <T extends SearchableItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal$2<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
841
1560
  props: import("vue").PublicProps & __VLS_PrettifyLocal$2<MobileTokenizerProps<T> & {
842
1561
  "onUpdate:modelValue"?: ((value: T[]) => any) | undefined;
843
1562
  onChange?: ((value: T[], change: MobileTokenizerChange<T>) => any) | undefined;
@@ -854,9 +1573,195 @@ declare const __VLS_export$6: <T extends SearchableItem>(__VLS_props: NonNullabl
854
1573
  }>) => import("vue").VNode & {
855
1574
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
856
1575
  };
857
- declare const _default$8: typeof __VLS_export$6;
1576
+ declare const _default$14: typeof __VLS_export$7;
858
1577
  type __VLS_PrettifyLocal$2<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
859
1578
  //#endregion
1579
+ //#region src/Schedule/zonedDateTime.d.ts
1580
+ interface ZonedDateTime {
1581
+ instant: Instant;
1582
+ timezoneID: string;
1583
+ toPlainDate: () => PlainDate;
1584
+ addDays: (days: number) => ZonedDateTime;
1585
+ startOfDay: () => ZonedDateTime;
1586
+ }
1587
+ type ZonedDateTimeRange = [ZonedDateTime, ZonedDateTime];
1588
+ //#endregion
1589
+ //#region src/Schedule/types.d.ts
1590
+ /** Unix 纪元毫秒。 */
1591
+ type Instant = number;
1592
+ type ScheduleEventSource = ReadonlyArray<CalendarEvent> | ((start: Instant, end: Instant) => Promise<ReadonlyArray<CalendarEvent>>);
1593
+ type ScheduleDate = Instant;
1594
+ interface ScheduleRange {
1595
+ startDate: PlainDate;
1596
+ endDate: PlainDate;
1597
+ start: Instant;
1598
+ end: Instant;
1599
+ }
1600
+ type ScheduleViewOptions = object;
1601
+ /**
1602
+ * 周视图和日视图画的是同一张时间格,所以小时窗口和事件浮层是同一组选项。
1603
+ * `renderPopover` 在每个画出来的事件上调用。返回内容时该事件是按钮,打开这一视图唯一的浮层;
1604
+ * 返回 `null` 时该事件只读。不传时整张格子只读。
1605
+ */
1606
+ interface ScheduleTimeGridViewOptions {
1607
+ /** 画出的第一个小时,0–23。默认 0。 */
1608
+ minHour?: number;
1609
+ /** 格子结束的小时,1–24,并且大于 `minHour`。默认 24。 */
1610
+ maxHour?: number;
1611
+ /** 一小时的像素高度。默认 100。 */
1612
+ hourHeight?: number;
1613
+ renderPopover?: (event: CalendarEvent) => VNodeChild;
1614
+ }
1615
+ interface ScheduleNavigationRange {
1616
+ label: string;
1617
+ range: ZonedDateTimeRange;
1618
+ }
1619
+ interface ScheduleViewBase {
1620
+ getDateRange: (date: ZonedDateTime) => ZonedDateTimeRange;
1621
+ getPreviousDateRange: (date: ZonedDateTime) => ScheduleNavigationRange;
1622
+ getNextDateRange: (date: ZonedDateTime) => ScheduleNavigationRange;
1623
+ }
1624
+ interface ScheduleView<Options extends ScheduleViewOptions = ScheduleViewOptions> extends ScheduleViewBase {
1625
+ component: Component;
1626
+ options: Options;
1627
+ }
1628
+ interface ScheduleHeaderContent {
1629
+ startContent: VNodeChild;
1630
+ centerContent: VNodeChild;
1631
+ endContent: VNodeChild;
1632
+ }
1633
+ type SchedulePluginPosition = 'start' | 'end';
1634
+ interface SchedulePlugin {
1635
+ renderHeader?: (startContent: VNodeChild, centerContent: VNodeChild, endContent: VNodeChild) => ScheduleHeaderContent;
1636
+ }
1637
+ type ScheduleHeadingLevel = 2 | 3 | 4 | 5 | 6;
1638
+ interface ScheduleProps {
1639
+ /** `createSchedule*View()` 返回的视图。请保持同一引用。 */
1640
+ view: ScheduleView;
1641
+ /** 静态事件,或用当前区间起止毫秒去拉事件的函数。 */
1642
+ events: ScheduleEventSource;
1643
+ /** 用 `label === event.category` 决定颜色和读屏里的分类名。 */
1644
+ categories?: ReadonlyArray<ScheduleCategory>;
1645
+ /** 落在要显示的那一页里的任意毫秒。完全受控。 */
1646
+ date: Instant;
1647
+ /** 当作「今天」高亮的毫秒。不传则取挂载时的时刻,之后不再自己往前走。 */
1648
+ focusDate?: Instant;
1649
+ /** 分页或 Today 时调用,参数是下一页要显示的毫秒。 */
1650
+ onChangeDate?: (date: Instant) => void;
1651
+ /** IANA 时区,例如 `America/Los_Angeles`。默认浏览器时区。 */
1652
+ timezoneID?: string;
1653
+ /** 头部插件。传入数组会换掉默认的分页按钮。 */
1654
+ plugins?: ReadonlyArray<SchedulePlugin>;
1655
+ /** 视图内部小标题的级别。页眉上的区间标题固定是 2 级。默认 3。 */
1656
+ headingLevel?: ScheduleHeadingLevel;
1657
+ }
1658
+ interface ScheduleEmits {
1659
+ /** 和 `onChangeDate` 同一个时刻。模板里写 `@change-date`。 */
1660
+ changeDate: [date: Instant];
1661
+ }
1662
+ //#endregion
1663
+ //#region src/Schedule/CalendarEvent.d.ts
1664
+ type ScheduleEventColor = Exclude<TokenColor, 'default'>;
1665
+ interface ScheduleCategory {
1666
+ label: string;
1667
+ color: ScheduleEventColor;
1668
+ }
1669
+ interface CalendarEventBase {
1670
+ id: string;
1671
+ title: string;
1672
+ category?: string;
1673
+ }
1674
+ interface CalendarDayEvent extends CalendarEventBase {
1675
+ start: PlainDate;
1676
+ end: PlainDate;
1677
+ }
1678
+ interface CalendarInstantEvent extends CalendarEventBase {
1679
+ start: Instant;
1680
+ end: Instant;
1681
+ }
1682
+ type CalendarEvent = CalendarDayEvent | CalendarInstantEvent;
1683
+ export declare function createEventFromISO({ id, title, category, start, end }: {
1684
+ id: string;
1685
+ title: string;
1686
+ category?: CalendarEvent['category'];
1687
+ start: string;
1688
+ end: string;
1689
+ }): CalendarEvent;
1690
+ //#endregion
1691
+ //#region src/Schedule/context.d.ts
1692
+ interface ScheduleContextValue {
1693
+ events: ReadonlyArray<CalendarEvent>;
1694
+ categories: ReadonlyArray<ScheduleCategory>;
1695
+ date: ZonedDateTime;
1696
+ focusDate: ZonedDateTime;
1697
+ timezoneID: string;
1698
+ locale: string;
1699
+ range: ScheduleRange;
1700
+ isLoading: boolean;
1701
+ onPreviousDate: () => void;
1702
+ previousDateLabel: string;
1703
+ onToday: () => void;
1704
+ onNextDate: () => void;
1705
+ nextDateLabel: string;
1706
+ view: ScheduleViewBase;
1707
+ plugins: ReadonlyArray<SchedulePlugin>;
1708
+ headingLevel: ScheduleHeadingLevel;
1709
+ }
1710
+ export declare const ScheduleContext: InjectionKey<ScheduleContextValue>;
1711
+ export declare function useScheduleContext(): ScheduleContextValue;
1712
+ //#endregion
1713
+ //#region src/Schedule/dayView.d.ts
1714
+ type ScheduleDayViewOptions = ScheduleTimeGridViewOptions;
1715
+ export declare function createScheduleDayView({ minHour, maxHour, hourHeight, renderPopover }?: ScheduleDayViewOptions): ScheduleView<ScheduleDayViewOptions>;
1716
+ //#endregion
1717
+ //#region src/Schedule/listView.d.ts
1718
+ interface ScheduleListViewOptions extends ScheduleViewOptions {
1719
+ days?: number;
1720
+ }
1721
+ export declare function createScheduleListView({ days: listDays }?: ScheduleListViewOptions): ScheduleView<ScheduleListViewOptions>;
1722
+ //#endregion
1723
+ //#region src/Schedule/monthlyView.d.ts
1724
+ interface ScheduleMonthlyViewOptions {
1725
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
1726
+ renderPopover?: ScheduleTimeGridViewOptions['renderPopover'];
1727
+ }
1728
+ export declare function createScheduleMonthlyView({ weekStartsOn, renderPopover }?: ScheduleMonthlyViewOptions): ScheduleView<ScheduleMonthlyViewOptions>;
1729
+ //#endregion
1730
+ //#region src/Schedule/plugins.d.ts
1731
+ interface SchedulePaginationPluginOptions {
1732
+ position?: SchedulePluginPosition;
1733
+ }
1734
+ interface ScheduleViewSelectorOption<View extends ScheduleViewBase = ScheduleView> {
1735
+ view: View;
1736
+ label: string;
1737
+ }
1738
+ interface ScheduleViewSelectorPluginOptions<View extends ScheduleViewBase = ScheduleView> {
1739
+ onChangeView?: (view: View) => void;
1740
+ position?: SchedulePluginPosition;
1741
+ }
1742
+ export declare const defaultSchedulePlugins: ReadonlyArray<SchedulePlugin>;
1743
+ export declare function useSchedulePaginationPlugin({ position }?: SchedulePaginationPluginOptions): SchedulePlugin;
1744
+ export declare function useScheduleViewSelectorPlugin<View extends ScheduleViewBase>(options: ReadonlyArray<ScheduleViewSelectorOption<View>>, pluginOptions?: ScheduleViewSelectorPluginOptions<View>): SchedulePlugin;
1745
+ //#endregion
1746
+ //#region src/Schedule/Schedule.vue.d.ts
1747
+ declare const __VLS_export$6: import("vue").DefineComponent<ScheduleProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
1748
+ changeDate: (date: number) => any;
1749
+ }, string, import("vue").PublicProps, Readonly<ScheduleProps> & Readonly<{
1750
+ onChangeDate?: ((date: number) => any) | undefined;
1751
+ }>, {
1752
+ categories: readonly ScheduleCategory[];
1753
+ plugins: readonly SchedulePlugin[];
1754
+ headingLevel: ScheduleHeadingLevel;
1755
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
1756
+ declare const _default$16: typeof __VLS_export$6;
1757
+ //#endregion
1758
+ //#region src/Schedule/weeklyView.d.ts
1759
+ interface ScheduleWeeklyViewOptions extends ScheduleTimeGridViewOptions {
1760
+ /** 一周从哪天开始,0 是周日。默认 0。 */
1761
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
1762
+ }
1763
+ export declare function createScheduleWeeklyView({ weekStartsOn, minHour, maxHour, hourHeight, renderPopover }?: ScheduleWeeklyViewOptions): ScheduleView<ScheduleWeeklyViewOptions>;
1764
+ //#endregion
860
1765
  //#region src/Stat/types.d.ts
861
1766
  /** Trend direction of a delta; picks the glyph (up/down arrow, flat dash). */
862
1767
  type StatDeltaDirection = 'up' | 'down' | 'flat';
@@ -906,7 +1811,7 @@ declare const __VLS_base$2: import("vue").DefineComponent<StatProps, {}, {}, {},
906
1811
  description: string;
907
1812
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
908
1813
  declare const __VLS_export$5: __VLS_WithSlots$2<typeof __VLS_base$2, __VLS_Slots$2>;
909
- declare const _default$10: typeof __VLS_export$5;
1814
+ declare const _default$17: typeof __VLS_export$5;
910
1815
  type __VLS_WithSlots$2<T, S> = T & {
911
1816
  new (): {
912
1817
  $slots: S;
@@ -1054,7 +1959,7 @@ declare const __VLS_export$4: import("vue").DefineComponent<SVGIconProps, {}, {}
1054
1959
  variation: SVGIconVariation;
1055
1960
  color: SVGIconColor;
1056
1961
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
1057
- declare const _default$9: typeof __VLS_export$4;
1962
+ declare const _default$15: typeof __VLS_export$4;
1058
1963
  //#endregion
1059
1964
  //#region src/SVGIcon/types-xif.d.ts
1060
1965
  /**
@@ -1238,7 +2143,7 @@ declare const __VLS_base$1: import("vue").DefineComponent<TourProps, {}, {}, {},
1238
2143
  isStepCountShown: boolean;
1239
2144
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
1240
2145
  declare const __VLS_export$3: __VLS_WithSlots$1<typeof __VLS_base$1, __VLS_Slots$1>;
1241
- declare const _default$11: typeof __VLS_export$3;
2146
+ declare const _default$18: typeof __VLS_export$3;
1242
2147
  type __VLS_WithSlots$1<T, S> = T & {
1243
2148
  new (): {
1244
2149
  $slots: S;
@@ -1249,7 +2154,7 @@ type __VLS_WithSlots$1<T, S> = T & {
1249
2154
  type __VLS_Slots = TourStepSlots;
1250
2155
  declare const __VLS_base: any;
1251
2156
  declare const __VLS_export$2: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
1252
- declare const _default$12: typeof __VLS_export$2;
2157
+ declare const _default$19: typeof __VLS_export$2;
1253
2158
  type __VLS_WithSlots<T, S> = T & {
1254
2159
  new (): {
1255
2160
  $slots: S;
@@ -1351,7 +2256,7 @@ declare const __VLS_export$1: <T extends string>(__VLS_props: NonNullable<Awaite
1351
2256
  }>) => import("vue").VNode & {
1352
2257
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1353
2258
  };
1354
- declare const _default$13: typeof __VLS_export$1;
2259
+ declare const _default$20: typeof __VLS_export$1;
1355
2260
  type __VLS_PrettifyLocal$1<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
1356
2261
  //#endregion
1357
2262
  //#region src/TransferList/TransferListSelector.vue.d.ts
@@ -1407,7 +2312,7 @@ declare const __VLS_export: <T extends string>(__VLS_props: NonNullable<Awaited<
1407
2312
  }>) => import("vue").VNode & {
1408
2313
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
1409
2314
  };
1410
- declare const _default$14: typeof __VLS_export;
2315
+ declare const _default$21: typeof __VLS_export;
1411
2316
  type __VLS_PrettifyLocal<T> = (T extends any ? { [K in keyof T]: T[K]; } : { [K in keyof T as K]: T[K]; }) & {};
1412
2317
  //#endregion
1413
- export { type ChatEmojiOption, _default as ChatEmojiPicker, type ChatEmojiPickerEmits, type ChatEmojiPickerProps, type ChatEmojiPickerSlots, type ChatReaction, _default$1 as ChatReactionBar, type ChatReactionBarEmits, type ChatReactionBarProps, _default$2 as CircularProgress, type CircularProgressProps, type CircularProgressSize, type CircularProgressVariant, type CircularProgressVariantMap, _default$3 as CodeEditor, type CodeEditorEmits, type CodeEditorProps, type CreateDiffFileOptions, _default$4 as DiffViewer, type DiffViewerChangeIndicator, type DiffViewerEmits, type DiffViewerFile, type DiffViewerFileStatus, type DiffViewerHunk, type DiffViewerInlineHighlight, type DiffViewerLine, type DiffViewerLineKind, type DiffViewerLineRef, type DiffViewerProps, type DiffViewerSide, type DiffViewerSlots, type DiffViewerViewMode, type IconShape, type IconShapeRole, _default$5 as InfoTip, type InfoTipProps, type InfoTipSize, type InlineDiffGranularity, type InlineDiffResult, type InlineRange, _default$6 as ListInput, type ListInputChange, type ListInputColumn, type ListInputColumnWidth, type ListInputEmits, type ListInputProps, type ListInputRenderContext, type ListInputValueContext, type LogEntry, _default$7 as LogStream, type LogStreamEmits, type LogStreamLevel, type LogStreamProps, _default$8 as MobileTokenizer, type MobileTokenizerChange, type MobileTokenizerEmits, type MobileTokenizerProps, type PanelGroup, type PanelRow, type PathPersonality, _default$9 as SVGIcon, type SVGIconColor, type SVGIconDef, type SVGIconProps, type SVGIconSize, type SVGIconVariation, type SearchSource, type SearchableItem, _default$10 as Stat, type StatDelta, type StatDeltaDirection, type StatDeltaSentiment, type StatProps, type StatSize, _default$11 as Tour, type TourDismissSource, type TourEmits, type TourProps, type TourSlots, _default$12 as TourStep, type TourStepProps, type TourStepSlots, _default$13 as TransferList, type TransferListEmits, type TransferListOption, type TransferListProps, _default$14 as TransferListSelector, type TransferListSlots, type UseTourReturn, type XIFAnimate, type XIFIcon, type XIFPath, type XIFPersonality, type XIFSlot };
2318
+ export { type CalendarDayEvent, type CalendarEvent, type CalendarEventBase, type CalendarInstantEvent, type ChatEmojiOption, _default as ChatEmojiPicker, type ChatEmojiPickerEmits, type ChatEmojiPickerProps, type ChatEmojiPickerSlots, type ChatReaction, _default$1 as ChatReactionBar, type ChatReactionBarEmits, type ChatReactionBarProps, _default$2 as CircularProgress, type CircularProgressProps, type CircularProgressSize, type CircularProgressVariant, type CircularProgressVariantMap, _default$3 as CodeEditor, type CodeEditorEmits, type CodeEditorProps, type CommentActivityEvent, type CommentAgentCommand, type CommentAnchor, _default$4 as CommentComposer, _default$5 as CommentComposerBase, type CommentComposerBaseEmits, type CommentComposerBaseProps, type CommentComposerBaseSlots, type CommentComposerContext, type CommentComposerEmits, type CommentComposerProps, type CommentComposerRenderProps, type CommentComposerSlots, type CommentData, type CommentHighlightColor, type CommentImageUploader, type CommentMode, _default$6 as CommentPin, type CommentPinEmits, type CommentPinParticipant, type CommentPinProps, type CommentPinSize, type CommentProgress, type CommentReaction, type CommentReactionOption, type CommentStatus, _default$7 as CommentThread, type CommentThreadData, type CommentThreadEmits, type CommentThreadProps, type CommentThreadSharedProps, type CommentThreadSlots, type CommentUploadedImage, type CommentUser, type CommentVersion, _default$8 as Comments, type CommentsComposerPosition, type CommentsDensity, type CommentsEmits, type CommentsLayout, type CommentsProps, type CommentsSlots, type CreateDiffFileOptions, _default$9 as DiffViewer, type DiffViewerChangeIndicator, type DiffViewerEmits, type DiffViewerFile, type DiffViewerFileStatus, type DiffViewerHunk, type DiffViewerInlineHighlight, type DiffViewerLine, type DiffViewerLineKind, type DiffViewerLineRef, type DiffViewerProps, type DiffViewerSide, type DiffViewerSlots, type DiffViewerViewMode, type EmojiCategory, type EmojiOption, _default$10 as EmojiPicker, type EmojiPickerEmits, type EmojiPickerProps, type IconShape, type IconShapeRole, _default$11 as InfoTip, type InfoTipProps, type InfoTipSize, type InlineDiffGranularity, type InlineDiffResult, type InlineRange, type Instant, _default$12 as ListInput, type ListInputChange, type ListInputColumn, type ListInputColumnWidth, type ListInputEmits, type ListInputProps, type ListInputRenderContext, type ListInputValueContext, type LogEntry, _default$13 as LogStream, type LogStreamEmits, type LogStreamLevel, type LogStreamProps, _default$14 as MobileTokenizer, type MobileTokenizerChange, type MobileTokenizerEmits, type MobileTokenizerProps, type PanelGroup, type PanelRow, type PathPersonality, _default$15 as SVGIcon, type SVGIconColor, type SVGIconDef, type SVGIconProps, type SVGIconSize, type SVGIconVariation, _default$16 as Schedule, type ScheduleCategory, type ScheduleContextValue, type ScheduleDate, type ScheduleEmits, type ScheduleEventColor, type ScheduleEventSource, type ScheduleHeaderContent, type SchedulePaginationPluginOptions, type SchedulePlugin, type SchedulePluginPosition, type ScheduleProps, type ScheduleRange, type ScheduleTimeGridViewOptions, type ScheduleView, type ScheduleViewBase, type ScheduleViewOptions, type ScheduleViewSelectorOption, type ScheduleViewSelectorPluginOptions, type SearchSource, type SearchableItem, _default$17 as Stat, type StatDelta, type StatDeltaDirection, type StatDeltaSentiment, type StatProps, type StatSize, _default$18 as Tour, type TourDismissSource, type TourEmits, type TourProps, type TourSlots, _default$19 as TourStep, type TourStepProps, type TourStepSlots, _default$20 as TransferList, type TransferListEmits, type TransferListOption, type TransferListProps, _default$21 as TransferListSelector, type TransferListSlots, type UseTourReturn, type XIFAnimate, type XIFIcon, type XIFPath, type XIFPersonality, type XIFSlot, type ZonedDateTime, type ZonedDateTimeRange };