@m2c2kit/addons 0.3.26 → 0.3.27
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 +115 -1
- package/dist/index.js +294 -2
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/package.json +6 -7
package/dist/index.d.ts
CHANGED
|
@@ -1252,4 +1252,118 @@ declare class LocalePicker extends Composite {
|
|
|
1252
1252
|
duplicate(newName?: string): LocalePicker;
|
|
1253
1253
|
}
|
|
1254
1254
|
|
|
1255
|
-
|
|
1255
|
+
interface SliderOptions extends CompositeOptions {
|
|
1256
|
+
/** The size of the track that the thumb moves along. */
|
|
1257
|
+
trackSize?: Size;
|
|
1258
|
+
/** The color of the track. */
|
|
1259
|
+
trackColor?: RgbaColor;
|
|
1260
|
+
/** The size of the thumb that the user drags. */
|
|
1261
|
+
thumbSize?: Size;
|
|
1262
|
+
/** The color of the thumb. */
|
|
1263
|
+
thumbColor?: RgbaColor;
|
|
1264
|
+
/** The minimum value of the slider. */
|
|
1265
|
+
min?: number;
|
|
1266
|
+
/** The maximum value of the slider. */
|
|
1267
|
+
max?: number;
|
|
1268
|
+
/** The initial value of the slider. */
|
|
1269
|
+
value?: number;
|
|
1270
|
+
}
|
|
1271
|
+
interface SliderEvent extends CompositeEvent {
|
|
1272
|
+
type: "Composite";
|
|
1273
|
+
compositeType: "Slider";
|
|
1274
|
+
compositeEventType: "SliderValueChanged";
|
|
1275
|
+
target: Slider | string;
|
|
1276
|
+
value: number;
|
|
1277
|
+
}
|
|
1278
|
+
declare class Slider extends Composite implements SliderOptions {
|
|
1279
|
+
readonly compositeType = "Slider";
|
|
1280
|
+
private originalOptions;
|
|
1281
|
+
private _trackSize;
|
|
1282
|
+
private _trackColor;
|
|
1283
|
+
private _thumbSize;
|
|
1284
|
+
private _thumbColor;
|
|
1285
|
+
private _min;
|
|
1286
|
+
private _max;
|
|
1287
|
+
private _value;
|
|
1288
|
+
private thumbLabel?;
|
|
1289
|
+
private _thumbShape?;
|
|
1290
|
+
private get thumbShape();
|
|
1291
|
+
private set thumbShape(value);
|
|
1292
|
+
/**
|
|
1293
|
+
* A slider to select a value from a range by dragging a thumb along a track.
|
|
1294
|
+
*
|
|
1295
|
+
* @experimental Slider is a work in progress and will change in future versions.
|
|
1296
|
+
*
|
|
1297
|
+
* @param options - {@link SliderOptions}
|
|
1298
|
+
*/
|
|
1299
|
+
constructor(options: SliderOptions);
|
|
1300
|
+
get completeNodeOptions(): {
|
|
1301
|
+
/** The size of the track that the thumb moves along. */
|
|
1302
|
+
trackSize?: Size;
|
|
1303
|
+
/** The color of the track. */
|
|
1304
|
+
trackColor?: RgbaColor;
|
|
1305
|
+
/** The size of the thumb that the user drags. */
|
|
1306
|
+
thumbSize?: Size;
|
|
1307
|
+
/** The color of the thumb. */
|
|
1308
|
+
thumbColor?: RgbaColor;
|
|
1309
|
+
/** The minimum value of the slider. */
|
|
1310
|
+
min?: number;
|
|
1311
|
+
/** The maximum value of the slider. */
|
|
1312
|
+
max?: number;
|
|
1313
|
+
/** The initial value of the slider. */
|
|
1314
|
+
value?: number;
|
|
1315
|
+
name?: string;
|
|
1316
|
+
position?: _m2c2kit_core.Point;
|
|
1317
|
+
scale?: number;
|
|
1318
|
+
alpha?: number;
|
|
1319
|
+
zRotation?: number;
|
|
1320
|
+
isUserInteractionEnabled?: boolean;
|
|
1321
|
+
draggable?: boolean;
|
|
1322
|
+
hidden?: boolean;
|
|
1323
|
+
layout?: _m2c2kit_core.Layout;
|
|
1324
|
+
uuid?: string;
|
|
1325
|
+
suppressEvents?: boolean;
|
|
1326
|
+
anchorPoint?: _m2c2kit_core.Point;
|
|
1327
|
+
zPosition?: number;
|
|
1328
|
+
};
|
|
1329
|
+
initialize(): void;
|
|
1330
|
+
updateThumbLabel(): void;
|
|
1331
|
+
/**
|
|
1332
|
+
* Executes a callback when the slider value changes.
|
|
1333
|
+
*
|
|
1334
|
+
* @param callback - function to execute
|
|
1335
|
+
* @param options
|
|
1336
|
+
*/
|
|
1337
|
+
onValueChanged(callback: (sliderEvent: SliderEvent) => void, options?: CallbackOptions): void;
|
|
1338
|
+
private addSliderEventListener;
|
|
1339
|
+
get trackSize(): Size;
|
|
1340
|
+
set trackSize(value: Size);
|
|
1341
|
+
get trackColor(): RgbaColor;
|
|
1342
|
+
set trackColor(value: RgbaColor);
|
|
1343
|
+
get thumbSize(): Size;
|
|
1344
|
+
set thumbSize(value: Size);
|
|
1345
|
+
get thumbColor(): RgbaColor;
|
|
1346
|
+
set thumbColor(value: RgbaColor);
|
|
1347
|
+
get value(): number;
|
|
1348
|
+
set value(value: number);
|
|
1349
|
+
get min(): number;
|
|
1350
|
+
set min(value: number);
|
|
1351
|
+
get max(): number;
|
|
1352
|
+
set max(value: number);
|
|
1353
|
+
/**
|
|
1354
|
+
* Duplicates a node using deep copy.
|
|
1355
|
+
*
|
|
1356
|
+
* @remarks This is a deep recursive clone (node and children).
|
|
1357
|
+
* The uuid property of all duplicated nodes will be newly created,
|
|
1358
|
+
* because uuid must be unique.
|
|
1359
|
+
*
|
|
1360
|
+
* @param newName - optional name of the new, duplicated node. If not
|
|
1361
|
+
* provided, name will be the new uuid
|
|
1362
|
+
*/
|
|
1363
|
+
duplicate(newName?: string | undefined): Slider;
|
|
1364
|
+
update(): void;
|
|
1365
|
+
draw(canvas: Canvas): void;
|
|
1366
|
+
warmup(canvas: Canvas): void;
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
export { Button, type ButtonOptions, CountdownScene, type CountdownSceneOptions, CountdownTimer, type CountdownTimerEvent, type CountdownTimerOptions, Dialog, type DialogEvent, type DialogOptions, DialogResult, DrawPad, type DrawPadEvent, DrawPadEventType, type DrawPadItem, type DrawPadItemEvent, DrawPadItemEventType, type DrawPadOptions, type DrawPadStroke, Grid, type GridChild, type GridOptions, type InstructionScene, Instructions, type InstructionsOptions, type KeyConfiguration, type KeyTapMetadata, type LocaleOption, LocalePicker, type LocalePickerEvent, type LocalePickerIcon, type LocalePickerOptions, type LocalePickerResult, Slider, type SliderEvent, type SliderOptions, type StrokeInteraction, type TimerShape, VirtualKeyboard, type VirtualKeyboardEvent, type VirtualKeyboardOptions, type VirtualKeyboardRow };
|
package/dist/index.js
CHANGED
|
@@ -3453,7 +3453,299 @@ M2c2KitHelpers.registerM2NodeClass(
|
|
|
3453
3453
|
CountdownTimer
|
|
3454
3454
|
);
|
|
3455
3455
|
|
|
3456
|
-
|
|
3456
|
+
class Slider extends Composite {
|
|
3457
|
+
/**
|
|
3458
|
+
* A slider to select a value from a range by dragging a thumb along a track.
|
|
3459
|
+
*
|
|
3460
|
+
* @experimental Slider is a work in progress and will change in future versions.
|
|
3461
|
+
*
|
|
3462
|
+
* @param options - {@link SliderOptions}
|
|
3463
|
+
*/
|
|
3464
|
+
constructor(options) {
|
|
3465
|
+
super(options);
|
|
3466
|
+
this.compositeType = "Slider";
|
|
3467
|
+
this._trackSize = { width: 250, height: 10 };
|
|
3468
|
+
this._trackColor = WebColors.Black;
|
|
3469
|
+
this._thumbSize = { width: 20, height: 40 };
|
|
3470
|
+
this._thumbColor = WebColors.DarkGray;
|
|
3471
|
+
this._min = 0;
|
|
3472
|
+
this._max = 100;
|
|
3473
|
+
this._value = (this.max - this.min) / 2;
|
|
3474
|
+
this.originalOptions = JSON.parse(JSON.stringify(options));
|
|
3475
|
+
if (options.trackSize) {
|
|
3476
|
+
this.trackSize = options.trackSize;
|
|
3477
|
+
}
|
|
3478
|
+
if (options.trackColor) {
|
|
3479
|
+
this.trackColor = options.trackColor;
|
|
3480
|
+
}
|
|
3481
|
+
if (options.thumbSize) {
|
|
3482
|
+
this.thumbSize = options.thumbSize;
|
|
3483
|
+
}
|
|
3484
|
+
if (options.thumbColor) {
|
|
3485
|
+
this.thumbColor = options.thumbColor;
|
|
3486
|
+
}
|
|
3487
|
+
if (options.min !== void 0) {
|
|
3488
|
+
this.min = options.min;
|
|
3489
|
+
}
|
|
3490
|
+
if (options.max !== void 0) {
|
|
3491
|
+
this.max = options.max;
|
|
3492
|
+
}
|
|
3493
|
+
if (options.value !== void 0) {
|
|
3494
|
+
this.value = options.value;
|
|
3495
|
+
}
|
|
3496
|
+
this.saveNodeNewEvent();
|
|
3497
|
+
}
|
|
3498
|
+
get thumbShape() {
|
|
3499
|
+
if (this._thumbShape === void 0) {
|
|
3500
|
+
throw new Error("thumbShape is not defined.");
|
|
3501
|
+
}
|
|
3502
|
+
return this._thumbShape;
|
|
3503
|
+
}
|
|
3504
|
+
set thumbShape(value) {
|
|
3505
|
+
this._thumbShape = value;
|
|
3506
|
+
}
|
|
3507
|
+
get completeNodeOptions() {
|
|
3508
|
+
return {
|
|
3509
|
+
...this.options,
|
|
3510
|
+
...this.getNodeOptions(),
|
|
3511
|
+
...this.getDrawableOptions(),
|
|
3512
|
+
...this.originalOptions
|
|
3513
|
+
};
|
|
3514
|
+
}
|
|
3515
|
+
initialize() {
|
|
3516
|
+
this.removeAllChildren();
|
|
3517
|
+
const trackShape = new Shape({
|
|
3518
|
+
rect: {
|
|
3519
|
+
width: this.trackSize.width,
|
|
3520
|
+
height: this.trackSize.height
|
|
3521
|
+
},
|
|
3522
|
+
cornerRadius: 8,
|
|
3523
|
+
fillColor: this.trackColor
|
|
3524
|
+
});
|
|
3525
|
+
this.addChild(trackShape);
|
|
3526
|
+
this.thumbShape = new Shape({
|
|
3527
|
+
rect: {
|
|
3528
|
+
width: this.thumbSize.width,
|
|
3529
|
+
height: this.thumbSize.height
|
|
3530
|
+
},
|
|
3531
|
+
cornerRadius: 8,
|
|
3532
|
+
fillColor: this.thumbColor,
|
|
3533
|
+
isUserInteractionEnabled: true,
|
|
3534
|
+
draggable: true,
|
|
3535
|
+
zPosition: 1,
|
|
3536
|
+
position: {
|
|
3537
|
+
x: this.value * this.trackSize.width / (this.max - this.min) - this.trackSize.width / 2,
|
|
3538
|
+
y: 0
|
|
3539
|
+
}
|
|
3540
|
+
});
|
|
3541
|
+
trackShape.addChild(this.thumbShape);
|
|
3542
|
+
const trackZoneShape = new Shape({
|
|
3543
|
+
rect: {
|
|
3544
|
+
width: this.trackSize.width,
|
|
3545
|
+
height: this.thumbSize.height
|
|
3546
|
+
},
|
|
3547
|
+
// during development, it is useful to make this visible
|
|
3548
|
+
// fillColor: WebColors.Red,
|
|
3549
|
+
// alpha: 0.05,
|
|
3550
|
+
alpha: 0,
|
|
3551
|
+
isUserInteractionEnabled: true,
|
|
3552
|
+
zPosition: 0
|
|
3553
|
+
});
|
|
3554
|
+
trackShape.addChild(trackZoneShape);
|
|
3555
|
+
trackZoneShape.onTapDown((e) => {
|
|
3556
|
+
this.thumbShape.position.x = e.point.x - trackShape.size.width / 2;
|
|
3557
|
+
this.updateThumbLabel();
|
|
3558
|
+
});
|
|
3559
|
+
const thumbZoneShape = new Shape({
|
|
3560
|
+
rect: {
|
|
3561
|
+
width: this.trackSize.width,
|
|
3562
|
+
/**
|
|
3563
|
+
* The thumbZoneShape is twice the height of the parent scene in case
|
|
3564
|
+
* the slider is placed at the bottom or top of the screen. This
|
|
3565
|
+
* ensures that thumbZoneShape is large enough to capture pointer
|
|
3566
|
+
* events that are outside the bounds of the slider and on the parent
|
|
3567
|
+
* scene.
|
|
3568
|
+
*/
|
|
3569
|
+
height: this.parentSceneAsNode.size.height * 2
|
|
3570
|
+
},
|
|
3571
|
+
// during development, it is useful to make this visible
|
|
3572
|
+
// fillColor: WebColors.Black,
|
|
3573
|
+
// alpha: 0.008,
|
|
3574
|
+
alpha: 0,
|
|
3575
|
+
isUserInteractionEnabled: true
|
|
3576
|
+
});
|
|
3577
|
+
this.addChild(thumbZoneShape);
|
|
3578
|
+
thumbZoneShape.onPointerMove(() => {
|
|
3579
|
+
this.thumbShape.draggable = true;
|
|
3580
|
+
});
|
|
3581
|
+
thumbZoneShape.onPointerLeave(() => {
|
|
3582
|
+
this.thumbShape.draggable = false;
|
|
3583
|
+
});
|
|
3584
|
+
this.thumbShape.onTapDown((e) => {
|
|
3585
|
+
e.handled = true;
|
|
3586
|
+
if (e.point.y !== 0) {
|
|
3587
|
+
this.thumbShape.position.y = 0;
|
|
3588
|
+
}
|
|
3589
|
+
if (e.point.x < -this.trackSize.width / 2) {
|
|
3590
|
+
this.thumbShape.position.x = -this.trackSize.width / 2;
|
|
3591
|
+
}
|
|
3592
|
+
if (e.point.x > this.trackSize.width / 2) {
|
|
3593
|
+
this.thumbShape.position.x = this.trackSize.width / 2;
|
|
3594
|
+
}
|
|
3595
|
+
this.updateThumbLabel();
|
|
3596
|
+
});
|
|
3597
|
+
this.thumbShape.onDrag((e) => {
|
|
3598
|
+
if (e.position.y !== 0) {
|
|
3599
|
+
this.thumbShape.position.y = 0;
|
|
3600
|
+
}
|
|
3601
|
+
if (e.position.x < -this.trackSize.width / 2) {
|
|
3602
|
+
this.thumbShape.position.x = -this.trackSize.width / 2;
|
|
3603
|
+
}
|
|
3604
|
+
if (e.position.x > this.trackSize.width / 2) {
|
|
3605
|
+
this.thumbShape.position.x = this.trackSize.width / 2;
|
|
3606
|
+
}
|
|
3607
|
+
this.updateThumbLabel();
|
|
3608
|
+
});
|
|
3609
|
+
this.thumbShape.onDragEnd(() => {
|
|
3610
|
+
const value = Math.round(
|
|
3611
|
+
(this.thumbShape.position.x + this.trackSize.width / 2) / this.trackSize.width * (this.max - this.min)
|
|
3612
|
+
);
|
|
3613
|
+
this.thumbShape.position.x = value / (this.max - this.min) * this.trackSize.width - this.trackSize.width / 2;
|
|
3614
|
+
this.updateThumbLabel();
|
|
3615
|
+
});
|
|
3616
|
+
this.needsInitialization = false;
|
|
3617
|
+
}
|
|
3618
|
+
updateThumbLabel() {
|
|
3619
|
+
const value = (this.thumbShape.position.x + this.trackSize.width / 2) / this.trackSize.width * (this.max - this.min);
|
|
3620
|
+
if (!this.thumbLabel) {
|
|
3621
|
+
this.thumbLabel = new Label({
|
|
3622
|
+
text: value.toString()
|
|
3623
|
+
});
|
|
3624
|
+
this.addChild(this.thumbLabel);
|
|
3625
|
+
}
|
|
3626
|
+
this.thumbLabel.text = Math.round(value).toString();
|
|
3627
|
+
this.thumbLabel.position = {
|
|
3628
|
+
x: this.thumbShape.position.x,
|
|
3629
|
+
y: this.thumbShape.position.y - 30
|
|
3630
|
+
};
|
|
3631
|
+
if (this.thumbLabel) {
|
|
3632
|
+
this.thumbLabel.position = {
|
|
3633
|
+
x: this.thumbShape.position.x,
|
|
3634
|
+
y: this.thumbShape.position.y - 30
|
|
3635
|
+
};
|
|
3636
|
+
}
|
|
3637
|
+
const sliderEvent = {
|
|
3638
|
+
type: M2EventType.Composite,
|
|
3639
|
+
compositeType: "Slider",
|
|
3640
|
+
compositeEventType: "SliderValueChanged",
|
|
3641
|
+
target: this,
|
|
3642
|
+
value,
|
|
3643
|
+
...M2c2KitHelpers.createTimestamps()
|
|
3644
|
+
};
|
|
3645
|
+
this.handleCompositeEvent(sliderEvent);
|
|
3646
|
+
this.saveEvent(sliderEvent);
|
|
3647
|
+
if (this.eventListeners.length > 0) {
|
|
3648
|
+
this.eventListeners.filter(
|
|
3649
|
+
(listener) => listener.type === M2EventType.Composite && listener.compositeType === this.compositeType && listener.compositeEventType === "SliderValueChanged"
|
|
3650
|
+
).forEach((listener) => {
|
|
3651
|
+
listener.callback(sliderEvent);
|
|
3652
|
+
});
|
|
3653
|
+
}
|
|
3654
|
+
}
|
|
3655
|
+
/**
|
|
3656
|
+
* Executes a callback when the slider value changes.
|
|
3657
|
+
*
|
|
3658
|
+
* @param callback - function to execute
|
|
3659
|
+
* @param options
|
|
3660
|
+
*/
|
|
3661
|
+
onValueChanged(callback, options) {
|
|
3662
|
+
const eventListener = {
|
|
3663
|
+
type: M2EventType.Composite,
|
|
3664
|
+
compositeEventType: "SliderValueChanged",
|
|
3665
|
+
compositeType: this.compositeType,
|
|
3666
|
+
nodeUuid: this.uuid,
|
|
3667
|
+
callback
|
|
3668
|
+
};
|
|
3669
|
+
this.addSliderEventListener(eventListener, options);
|
|
3670
|
+
}
|
|
3671
|
+
addSliderEventListener(eventListener, options) {
|
|
3672
|
+
if (options?.replaceExisting) {
|
|
3673
|
+
this.eventListeners = this.eventListeners.filter(
|
|
3674
|
+
(listener) => !(listener.nodeUuid === eventListener.nodeUuid && listener.type === eventListener.type && listener.compositeType === eventListener.compositeType)
|
|
3675
|
+
);
|
|
3676
|
+
}
|
|
3677
|
+
this.eventListeners.push(eventListener);
|
|
3678
|
+
}
|
|
3679
|
+
get trackSize() {
|
|
3680
|
+
return this._trackSize;
|
|
3681
|
+
}
|
|
3682
|
+
set trackSize(value) {
|
|
3683
|
+
this._trackSize = value;
|
|
3684
|
+
}
|
|
3685
|
+
get trackColor() {
|
|
3686
|
+
return this._trackColor;
|
|
3687
|
+
}
|
|
3688
|
+
set trackColor(value) {
|
|
3689
|
+
this._trackColor = value;
|
|
3690
|
+
}
|
|
3691
|
+
get thumbSize() {
|
|
3692
|
+
return this._thumbSize;
|
|
3693
|
+
}
|
|
3694
|
+
set thumbSize(value) {
|
|
3695
|
+
this._thumbSize = value;
|
|
3696
|
+
}
|
|
3697
|
+
get thumbColor() {
|
|
3698
|
+
return this._thumbColor;
|
|
3699
|
+
}
|
|
3700
|
+
set thumbColor(value) {
|
|
3701
|
+
this._thumbColor = value;
|
|
3702
|
+
}
|
|
3703
|
+
get value() {
|
|
3704
|
+
return this._value;
|
|
3705
|
+
}
|
|
3706
|
+
set value(value) {
|
|
3707
|
+
this._value = value;
|
|
3708
|
+
}
|
|
3709
|
+
get min() {
|
|
3710
|
+
return this._min;
|
|
3711
|
+
}
|
|
3712
|
+
set min(value) {
|
|
3713
|
+
this._min = value;
|
|
3714
|
+
}
|
|
3715
|
+
get max() {
|
|
3716
|
+
return this._max;
|
|
3717
|
+
}
|
|
3718
|
+
set max(value) {
|
|
3719
|
+
this._max = value;
|
|
3720
|
+
}
|
|
3721
|
+
/**
|
|
3722
|
+
* Duplicates a node using deep copy.
|
|
3723
|
+
*
|
|
3724
|
+
* @remarks This is a deep recursive clone (node and children).
|
|
3725
|
+
* The uuid property of all duplicated nodes will be newly created,
|
|
3726
|
+
* because uuid must be unique.
|
|
3727
|
+
*
|
|
3728
|
+
* @param newName - optional name of the new, duplicated node. If not
|
|
3729
|
+
* provided, name will be the new uuid
|
|
3730
|
+
*/
|
|
3731
|
+
duplicate(newName) {
|
|
3732
|
+
throw new Error(`Method not implemented. ${newName}`);
|
|
3733
|
+
}
|
|
3734
|
+
update() {
|
|
3735
|
+
super.update();
|
|
3736
|
+
}
|
|
3737
|
+
draw(canvas) {
|
|
3738
|
+
super.drawChildren(canvas);
|
|
3739
|
+
}
|
|
3740
|
+
warmup(canvas) {
|
|
3741
|
+
this.initialize();
|
|
3742
|
+
this.children.filter((child) => child.isDrawable).forEach((child) => {
|
|
3743
|
+
child.warmup(canvas);
|
|
3744
|
+
});
|
|
3745
|
+
}
|
|
3746
|
+
}
|
|
3747
|
+
|
|
3748
|
+
console.log("\u26AA @m2c2kit/addons version 0.3.27 (622f7241)");
|
|
3457
3749
|
|
|
3458
|
-
export { Button, CountdownScene, CountdownTimer, Dialog, DialogResult, DrawPad, DrawPadEventType, DrawPadItemEventType, Grid, Instructions, LocalePicker, VirtualKeyboard };
|
|
3750
|
+
export { Button, CountdownScene, CountdownTimer, Dialog, DialogResult, DrawPad, DrawPadEventType, DrawPadItemEventType, Grid, Instructions, LocalePicker, Slider, VirtualKeyboard };
|
|
3459
3751
|
//# sourceMappingURL=index.js.map
|