@xpadev-net/niconicomments 0.2.56 → 0.2.58

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/bundle.d.ts CHANGED
@@ -1,14 +1,55 @@
1
1
  /// <reference types="node" />
2
+ type ButtonList = {
3
+ left: ButtonPartLeft;
4
+ middle: ButtonPartMiddle[];
5
+ right: ButtonPartRight;
6
+ };
7
+
8
+ type ButtonPartLeft = {
9
+ type: "left";
10
+ left: number;
11
+ top: number;
12
+ width: number;
13
+ height: number;
14
+ };
15
+
16
+ type ButtonPartMiddle = {
17
+ type: "middle";
18
+ left: number;
19
+ top: number;
20
+ width: number;
21
+ height: number;
22
+ };
23
+
24
+ type ButtonPartRight = {
25
+ type: "right";
26
+ right: number;
27
+ top: number;
28
+ height: number;
29
+ };
30
+
2
31
  type Canvas = HTMLCanvasElement;
3
32
  type Context2D = CanvasRenderingContext2D;
4
33
 
34
+ type DefaultCommand = {
35
+ color?: string;
36
+ size?: CommentSize;
37
+ font?: CommentFont;
38
+ loc?: CommentLoc;
39
+ };
40
+
5
41
  declare class BaseComment implements IComment {
6
42
  protected readonly context: Context2D;
7
43
  protected cacheKey: string;
8
44
  comment: FormattedCommentWithSize;
45
+ pos: {
46
+ x: number;
47
+ y: number;
48
+ };
9
49
  posY: number;
10
50
  readonly pluginName: string;
11
51
  image?: Canvas | null;
52
+ buttonImage?: Canvas | null;
12
53
  constructor(comment: FormattedComment, context: Context2D);
13
54
  get invisible(): boolean;
14
55
  get loc(): CommentLoc;
@@ -27,11 +68,11 @@ declare class BaseComment implements IComment {
27
68
  protected parseContent(comment: string): ParseContentResult;
28
69
  protected measureText(comment: MeasureTextInput): MeasureTextResult;
29
70
  protected convertComment(comment: FormattedComment): FormattedCommentWithSize;
30
- draw(vpos: number, showCollision: boolean, debug: boolean): void;
31
- protected _draw(posX: number, posY: number): void;
71
+ draw(vpos: number, showCollision: boolean, cursor?: Position): void;
72
+ protected _draw(posX: number, posY: number, cursor?: Position): void;
32
73
  protected _drawRectColor(posX: number, posY: number): void;
33
74
  protected _drawBackgroundColor(posX: number, posY: number): void;
34
- protected _drawDebugInfo(posX: number, posY: number, debug: boolean): void;
75
+ protected _drawDebugInfo(posX: number, posY: number): void;
35
76
  protected _drawCollision(posX: number, posY: number, showCollision: boolean): void;
36
77
  protected getTextImage(): Canvas | null;
37
78
  protected _generateTextImage(): Canvas;
@@ -40,18 +81,22 @@ declare class BaseComment implements IComment {
40
81
  image: Canvas;
41
82
  context: Context2D;
42
83
  };
84
+ protected getButtonImage(posX: number, posY: number, cursor?: Position): Canvas | undefined;
85
+ isHovered(cursor?: Position, posX?: number, posY?: number): boolean;
43
86
  }
44
87
 
45
88
  declare class FlashComment extends BaseComment {
46
89
  private _globalScale;
47
90
  readonly pluginName: string;
91
+ buttonImage: Canvas;
92
+ protected buttonContext: Context2D;
48
93
  constructor(comment: FormattedComment, context: Context2D);
49
94
  get content(): string;
50
95
  set content(input: string);
51
96
  convertComment(comment: FormattedComment): FormattedCommentWithSize;
52
97
  getCommentSize(parsedData: FormattedCommentWithFont): FormattedCommentWithSize;
53
98
  parseCommandAndNicoscript(comment: FormattedComment): FormattedCommentWithFont;
54
- parseContent(input: string): {
99
+ parseContent(input: string, button?: ButtonParams): {
55
100
  content: CommentContentItem[];
56
101
  lineCount: number;
57
102
  lineOffset: number;
@@ -60,6 +105,12 @@ declare class FlashComment extends BaseComment {
60
105
  private _measureContent;
61
106
  _drawCollision(posX: number, posY: number, showCollision: boolean): void;
62
107
  _generateTextImage(): Canvas;
108
+ getButtonImage(posX: number, posY: number, cursor?: Position): HTMLCanvasElement | undefined;
109
+ isHovered(_cursor?: Position, _posX?: number, _posY?: number): boolean;
110
+ protected _setupCanvas(image: Canvas, context: Context2D): {
111
+ image: HTMLCanvasElement;
112
+ context: CanvasRenderingContext2D;
113
+ };
63
114
  }
64
115
 
65
116
  declare class HTML5Comment extends BaseComment {
@@ -80,6 +131,8 @@ declare class HTML5Comment extends BaseComment {
80
131
  private _processResizeX;
81
132
  _drawCollision(posX: number, posY: number, showCollision: boolean): void;
82
133
  _generateTextImage(): Canvas;
134
+ getButtonImage(): undefined;
135
+ isHovered(): boolean;
83
136
  }
84
137
 
85
138
  type index_d$3_BaseComment = BaseComment;
@@ -92,145 +145,152 @@ declare namespace index_d$3 {
92
145
  export { index_d$3_BaseComment as BaseComment, index_d$3_FlashComment as FlashComment, index_d$3_HTML5Comment as HTML5Comment };
93
146
  }
94
147
 
95
- type ConfigItem<T> = T | MultiConfigItem<T>;
96
- type MultiConfigItem<T> = { html5: T; flash: T };
97
- type ConfigSizeItem<T> = { big: T; medium: T; small: T };
98
- type ConfigResizedItem<T> = { default: T; resized: T };
99
-
100
- type CommentStageSize = {
101
- width: number;
102
- fullWidth: number;
103
- height: number;
104
- };
105
-
106
- type FlashCharList = {
107
- [key in "simsunStrong" | "simsunWeak" | "gulim" | "gothic"]: string;
108
- };
109
- type FlashMode = "xp" | "vista";
110
- type FlashScriptChar = {
111
- [key in "super" | "sub"]: string;
112
- };
113
- type FontList = {
114
- [key in "gulim" | "simsun"]: string;
115
- };
116
- type LineCounts = {
117
- [key in "default" | "resized" | "doubleResized"]: ConfigSizeItem<number>;
118
- };
119
- type TypeDoubleResizeMaxWidth = {
120
- [key in "full" | "normal"]: number;
121
- };
122
-
123
- type BaseConfig = {
124
- cacheAge: number;
125
- canvasHeight: number;
126
- canvasWidth: number;
127
- collisionRange: { [key in "left" | "right"]: number };
128
- colors: { [key: string]: string };
129
- commentDrawPadding: number;
130
- commentDrawRange: number;
131
- commentScale: ConfigItem<number>;
132
- CommentStageSize: ConfigItem<CommentStageSize>;
133
- commentYMarginBottom: ConfigSizeItem<number>;
134
- commentYOffset: ConfigSizeItem<ConfigResizedItem<number>>;
135
- commentYPaddingTop: ConfigResizedItem<number>;
136
- contextFillLiveOpacity: number;
137
- contextLineWidth: number;
138
- contextStrokeColor: string;
139
- contextStrokeInversionColor: string;
140
- contextStrokeOpacity: number;
141
- doubleResizeMaxWidth: ConfigItem<TypeDoubleResizeMaxWidth>;
142
- flashChar: FlashCharList;
143
- FlashMode: FlashMode;
144
- FlashScriptChar: FlashScriptChar;
145
- flashThreshold: number;
146
- font: FontList;
147
- fonts: PlatformFont;
148
- fontSize: ConfigItem<ConfigSizeItem<ConfigResizedItem<number>>>;
149
- fpsInterval: number;
150
- hiResCommentCorrection: number;
151
- lineCounts: ConfigItem<LineCounts>;
152
- lineHeight: ConfigItem<ConfigSizeItem<ConfigResizedItem<number>>>;
153
- minFontSize: number;
154
- sameCAGap: number;
155
- sameCAMinScore: number;
156
- sameCARange: number;
157
- sameCATimestampRange: number;
158
- letterSpacing: number;
159
- scriptCharOffset: number;
160
- plugins: IPluginConstructor[];
161
- commentPlugins: {
162
- class: typeof BaseComment;
163
- condition: (comment: FormattedComment) => boolean;
164
- }[];
165
- commentLimit: number | undefined;
166
- hideCommentOrder: "asc" | "desc";
167
- lineBreakCount: { [key in CommentSize]: number };
168
- nakaCommentSpeedOffset: number;
169
- };
170
-
148
+ type ConfigItem<T> = T | MultiConfigItem<T>;
149
+ type MultiConfigItem<T> = { html5: T; flash: T };
150
+ type ConfigSizeItem<T> = { big: T; medium: T; small: T };
151
+ type ConfigResizedItem<T> = { default: T; resized: T };
152
+
153
+ type CommentStageSize = {
154
+ width: number;
155
+ fullWidth: number;
156
+ height: number;
157
+ };
158
+
159
+ type FlashCharList = {
160
+ [key in "simsunStrong" | "simsunWeak" | "gulim" | "gothic"]: string;
161
+ };
162
+ type FlashMode = "xp" | "vista";
163
+ type FlashScriptChar = {
164
+ [key in "super" | "sub"]: string;
165
+ };
166
+ type FontList = {
167
+ [key in "gulim" | "simsun"]: string;
168
+ };
169
+ type LineCounts = {
170
+ [key in "default" | "resized" | "doubleResized"]: ConfigSizeItem<number>;
171
+ };
172
+ type TypeDoubleResizeMaxWidth = {
173
+ [key in "full" | "normal"]: number;
174
+ };
175
+
176
+ type BaseConfig = {
177
+ cacheAge: number;
178
+ canvasHeight: number;
179
+ canvasWidth: number;
180
+ collisionRange: { [key in "left" | "right"]: number };
181
+ colors: { [key: string]: string };
182
+ commentDrawPadding: number;
183
+ commentDrawRange: number;
184
+ commentScale: ConfigItem<number>;
185
+ CommentStageSize: ConfigItem<CommentStageSize>;
186
+ commentYMarginBottom: ConfigSizeItem<number>;
187
+ commentYOffset: ConfigSizeItem<ConfigResizedItem<number>>;
188
+ commentYPaddingTop: ConfigResizedItem<number>;
189
+ contextFillLiveOpacity: number;
190
+ contextLineWidth: number;
191
+ contextStrokeColor: string;
192
+ contextStrokeInversionColor: string;
193
+ contextStrokeOpacity: number;
194
+ doubleResizeMaxWidth: ConfigItem<TypeDoubleResizeMaxWidth>;
195
+ flashChar: FlashCharList;
196
+ FlashMode: FlashMode;
197
+ FlashScriptChar: FlashScriptChar;
198
+ flashThreshold: number;
199
+ font: FontList;
200
+ fonts: PlatformFont;
201
+ fontSize: ConfigItem<ConfigSizeItem<ConfigResizedItem<number>>>;
202
+ fpsInterval: number;
203
+ hiResCommentCorrection: number;
204
+ lineCounts: ConfigItem<LineCounts>;
205
+ lineHeight: ConfigItem<ConfigSizeItem<ConfigResizedItem<number>>>;
206
+ minFontSize: number;
207
+ sameCAGap: number;
208
+ sameCAMinScore: number;
209
+ sameCARange: number;
210
+ sameCATimestampRange: number;
211
+ letterSpacing: number;
212
+ scriptCharOffset: number;
213
+ plugins: IPluginConstructor[];
214
+ commentPlugins: {
215
+ class: typeof BaseComment;
216
+ condition: (comment: FormattedComment) => boolean;
217
+ }[];
218
+ commentLimit: number | undefined;
219
+ hideCommentOrder: "asc" | "desc";
220
+ lineBreakCount: { [key in CommentSize]: number };
221
+ nakaCommentSpeedOffset: number;
222
+ atButtonPadding: number;
223
+ atButtonRadius: number;
224
+ };
225
+
171
226
  type Config = Partial<BaseConfig>;
172
227
 
173
- interface CommentEventBase {
174
- type: CommentEventName;
175
- timeStamp: number;
176
- vpos: number;
177
- }
178
-
179
- interface SeekDisableEvent extends CommentEventBase {
180
- type: "seekDisable";
181
- }
182
-
183
- type SeekDisableEventHandler = (event: SeekDisableEvent) => unknown;
184
-
185
- interface SeekEnableEvent extends CommentEventBase {
186
- type: "seekEnable";
187
- }
188
- type SeekEnableEventHandler = (event: SeekEnableEvent) => unknown;
189
-
190
- interface CommentDisableEvent extends CommentEventBase {
191
- type: "commentDisable";
192
- }
193
- type CommentDisableEventHandler = (
194
- event: CommentDisableEvent,
195
- ) => unknown;
196
-
197
- interface CommentEnableEvent extends CommentEventBase {
198
- type: "commentEnable";
199
- }
200
- type CommentEnableEventHandler = (event: CommentEnableEvent) => unknown;
201
-
202
- interface JumpEvent extends CommentEventBase {
203
- type: "jump";
204
- to: string;
205
- message?: string;
206
- }
207
- type JumpEventHandler = (event: JumpEvent) => unknown;
208
-
209
- type CommentEventName =
210
- | "seekDisable"
211
- | "seekEnable"
212
- | "commentDisable"
213
- | "commentEnable"
214
- | "jump";
215
- type CommentEventHandler =
216
- | SeekDisableEventHandler
217
- | SeekEnableEventHandler
218
- | CommentDisableEventHandler
219
- | CommentEnableEventHandler
220
- | JumpEventHandler;
221
- interface CommentEventHandlerMap {
222
- seekDisable: SeekDisableEventHandler;
223
- seekEnable: SeekEnableEventHandler;
224
- commentDisable: CommentDisableEventHandler;
225
- commentEnable: CommentEnableEventHandler;
226
- jump: JumpEventHandler;
227
- }
228
- interface CommentEventMap {
229
- seekDisable: SeekDisableEvent;
230
- seekEnable: SeekEnableEvent;
231
- commentDisable: CommentDisableEvent;
232
- commentEnable: CommentEnableEvent;
233
- jump: JumpEvent;
228
+ type Position = {
229
+ x: number;
230
+ y: number;
231
+ };
232
+
233
+ interface CommentEventBase {
234
+ type: CommentEventName;
235
+ timeStamp: number;
236
+ vpos: number;
237
+ }
238
+
239
+ interface SeekDisableEvent extends CommentEventBase {
240
+ type: "seekDisable";
241
+ }
242
+
243
+ type SeekDisableEventHandler = (event: SeekDisableEvent) => unknown;
244
+
245
+ interface SeekEnableEvent extends CommentEventBase {
246
+ type: "seekEnable";
247
+ }
248
+ type SeekEnableEventHandler = (event: SeekEnableEvent) => unknown;
249
+
250
+ interface CommentDisableEvent extends CommentEventBase {
251
+ type: "commentDisable";
252
+ }
253
+ type CommentDisableEventHandler = (
254
+ event: CommentDisableEvent,
255
+ ) => unknown;
256
+
257
+ interface CommentEnableEvent extends CommentEventBase {
258
+ type: "commentEnable";
259
+ }
260
+ type CommentEnableEventHandler = (event: CommentEnableEvent) => unknown;
261
+
262
+ interface JumpEvent extends CommentEventBase {
263
+ type: "jump";
264
+ to: string;
265
+ message?: string;
266
+ }
267
+ type JumpEventHandler = (event: JumpEvent) => unknown;
268
+
269
+ type CommentEventName =
270
+ | "seekDisable"
271
+ | "seekEnable"
272
+ | "commentDisable"
273
+ | "commentEnable"
274
+ | "jump";
275
+ type CommentEventHandler =
276
+ | SeekDisableEventHandler
277
+ | SeekEnableEventHandler
278
+ | CommentDisableEventHandler
279
+ | CommentEnableEventHandler
280
+ | JumpEventHandler;
281
+ interface CommentEventHandlerMap {
282
+ seekDisable: SeekDisableEventHandler;
283
+ seekEnable: SeekEnableEventHandler;
284
+ commentDisable: CommentDisableEventHandler;
285
+ commentEnable: CommentEnableEventHandler;
286
+ jump: JumpEventHandler;
287
+ }
288
+ interface CommentEventMap {
289
+ seekDisable: SeekDisableEvent;
290
+ seekEnable: SeekEnableEvent;
291
+ commentDisable: CommentDisableEvent;
292
+ commentEnable: CommentEnableEvent;
293
+ jump: JumpEvent;
234
294
  }
235
295
 
236
296
  type Platform =
@@ -262,6 +322,7 @@ type FormattedComment = {
262
322
  mail: string[];
263
323
  user_id: number;
264
324
  layer: number;
325
+ is_my_post: boolean;
265
326
  };
266
327
  type FormattedLegacyComment = {
267
328
  id: number;
@@ -377,22 +438,24 @@ interface IComment {
377
438
  mail: string[];
378
439
  content: string;
379
440
  image?: Canvas | null;
380
- draw: (vpos: number, showCollision: boolean, isDebug: boolean) => void;
441
+ draw: (vpos: number, showCollision: boolean, cursor?: Position) => void;
442
+ isHovered: (cursor?: Position, posX?: number, posY?: number) => boolean;
443
+ }
444
+
445
+ interface IPluginConstructor {
446
+ id: string;
447
+ new (Canvas: Canvas, comments: IComment[]): IPlugin;
448
+ }
449
+
450
+ interface IPlugin {
451
+ draw?: (vpos: number) => void;
452
+ addComments?: (comments: IComment[]) => void;
453
+ transformComments?: (comments: IComment[]) => IComment[];
381
454
  }
382
455
 
383
- interface IPluginConstructor {
384
- id: string;
385
- new (Canvas: Canvas, comments: IComment[]): IPlugin;
386
- }
387
-
388
- interface IPlugin {
389
- draw(vpos: number): void;
390
- addComments(comments: IComment[]): void;
391
- }
392
-
393
- type IPluginList = {
394
- instance: IPlugin;
395
- canvas: HTMLCanvasElement;
456
+ type IPluginList = {
457
+ instance: IPlugin;
458
+ canvas: HTMLCanvasElement;
396
459
  }[];
397
460
 
398
461
  type InputFormatType =
@@ -441,208 +504,219 @@ type inputFormatType = InputFormatType;
441
504
  */
442
505
  type inputFormat = InputFormat;
443
506
 
444
- type FormattedCommentWithFont = {
445
- id: number;
446
- vpos: number;
447
- date: number;
448
- date_usec: number;
449
- owner: boolean;
450
- premium: boolean;
451
- mail: string[];
452
- user_id: number;
453
- layer: number;
454
- loc: CommentLoc;
455
- size: CommentSize;
456
- fontSize: number;
457
- font: CommentFont;
458
- color: string;
459
- strokeColor?: string;
460
- wakuColor?: string;
461
- fillColor?: string;
462
- full: boolean;
463
- ender: boolean;
464
- _live: boolean;
465
- long: number;
466
- invisible: boolean;
467
- content: CommentContentItem[];
468
- rawContent: string;
469
- flash: boolean;
470
- lineCount: number;
471
- lineOffset: number;
472
- };
473
- type FormattedCommentWithSize = FormattedCommentWithFont & {
474
- height: number;
475
- width: number;
476
- lineHeight: number;
477
- resized: boolean;
478
- resizedX: boolean;
479
- resizedY: boolean;
480
- content: CommentMeasuredContentItem[];
481
- charSize: number;
482
- scale: number;
483
- scaleX: number;
484
- };
485
- type ParseContentResult = {
486
- content: CommentContentItem[];
487
- lineCount: number;
488
- lineOffset: number;
489
- };
490
- type ParseCommandAndNicoScriptResult = {
491
- flash: boolean;
492
- loc: CommentLoc;
493
- size: CommentSize;
494
- fontSize: number;
495
- color: string;
496
- strokeColor?: string;
497
- wakuColor?: string;
498
- fillColor?: string;
499
- font: CommentFont;
500
- full: boolean;
501
- ender: boolean;
502
- _live: boolean;
503
- invisible: boolean;
504
- long: number;
505
- };
506
- type CommentContentItem = {
507
- content: string;
508
- slicedContent: string[];
509
- font?: CommentFlashFont;
510
- width?: number[];
511
- };
512
- type CommentMeasuredContentItem = CommentContentItem & {
513
- width: number[];
514
- };
515
- type CommentFlashFontParsed =
516
- | "gothic"
517
- | "gulim"
518
- | "simsunStrong"
519
- | "simsunWeak";
520
- type CommentContentIndex = {
521
- index: number;
522
- font: CommentFlashFontParsed;
523
- };
524
- type CommentFont = "defont" | "mincho" | "gothic" | "gulim" | "simsun";
525
- type CommentFlashFont = "defont" | "gulim" | "simsun";
526
- type CommentSize = "big" | "medium" | "small";
527
- type CommentLoc = "ue" | "naka" | "shita";
528
- type Collision = { [key in CollisionPos]: CollisionItem };
529
- type Timeline = { [key: number]: IComment[] };
530
- type CollisionPos = "ue" | "shita" | "right" | "left";
531
- type CollisionItem = { [p: number]: IComment[] };
532
- type NicoScript = {
533
- reverse: NicoScriptReverse[];
534
- ban: NicoScriptBan[];
535
- default: NicoScriptDefault[];
536
- replace: NicoScriptReplace[];
537
- seekDisable: NicoScriptSeekDisable[];
538
- jump: NicoScriptJump[];
539
- };
540
- type NicoScriptSeekDisable = {
541
- start: number;
542
- end: number;
543
- };
544
- type NicoScriptJump = {
545
- start: number;
546
- end?: number;
547
- to: string;
548
- message?: string;
549
- };
550
- type NicoScriptReverse = {
551
- target: NicoScriptReverseTarget;
552
- start: number;
553
- end: number;
554
- };
555
- type NicoScriptReverseTarget = "コメ" | "投コメ" | "全";
556
- type NicoScriptReplace = {
557
- start: number;
558
- long: number | undefined;
559
- keyword: string;
560
- replace: string;
561
- range: NicoScriptReplaceRange;
562
- target: NicoScriptReplaceTarget;
563
- condition: NicoScriptReplaceCondition;
564
- color: string | undefined;
565
- size: CommentSize | undefined;
566
- font: CommentFont | undefined;
567
- loc: CommentLoc | undefined;
568
- no: number;
569
- };
570
- type NicoScriptReplaceRange = "単" | "全";
571
- type NicoScriptReplaceTarget =
572
- | "コメ"
573
- | "投コメ"
574
- | "全"
575
- | "含まない"
576
- | "含む";
577
- type NicoScriptReplaceCondition = "完全一致" | "部分一致";
578
- type NicoScriptBan = {
579
- start: number;
580
- end: number;
581
- };
582
- type NicoScriptDefault = {
583
- start: number;
584
- long: number | undefined;
585
- color: string | undefined;
586
- size: CommentSize | undefined;
587
- font: CommentFont | undefined;
588
- loc: CommentLoc | undefined;
589
- };
590
- type MeasureTextResult = {
591
- width: number;
592
- height: number;
593
- resized: boolean;
594
- resizedX: boolean;
595
- resizedY: boolean;
596
- fontSize: number;
597
- lineHeight: number;
598
- content: CommentMeasuredContentItem[];
599
- charSize: number;
600
- scaleX: number;
601
- scale: number;
602
- };
603
- type ParsedCommand = {
604
- loc: CommentLoc | undefined;
605
- size: CommentSize | undefined;
606
- fontSize: number | undefined;
607
- color: string | undefined;
608
- strokeColor?: string;
609
- wakuColor?: string;
610
- fillColor?: string;
611
- font: CommentFont | undefined;
612
- full: boolean;
613
- ender: boolean;
614
- _live: boolean;
615
- invisible: boolean;
616
- long: number | undefined;
617
- button: boolean;
618
- };
619
-
620
- type MeasureTextInput = {
621
- content: CommentContentItem[];
622
- resized?: boolean;
623
- ender: boolean;
624
- size: CommentSize;
625
- fontSize: number;
626
- resizedY?: boolean;
627
- resizedX?: boolean;
628
- font: CommentFont;
629
- loc: CommentLoc;
630
- full: boolean;
631
- flash: boolean;
632
- lineCount: number;
633
- lineHeight?: number;
634
- charSize?: number;
635
- scale: number;
636
- };
637
-
638
- type MeasureInput = {
639
- font: CommentFont;
640
- content: CommentContentItem[];
641
- lineHeight: number;
642
- charSize: number;
643
- lineCount: number;
644
- };
645
-
507
+ type FormattedCommentWithFont = {
508
+ id: number;
509
+ vpos: number;
510
+ date: number;
511
+ date_usec: number;
512
+ owner: boolean;
513
+ premium: boolean;
514
+ mail: string[];
515
+ user_id: number;
516
+ layer: number;
517
+ loc: CommentLoc;
518
+ size: CommentSize;
519
+ fontSize: number;
520
+ font: CommentFont;
521
+ color: string;
522
+ strokeColor?: string;
523
+ wakuColor?: string;
524
+ fillColor?: string;
525
+ full: boolean;
526
+ ender: boolean;
527
+ _live: boolean;
528
+ long: number;
529
+ invisible: boolean;
530
+ content: CommentContentItem[];
531
+ rawContent: string;
532
+ flash: boolean;
533
+ lineCount: number;
534
+ lineOffset: number;
535
+ is_my_post: boolean;
536
+ button?: ButtonParams;
537
+ };
538
+ type FormattedCommentWithSize = FormattedCommentWithFont & {
539
+ height: number;
540
+ width: number;
541
+ lineHeight: number;
542
+ resized: boolean;
543
+ resizedX: boolean;
544
+ resizedY: boolean;
545
+ content: CommentMeasuredContentItem[];
546
+ charSize: number;
547
+ scale: number;
548
+ scaleX: number;
549
+ buttonObjects?: ButtonList;
550
+ };
551
+ type ParseContentResult = {
552
+ content: CommentContentItem[];
553
+ lineCount: number;
554
+ lineOffset: number;
555
+ };
556
+ type ParseCommandAndNicoScriptResult = {
557
+ flash: boolean;
558
+ loc: CommentLoc;
559
+ size: CommentSize;
560
+ fontSize: number;
561
+ color: string;
562
+ strokeColor?: string;
563
+ wakuColor?: string;
564
+ fillColor?: string;
565
+ font: CommentFont;
566
+ full: boolean;
567
+ ender: boolean;
568
+ _live: boolean;
569
+ invisible: boolean;
570
+ long: number;
571
+ button?: ButtonParams;
572
+ };
573
+ type CommentContentItem = {
574
+ content: string;
575
+ slicedContent: string[];
576
+ isButton?: boolean;
577
+ font?: CommentFlashFont;
578
+ width?: number[];
579
+ };
580
+ type CommentMeasuredContentItem = CommentContentItem & {
581
+ width: number[];
582
+ };
583
+ type CommentFlashFontParsed =
584
+ | "gothic"
585
+ | "gulim"
586
+ | "simsunStrong"
587
+ | "simsunWeak";
588
+ type CommentContentIndex = {
589
+ index: number;
590
+ font: CommentFlashFontParsed;
591
+ };
592
+ type CommentFont = "defont" | "mincho" | "gothic" | "gulim" | "simsun";
593
+ type CommentFlashFont = "defont" | "gulim" | "simsun";
594
+ type CommentSize = "big" | "medium" | "small";
595
+ type CommentLoc = "ue" | "naka" | "shita";
596
+ type Collision = { [key in CollisionPos]: CollisionItem };
597
+ type Timeline = { [key: number]: IComment[] };
598
+ type CollisionPos = "ue" | "shita" | "right" | "left";
599
+ type CollisionItem = { [p: number]: IComment[] };
600
+ type NicoScript = {
601
+ reverse: NicoScriptReverse[];
602
+ ban: NicoScriptBan[];
603
+ default: NicoScriptDefault[];
604
+ replace: NicoScriptReplace[];
605
+ seekDisable: NicoScriptSeekDisable[];
606
+ jump: NicoScriptJump[];
607
+ };
608
+ type NicoScriptSeekDisable = {
609
+ start: number;
610
+ end: number;
611
+ };
612
+ type NicoScriptJump = {
613
+ start: number;
614
+ end?: number;
615
+ to: string;
616
+ message?: string;
617
+ };
618
+ type NicoScriptReverse = {
619
+ target: NicoScriptReverseTarget;
620
+ start: number;
621
+ end: number;
622
+ };
623
+ type NicoScriptReverseTarget = "コメ" | "投コメ" | "全";
624
+ type NicoScriptReplace = {
625
+ start: number;
626
+ long: number | undefined;
627
+ keyword: string;
628
+ replace: string;
629
+ range: NicoScriptReplaceRange;
630
+ target: NicoScriptReplaceTarget;
631
+ condition: NicoScriptReplaceCondition;
632
+ color: string | undefined;
633
+ size: CommentSize | undefined;
634
+ font: CommentFont | undefined;
635
+ loc: CommentLoc | undefined;
636
+ no: number;
637
+ };
638
+ type NicoScriptReplaceRange = "単" | "";
639
+ type NicoScriptReplaceTarget =
640
+ | "コメ"
641
+ | "投コメ"
642
+ | "全"
643
+ | "含まない"
644
+ | "含む";
645
+ type NicoScriptReplaceCondition = "完全一致" | "部分一致";
646
+ type NicoScriptBan = {
647
+ start: number;
648
+ end: number;
649
+ };
650
+ type NicoScriptDefault = {
651
+ start: number;
652
+ long: number | undefined;
653
+ color: string | undefined;
654
+ size: CommentSize | undefined;
655
+ font: CommentFont | undefined;
656
+ loc: CommentLoc | undefined;
657
+ };
658
+ type MeasureTextResult = {
659
+ width: number;
660
+ height: number;
661
+ resized: boolean;
662
+ resizedX: boolean;
663
+ resizedY: boolean;
664
+ fontSize: number;
665
+ lineHeight: number;
666
+ content: CommentMeasuredContentItem[];
667
+ charSize: number;
668
+ scaleX: number;
669
+ scale: number;
670
+ };
671
+
672
+ type ButtonParams = {
673
+ message: {
674
+ before: string;
675
+ body: string;
676
+ after: string;
677
+ }; //表示するボタンの内容
678
+ commentMessage: string; //コメントの内容
679
+ commentMail: string[]; //コメントのコマンド → 未指定時は色のみ継承
680
+ commentVisible: boolean; //コメントを投稿するか
681
+ limit: number; //ボタンの使用上限
682
+ local: boolean; //ローカルコメントか
683
+ hidden: boolean; //通常のコメントのように表示するか
684
+ };
685
+
686
+ type ParsedCommand = {
687
+ loc: CommentLoc | undefined;
688
+ size: CommentSize | undefined;
689
+ fontSize: number | undefined;
690
+ color: string | undefined;
691
+ strokeColor?: string;
692
+ wakuColor?: string;
693
+ fillColor?: string;
694
+ font: CommentFont | undefined;
695
+ full: boolean;
696
+ ender: boolean;
697
+ _live: boolean;
698
+ invisible: boolean;
699
+ long: number | undefined;
700
+ button?: ButtonParams;
701
+ };
702
+
703
+ type MeasureTextInput = FormattedCommentWithFont & {
704
+ resized?: boolean;
705
+ resizedY?: boolean;
706
+ resizedX?: boolean;
707
+ lineHeight?: number;
708
+ charSize?: number;
709
+ scale: number;
710
+ };
711
+
712
+ type MeasureInput = {
713
+ font: CommentFont;
714
+ content: CommentContentItem[];
715
+ lineHeight: number;
716
+ charSize: number;
717
+ lineCount: number;
718
+ };
719
+
646
720
  type ValueOf<T> = T[keyof T];
647
721
 
648
722
  declare let imageCache: {
@@ -970,13 +1044,6 @@ declare const hex2rgb: (hex: string) => number[];
970
1044
  declare const hex2rgba: (hex: string) => number[];
971
1045
  declare const getStrokeColor: (comment: FormattedCommentWithSize) => string;
972
1046
 
973
- type DefaultCommand = {
974
- color?: string;
975
- size?: CommentSize;
976
- font?: CommentFont;
977
- loc?: CommentLoc;
978
- };
979
-
980
1047
  declare const isLineBreakResize: (comment: MeasureTextInput) => boolean;
981
1048
  declare const getDefaultCommand: (vpos: number) => DefaultCommand;
982
1049
  declare const parseCommandAndNicoScript: (comment: FormattedComment) => ParseCommandAndNicoScriptResult;
@@ -1000,6 +1067,8 @@ declare const getConfig: <T>(input: ConfigItem<T>, isFlash?: boolean) => T;
1000
1067
  declare const getFlashFontIndex: (part: string) => CommentContentIndex[];
1001
1068
  declare const getFlashFontName: (font: CommentFlashFontParsed) => CommentFlashFont;
1002
1069
  declare const parseContent: (content: string) => CommentContentItem[];
1070
+ declare const getButtonParts: (comment: FormattedCommentWithSize) => FormattedCommentWithSize;
1071
+ declare const buildAtButtonComment: (comment: FormattedCommentWithSize, vpos: number) => FormattedComment | undefined;
1003
1072
 
1004
1073
  declare const getLineHeight: (fontSize: CommentSize, isFlash: boolean, resized?: boolean) => number;
1005
1074
  declare const getCharSize: (fontSize: CommentSize, isFlash: boolean) => number;
@@ -1018,7 +1087,9 @@ declare const nativeSort: <T>(getter: (input: T) => number) => (a: T, b: T) => 1
1018
1087
 
1019
1088
  declare const index_d_ArrayEqual: typeof ArrayEqual;
1020
1089
  declare const index_d_ArrayPush: typeof ArrayPush;
1090
+ declare const index_d_buildAtButtonComment: typeof buildAtButtonComment;
1021
1091
  declare const index_d_changeCALayer: typeof changeCALayer;
1092
+ declare const index_d_getButtonParts: typeof getButtonParts;
1022
1093
  declare const index_d_getCharSize: typeof getCharSize;
1023
1094
  declare const index_d_getConfig: typeof getConfig;
1024
1095
  declare const index_d_getDefaultCommand: typeof getDefaultCommand;
@@ -1043,7 +1114,7 @@ declare const index_d_parseFont: typeof parseFont;
1043
1114
  declare const index_d_processFixedComment: typeof processFixedComment;
1044
1115
  declare const index_d_processMovableComment: typeof processMovableComment;
1045
1116
  declare namespace index_d {
1046
- export { index_d_ArrayEqual as ArrayEqual, index_d_ArrayPush as ArrayPush, index_d_changeCALayer as changeCALayer, index_d_getCharSize as getCharSize, index_d_getConfig as getConfig, index_d_getDefaultCommand as getDefaultCommand, index_d_getFlashFontIndex as getFlashFontIndex, index_d_getFlashFontName as getFlashFontName, index_d_getFontSizeAndScale as getFontSizeAndScale, index_d_getLineHeight as getLineHeight, index_d_getPosX as getPosX, index_d_getPosY as getPosY, index_d_getStrokeColor as getStrokeColor, index_d_hex2rgb as hex2rgb, index_d_hex2rgba as hex2rgba, index_d_isBanActive as isBanActive, index_d_isFlashComment as isFlashComment, index_d_isLineBreakResize as isLineBreakResize, index_d_isReverseActive as isReverseActive, index_d_measure as measure, index_d_nativeSort as nativeSort, index_d_parseCommandAndNicoScript as parseCommandAndNicoScript, index_d_parseContent as parseContent, index_d_parseFont as parseFont, index_d_processFixedComment as processFixedComment, index_d_processMovableComment as processMovableComment };
1117
+ export { index_d_ArrayEqual as ArrayEqual, index_d_ArrayPush as ArrayPush, index_d_buildAtButtonComment as buildAtButtonComment, index_d_changeCALayer as changeCALayer, index_d_getButtonParts as getButtonParts, index_d_getCharSize as getCharSize, index_d_getConfig as getConfig, index_d_getDefaultCommand as getDefaultCommand, index_d_getFlashFontIndex as getFlashFontIndex, index_d_getFlashFontName as getFlashFontName, index_d_getFontSizeAndScale as getFontSizeAndScale, index_d_getLineHeight as getLineHeight, index_d_getPosX as getPosX, index_d_getPosY as getPosY, index_d_getStrokeColor as getStrokeColor, index_d_hex2rgb as hex2rgb, index_d_hex2rgba as hex2rgba, index_d_isBanActive as isBanActive, index_d_isFlashComment as isFlashComment, index_d_isLineBreakResize as isLineBreakResize, index_d_isReverseActive as isReverseActive, index_d_measure as measure, index_d_nativeSort as nativeSort, index_d_parseCommandAndNicoScript as parseCommandAndNicoScript, index_d_parseContent as parseContent, index_d_parseFont as parseFont, index_d_processFixedComment as processFixedComment, index_d_processMovableComment as processMovableComment };
1047
1118
  }
1048
1119
 
1049
1120
  declare const definition: {
@@ -1140,7 +1211,7 @@ declare class NiconiComments {
1140
1211
  private getCommentPos;
1141
1212
  private sortComment;
1142
1213
  addComments(...rawComments: FormattedComment[]): void;
1143
- drawCanvas(vpos: number, forceRendering?: boolean): boolean;
1214
+ drawCanvas(vpos: number, forceRendering?: boolean, cursor?: Position): boolean;
1144
1215
  private _drawVideo;
1145
1216
  private _drawComments;
1146
1217
  private _drawCollision;
@@ -1149,6 +1220,7 @@ declare class NiconiComments {
1149
1220
  addEventListener<K extends keyof CommentEventHandlerMap>(eventName: K, handler: CommentEventHandlerMap[K]): void;
1150
1221
  removeEventListener<K extends keyof CommentEventHandlerMap>(eventName: K, handler: CommentEventHandlerMap[K]): void;
1151
1222
  clear(): void;
1223
+ click(vpos: number, pos: Position): void;
1152
1224
  }
1153
1225
 
1154
- export { type ApiChat, type ApiGlobalNumRes, type ApiLeaf, type ApiPing, type ApiThread, type BaseConfig, type BaseOptions, type Canvas, type Collision, type CollisionItem, type CollisionPos, type CommentContentIndex, type CommentContentItem, type CommentDisableEvent, type CommentDisableEventHandler, type CommentEnableEvent, type CommentEnableEventHandler, type CommentEventBase, type CommentEventHandler, type CommentEventHandlerMap, type CommentEventMap, type CommentEventName, type CommentFlashFont, type CommentFlashFontParsed, type CommentFont, type CommentLoc, type CommentMeasuredContentItem, type CommentSize, type CommentStageSize, type Config, type ConfigItem, type Context2D, type FlashMode, type FlashScriptChar, type FontItem, type FormattedComment, type FormattedCommentWithFont, type FormattedCommentWithSize, type FormattedLegacyComment, type HTML5Fonts, type IComment, type IPlugin, type IPluginConstructor, type IPluginList, type InputFormat, type InputFormatType, type JumpEvent, type JumpEventHandler, type MeasureInput, type MeasureTextInput, type MeasureTextResult, type MultiConfigItem, type NicoScript, type NicoScriptReplace, type NicoScriptReplaceCondition, type NicoScriptReplaceRange, type NicoScriptReplaceTarget, type NicoScriptReverseTarget, type Options, type OwnerComment, type ParseCommandAndNicoScriptResult, type ParseContentResult, type ParsedCommand, type Platform, type PlatformFont, type RawApiResponse, type SeekDisableEvent, type SeekDisableEventHandler, type SeekEnableEvent, type SeekEnableEventHandler, type Timeline, type V1Comment, type V1Thread, type ValueOf, NiconiComments as default, type formattedComment, type formattedLegacyComment, type inputFormat, type inputFormatType, type ownerComment, type rawApiResponse, type v1Thread };
1226
+ export { type ApiChat, type ApiGlobalNumRes, type ApiLeaf, type ApiPing, type ApiThread, type BaseConfig, type BaseOptions, type ButtonList, type ButtonParams, type ButtonPartLeft, type ButtonPartMiddle, type ButtonPartRight, type Canvas, type Collision, type CollisionItem, type CollisionPos, type CommentContentIndex, type CommentContentItem, type CommentDisableEvent, type CommentDisableEventHandler, type CommentEnableEvent, type CommentEnableEventHandler, type CommentEventBase, type CommentEventHandler, type CommentEventHandlerMap, type CommentEventMap, type CommentEventName, type CommentFlashFont, type CommentFlashFontParsed, type CommentFont, type CommentLoc, type CommentMeasuredContentItem, type CommentSize, type CommentStageSize, type Config, type ConfigItem, type Context2D, type DefaultCommand, type FlashMode, type FlashScriptChar, type FontItem, type FormattedComment, type FormattedCommentWithFont, type FormattedCommentWithSize, type FormattedLegacyComment, type HTML5Fonts, type IComment, type IPlugin, type IPluginConstructor, type IPluginList, type InputFormat, type InputFormatType, type JumpEvent, type JumpEventHandler, type MeasureInput, type MeasureTextInput, type MeasureTextResult, type MultiConfigItem, type NicoScript, type NicoScriptReplace, type NicoScriptReplaceCondition, type NicoScriptReplaceRange, type NicoScriptReplaceTarget, type NicoScriptReverseTarget, type Options, type OwnerComment, type ParseCommandAndNicoScriptResult, type ParseContentResult, type ParsedCommand, type Platform, type PlatformFont, type Position, type RawApiResponse, type SeekDisableEvent, type SeekDisableEventHandler, type SeekEnableEvent, type SeekEnableEventHandler, type Timeline, type V1Comment, type V1Thread, type ValueOf, NiconiComments as default, type formattedComment, type formattedLegacyComment, type inputFormat, type inputFormatType, type ownerComment, type rawApiResponse, type v1Thread };