@routevn/creator-model 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/model.js +85 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@routevn/creator-model",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/model.js CHANGED
@@ -343,6 +343,7 @@ const LAYOUT_TYPE_KEYS = [
343
343
  ];
344
344
  const LAYOUT_ELEMENT_TEXT_STYLE_ALIGN_KEYS = ["left", "center", "right"];
345
345
  const LAYOUT_TEXT_REVEAL_EFFECT_KEYS = ["typewriter", "softWipe", "none"];
346
+ const LAYOUT_ELEMENT_BLUR_KERNEL_SIZE_OPTIONS = [5, 7, 9, 11, 13, 15];
346
347
  const CONTROL_KEYBOARD_KEYS = [
347
348
  "enter",
348
349
  "space",
@@ -3348,6 +3349,56 @@ const validateLayoutElementInteraction = ({
3348
3349
  }
3349
3350
  };
3350
3351
 
3352
+ const validateLayoutElementBlur = ({ blur, path, errorFactory }) => {
3353
+ if (!isPlainObject(blur)) {
3354
+ return invalidFromErrorFactory(
3355
+ errorFactory,
3356
+ `${path} must be an object when provided`,
3357
+ );
3358
+ }
3359
+
3360
+ {
3361
+ const result = validateAllowedKeys({
3362
+ value: blur,
3363
+ allowedKeys: ["x", "y", "quality", "kernelSize", "repeatEdgePixels"],
3364
+ path,
3365
+ errorFactory,
3366
+ });
3367
+ if (result?.valid === false) {
3368
+ return result;
3369
+ }
3370
+ }
3371
+
3372
+ for (const key of ["x", "y", "quality"]) {
3373
+ if (blur[key] !== undefined && !isFiniteNumber(blur[key])) {
3374
+ return invalidFromErrorFactory(
3375
+ errorFactory,
3376
+ `${path}.${key} must be a finite number when provided`,
3377
+ );
3378
+ }
3379
+ }
3380
+
3381
+ if (
3382
+ blur.kernelSize !== undefined &&
3383
+ !LAYOUT_ELEMENT_BLUR_KERNEL_SIZE_OPTIONS.includes(blur.kernelSize)
3384
+ ) {
3385
+ return invalidFromErrorFactory(
3386
+ errorFactory,
3387
+ `${path}.kernelSize must be one of ${LAYOUT_ELEMENT_BLUR_KERNEL_SIZE_OPTIONS.join(", ")} when provided`,
3388
+ );
3389
+ }
3390
+
3391
+ if (
3392
+ blur.repeatEdgePixels !== undefined &&
3393
+ typeof blur.repeatEdgePixels !== "boolean"
3394
+ ) {
3395
+ return invalidFromErrorFactory(
3396
+ errorFactory,
3397
+ `${path}.repeatEdgePixels must be a boolean when provided`,
3398
+ );
3399
+ }
3400
+ };
3401
+
3351
3402
  const validateLayoutElementData = ({
3352
3403
  data,
3353
3404
  path,
@@ -3372,6 +3423,7 @@ const validateLayoutElementData = ({
3372
3423
  "scaleY",
3373
3424
  "rotation",
3374
3425
  "opacity",
3426
+ "blur",
3375
3427
  "fill",
3376
3428
  "border",
3377
3429
  "text",
@@ -3506,6 +3558,26 @@ const validateLayoutElementData = ({
3506
3558
  );
3507
3559
  }
3508
3560
 
3561
+ if (data.blur !== undefined) {
3562
+ {
3563
+ const result = validateLayoutElementBlur({
3564
+ blur: data.blur,
3565
+ path: `${path}.blur`,
3566
+ errorFactory,
3567
+ });
3568
+ if (result?.valid === false) {
3569
+ return result;
3570
+ }
3571
+ }
3572
+
3573
+ if (data.type !== undefined && data.type !== "sprite") {
3574
+ return invalidFromErrorFactory(
3575
+ errorFactory,
3576
+ `${path}.blur can only be provided for sprite elements`,
3577
+ );
3578
+ }
3579
+ }
3580
+
3509
3581
  for (const key of [
3510
3582
  "text",
3511
3583
  "resourceId",
@@ -3947,6 +4019,7 @@ const validateLayoutElementItems = ({ items, path, errorFactory }) => {
3947
4019
  "scaleY",
3948
4020
  "rotation",
3949
4021
  "opacity",
4022
+ "blur",
3950
4023
  "fill",
3951
4024
  "border",
3952
4025
  "text",
@@ -11090,6 +11163,18 @@ const validateVisualElementReferenceTargets = ({
11090
11163
  state,
11091
11164
  errorFactory,
11092
11165
  }) => {
11166
+ if (data.blur !== undefined && data.type !== "sprite") {
11167
+ return invalidFromErrorFactory(
11168
+ errorFactory,
11169
+ `${ownerLabel} element blur can only be provided for sprite elements`,
11170
+ {
11171
+ [ownerIdField]: ownerId,
11172
+ elementId,
11173
+ field: "blur",
11174
+ },
11175
+ );
11176
+ }
11177
+
11093
11178
  if (
11094
11179
  data.type === "spritesheet-animation" ||
11095
11180
  data.resourceId !== undefined ||