@cntrl-site/sdk-nextjs 1.8.40-alpha.0 → 1.8.40
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/lib/components/items/FileItem/ImageItem.js +22 -46
- package/lib/components/items/FileItem/VideoItem.js +21 -45
- package/lib/components/items/FileItem/useFileItem.js +5 -12
- package/lib/components/items/RectangleItem/RectangleItem.js +22 -78
- package/lib/components/items/RectangleItem/useRectangleItem.js +8 -15
- package/lib/interactions/CSSPropertyNameMap.js +18 -18
- package/lib/utils/Animator/Animator.js +19 -171
- package/package.json +2 -2
- package/src/components/items/CodeEmbedItem/CodeEmbedItem.tsx +1 -1
- package/src/components/items/ComponentItem/ComponentItem.tsx +1 -1
- package/src/components/items/CompoundItem/CompoundChild.tsx +2 -2
- package/src/components/items/CompoundItem/CompoundItem.tsx +1 -1
- package/src/components/items/CustomItem/CustomItem.tsx +1 -1
- package/src/components/items/EmbedVideoItem/VimeoEmbed.tsx +2 -2
- package/src/components/items/EmbedVideoItem/YoutubeEmbed.tsx +2 -2
- package/src/components/items/FileItem/ImageItem.tsx +11 -60
- package/src/components/items/FileItem/VideoItem.tsx +12 -61
- package/src/components/items/FileItem/useFileItem.ts +6 -14
- package/src/components/items/GroupItem/GroupItem.tsx +1 -1
- package/src/components/items/Item.tsx +2 -2
- package/src/components/items/RectangleItem/RectangleItem.tsx +24 -126
- package/src/components/items/RectangleItem/useRectangleItem.ts +10 -17
- package/src/components/items/RichTextItem/RichTextItem.tsx +5 -5
- package/src/interactions/CSSPropertyNameMap.ts +19 -18
- package/src/interactions/ItemInteractionCtrl.ts +4 -4
- package/src/interactions/types.ts +7 -7
- package/src/provider/InteractionsContext.old.tsx +66 -0
- package/src/provider/InteractionsContext.test.tsx +97 -0
- package/src/utils/Animator/Animator.ts +27 -227
- package/src/utils/getStyleFromItemStateAndParams.ts +2 -2
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/modules.xml +0 -8
- package/.idea/sdk-nextjs.iml +0 -12
- package/.idea/vcs.xml +0 -6
- package/lib/utils/areFillsVisible/areFillsVisible.js +0 -23
- package/lib/utils/getFill.js +0 -43
- package/src/utils/areFillsVisible/areFillsVisible.test.ts +0 -63
- package/src/utils/areFillsVisible/areFillsVisible.ts +0 -37
- package/src/utils/getFill.ts +0 -46
|
@@ -2,7 +2,6 @@ import { KeyframeType, KeyframeValueMap } from '@cntrl-site/sdk';
|
|
|
2
2
|
import { CntrlColor } from '@cntrl-site/color';
|
|
3
3
|
import { binSearchInsertAt, createInsert } from '../binSearchInsertAt';
|
|
4
4
|
import { rangeMap } from '../rangeMap';
|
|
5
|
-
import { FillLayer } from '@cntrl-site/sdk/dist/types/article/Item';
|
|
6
5
|
|
|
7
6
|
export interface AnimationData<T extends KeyframeType> {
|
|
8
7
|
position: number;
|
|
@@ -19,12 +18,6 @@ export type KeyframesMap = {
|
|
|
19
18
|
[T in KeyframeType]: AnimationData<T>[];
|
|
20
19
|
};
|
|
21
20
|
|
|
22
|
-
type ColorPoint = {
|
|
23
|
-
id: string;
|
|
24
|
-
value: string;
|
|
25
|
-
position: number;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
21
|
const compare = (lhs: { position: number }, rhs: { position: number }) => lhs.position - rhs.position;
|
|
29
22
|
const insertBin = createInsert(binSearchInsertAt, compare);
|
|
30
23
|
|
|
@@ -100,32 +93,40 @@ export class Animator {
|
|
|
100
93
|
};
|
|
101
94
|
}
|
|
102
95
|
|
|
103
|
-
|
|
104
|
-
values: KeyframeValueMap[KeyframeType.
|
|
96
|
+
getColor(
|
|
97
|
+
values: KeyframeValueMap[KeyframeType.Color],
|
|
105
98
|
pos: number
|
|
106
|
-
):
|
|
107
|
-
const keyframes = this.keyframesMap[KeyframeType.
|
|
99
|
+
): KeyframeValueMap[KeyframeType.Color] {
|
|
100
|
+
const keyframes = this.keyframesMap[KeyframeType.Color];
|
|
108
101
|
if (!keyframes || !keyframes.length) return values;
|
|
109
102
|
if (keyframes.length === 1) {
|
|
110
103
|
const [keyframe] = keyframes;
|
|
111
|
-
return
|
|
104
|
+
return {
|
|
105
|
+
color: keyframe.value.color
|
|
106
|
+
};
|
|
112
107
|
}
|
|
113
|
-
const { start, end } = this.getStartEnd<KeyframeType.
|
|
114
|
-
return
|
|
108
|
+
const { start, end } = this.getStartEnd<KeyframeType.Color>(pos, keyframes);
|
|
109
|
+
return {
|
|
110
|
+
color: this.getRangeColor(start, end, pos)
|
|
111
|
+
};
|
|
115
112
|
}
|
|
116
113
|
|
|
117
|
-
|
|
118
|
-
values: KeyframeValueMap[KeyframeType.
|
|
114
|
+
getBorderColor(
|
|
115
|
+
values: KeyframeValueMap[KeyframeType.BorderColor],
|
|
119
116
|
pos: number
|
|
120
|
-
):
|
|
121
|
-
const keyframes = this.keyframesMap[KeyframeType.
|
|
117
|
+
): KeyframeValueMap[KeyframeType.BorderColor] {
|
|
118
|
+
const keyframes = this.keyframesMap[KeyframeType.BorderColor];
|
|
122
119
|
if (!keyframes || !keyframes.length) return values;
|
|
123
120
|
if (keyframes.length === 1) {
|
|
124
121
|
const [keyframe] = keyframes;
|
|
125
|
-
return
|
|
122
|
+
return {
|
|
123
|
+
color: keyframe.value.color
|
|
124
|
+
};
|
|
126
125
|
}
|
|
127
|
-
const { start, end } = this.getStartEnd<KeyframeType.
|
|
128
|
-
return
|
|
126
|
+
const { start, end } = this.getStartEnd<KeyframeType.BorderColor>(pos, keyframes);
|
|
127
|
+
return {
|
|
128
|
+
color: this.getRangeColor(start, end, pos)
|
|
129
|
+
};
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
getRadius(
|
|
@@ -337,8 +338,8 @@ export class Animator {
|
|
|
337
338
|
}
|
|
338
339
|
|
|
339
340
|
private getRangeColor(
|
|
340
|
-
start: AnimationData<KeyframeType.TextColor>,
|
|
341
|
-
end: AnimationData<KeyframeType.TextColor>,
|
|
341
|
+
start: AnimationData<KeyframeType.Color | KeyframeType.BorderColor | KeyframeType.TextColor>,
|
|
342
|
+
end: AnimationData<KeyframeType.Color | KeyframeType.BorderColor | KeyframeType.TextColor>,
|
|
342
343
|
position: number
|
|
343
344
|
): string {
|
|
344
345
|
const rangeAmount = rangeMap(position, start.position, end.position, 0, 1, true);
|
|
@@ -347,207 +348,6 @@ export class Animator {
|
|
|
347
348
|
const mixedColor = startColor.mix(endColor, rangeAmount);
|
|
348
349
|
return mixedColor.fmt('oklch');
|
|
349
350
|
}
|
|
350
|
-
|
|
351
|
-
private getRangeGradient(
|
|
352
|
-
start: AnimationData<KeyframeType.Fill | KeyframeType.BorderFill>,
|
|
353
|
-
end: AnimationData<KeyframeType.Fill | KeyframeType.BorderFill>,
|
|
354
|
-
position: number
|
|
355
|
-
): FillLayer[] {
|
|
356
|
-
const rangeAmount = rangeMap(position, start.position, end.position, 0, 1, true);
|
|
357
|
-
const allLayerIds = new Set([
|
|
358
|
-
...start.value.map(layer => layer.id),
|
|
359
|
-
...end.value.map(layer => layer.id)
|
|
360
|
-
]);
|
|
361
|
-
const result: FillLayer[] = [];
|
|
362
|
-
for (const layerId of allLayerIds) {
|
|
363
|
-
const startLayers = start.value.find(layer => layer.id === layerId);
|
|
364
|
-
const endLayers = end.value.find(layer => layer.id === layerId);
|
|
365
|
-
const startLayersArray = Array.isArray(startLayers) ? startLayers : startLayers ? [startLayers] : [];
|
|
366
|
-
const endLayersArray = Array.isArray(endLayers) ? endLayers : endLayers ? [endLayers] : [];
|
|
367
|
-
if (startLayersArray.length > 0 && endLayersArray.length === 0) {
|
|
368
|
-
result.push(...startLayersArray);
|
|
369
|
-
continue;
|
|
370
|
-
}
|
|
371
|
-
if (startLayersArray.length === 0 && endLayersArray.length > 0) {
|
|
372
|
-
result.push(...endLayersArray);
|
|
373
|
-
continue;
|
|
374
|
-
}
|
|
375
|
-
if (startLayersArray.length > 0 && endLayersArray.length > 0) {
|
|
376
|
-
result.push(...this.interpolateFillLayerArray(startLayersArray, endLayersArray, rangeAmount));
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
return result;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
private interpolateFillLayerArray(startLayers: FillLayer[], endLayers: FillLayer[], rangeAmount: number): FillLayer[] {
|
|
384
|
-
const startLayerMap = new Map(startLayers.map(layer => [layer.id, layer]));
|
|
385
|
-
const endLayerMap = new Map(endLayers.map(layer => [layer.id, layer]));
|
|
386
|
-
const allLayerIds = new Set([
|
|
387
|
-
...startLayers.map(layer => layer.id),
|
|
388
|
-
...endLayers.map(layer => layer.id)
|
|
389
|
-
]);
|
|
390
|
-
|
|
391
|
-
const interpolatedLayers: FillLayer[] = [];
|
|
392
|
-
|
|
393
|
-
for (const layerId of allLayerIds) {
|
|
394
|
-
const startLayer = startLayerMap.get(layerId);
|
|
395
|
-
const endLayer = endLayerMap.get(layerId);
|
|
396
|
-
if (startLayer && !endLayer) {
|
|
397
|
-
interpolatedLayers.push(startLayer);
|
|
398
|
-
continue;
|
|
399
|
-
}
|
|
400
|
-
if (!startLayer && endLayer) {
|
|
401
|
-
interpolatedLayers.push(endLayer);
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
if (startLayer && endLayer) {
|
|
405
|
-
interpolatedLayers.push(this.interpolateFillLayer(startLayer, endLayer, rangeAmount));
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
const result: FillLayer[] = [];
|
|
409
|
-
for (const startLayer of startLayers) {
|
|
410
|
-
const interpolatedLayer = interpolatedLayers.find(layer => layer.id === startLayer.id);
|
|
411
|
-
if (interpolatedLayer) {
|
|
412
|
-
result.push(interpolatedLayer);
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
for (const endLayer of endLayers) {
|
|
416
|
-
if (!startLayerMap.has(endLayer.id)) {
|
|
417
|
-
const interpolatedLayer = interpolatedLayers.find(layer => layer.id === endLayer.id);
|
|
418
|
-
if (interpolatedLayer) {
|
|
419
|
-
result.push(interpolatedLayer);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
return result;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
private interpolateFillLayer(startLayer: FillLayer, endLayer: FillLayer, rangeAmount: number): FillLayer {
|
|
428
|
-
if (startLayer.type !== endLayer.type) {
|
|
429
|
-
return startLayer;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
switch (startLayer.type) {
|
|
433
|
-
case 'solid': {
|
|
434
|
-
const endSolidLayer = endLayer as typeof startLayer;
|
|
435
|
-
const startColor = CntrlColor.parse(startLayer.value);
|
|
436
|
-
const endColor = CntrlColor.parse(endSolidLayer.value);
|
|
437
|
-
const mixedColor = startColor.mix(endColor, rangeAmount);
|
|
438
|
-
return {
|
|
439
|
-
...startLayer,
|
|
440
|
-
value: mixedColor.fmt('oklch')
|
|
441
|
-
};
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
case 'linear-gradient': {
|
|
445
|
-
const endLinearLayer = endLayer as typeof startLayer;
|
|
446
|
-
const interpolatedColors = this.interpolateColorStops(startLayer.colors, endLinearLayer.colors, rangeAmount);
|
|
447
|
-
const angle = startLayer.angle + (endLinearLayer.angle - startLayer.angle) * rangeAmount;
|
|
448
|
-
const startPoint: [number, number] = [
|
|
449
|
-
startLayer.start[0] + (endLinearLayer.start[0] - startLayer.start[0]) * rangeAmount,
|
|
450
|
-
startLayer.start[1] + (endLinearLayer.start[1] - startLayer.start[1]) * rangeAmount
|
|
451
|
-
];
|
|
452
|
-
const endPoint: [number, number] = [
|
|
453
|
-
startLayer.end[0] + (endLinearLayer.end[0] - startLayer.end[0]) * rangeAmount,
|
|
454
|
-
startLayer.end[1] + (endLinearLayer.end[1] - startLayer.end[1]) * rangeAmount
|
|
455
|
-
];
|
|
456
|
-
return {
|
|
457
|
-
...startLayer,
|
|
458
|
-
colors: interpolatedColors,
|
|
459
|
-
angle,
|
|
460
|
-
start: startPoint,
|
|
461
|
-
end: endPoint
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
case 'radial-gradient': {
|
|
466
|
-
const endRadialLayer = endLayer as typeof startLayer;
|
|
467
|
-
const interpolatedColors = this.interpolateColorStops(startLayer.colors, endRadialLayer.colors, rangeAmount);
|
|
468
|
-
const angle = startLayer.angle + (endRadialLayer.angle - startLayer.angle) * rangeAmount;
|
|
469
|
-
const center: [number, number] = [
|
|
470
|
-
startLayer.center[0] + (endRadialLayer.center[0] - startLayer.center[0]) * rangeAmount,
|
|
471
|
-
startLayer.center[1] + (endRadialLayer.center[1] - startLayer.center[1]) * rangeAmount
|
|
472
|
-
];
|
|
473
|
-
const diameter = startLayer.diameter + (endRadialLayer.diameter - startLayer.diameter) * rangeAmount;
|
|
474
|
-
return {
|
|
475
|
-
...startLayer,
|
|
476
|
-
colors: interpolatedColors,
|
|
477
|
-
angle,
|
|
478
|
-
center,
|
|
479
|
-
diameter
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
case 'conic-gradient': {
|
|
484
|
-
const endConicLayer = endLayer as typeof startLayer;
|
|
485
|
-
const interpolatedColors = this.interpolateColorStops(startLayer.colors, endConicLayer.colors, rangeAmount);
|
|
486
|
-
const angle = startLayer.angle + (endConicLayer.angle - startLayer.angle) * rangeAmount;
|
|
487
|
-
const center: [number, number] = [
|
|
488
|
-
startLayer.center[0] + (endConicLayer.center[0] - startLayer.center[0]) * rangeAmount,
|
|
489
|
-
startLayer.center[1] + (endConicLayer.center[1] - startLayer.center[1]) * rangeAmount
|
|
490
|
-
];
|
|
491
|
-
return {
|
|
492
|
-
...startLayer,
|
|
493
|
-
colors: interpolatedColors,
|
|
494
|
-
angle,
|
|
495
|
-
center
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
case 'image': {
|
|
500
|
-
const endImageLayer = endLayer as typeof startLayer;
|
|
501
|
-
const opacity = startLayer.opacity + (endImageLayer.opacity - startLayer.opacity) * rangeAmount;
|
|
502
|
-
const backgroundSize = startLayer.backgroundSize + (endImageLayer.backgroundSize - startLayer.backgroundSize) * rangeAmount;
|
|
503
|
-
return {
|
|
504
|
-
...startLayer,
|
|
505
|
-
opacity,
|
|
506
|
-
backgroundSize
|
|
507
|
-
};
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
default:
|
|
511
|
-
return startLayer;
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
private interpolateColorStops(startColors: ColorPoint[], endColors: ColorPoint[], rangeAmount: number): ColorPoint[] {
|
|
516
|
-
const startColorMap = new Map(startColors.map(stop => [stop.id, stop]));
|
|
517
|
-
const endColorMap = new Map(endColors.map(stop => [stop.id, stop]));
|
|
518
|
-
const allStopIds = new Set([
|
|
519
|
-
...startColors.map(stop => stop.id),
|
|
520
|
-
...endColors.map(stop => stop.id)
|
|
521
|
-
]);
|
|
522
|
-
|
|
523
|
-
const interpolatedStops: ColorPoint[] = [];
|
|
524
|
-
|
|
525
|
-
for (const stopId of allStopIds) {
|
|
526
|
-
const startStop = startColorMap.get(stopId);
|
|
527
|
-
const endStop = endColorMap.get(stopId);
|
|
528
|
-
if (startStop && !endStop) {
|
|
529
|
-
interpolatedStops.push(startStop);
|
|
530
|
-
continue;
|
|
531
|
-
}
|
|
532
|
-
if (!startStop && endStop) {
|
|
533
|
-
interpolatedStops.push(endStop);
|
|
534
|
-
continue;
|
|
535
|
-
}
|
|
536
|
-
if (startStop && endStop) {
|
|
537
|
-
const startColor = CntrlColor.parse(startStop.value);
|
|
538
|
-
const endColor = CntrlColor.parse(endStop.value);
|
|
539
|
-
const mixedColor = startColor.mix(endColor, rangeAmount);
|
|
540
|
-
const position = startStop.position + (endStop.position - startStop.position) * rangeAmount;
|
|
541
|
-
|
|
542
|
-
interpolatedStops.push({
|
|
543
|
-
id: stopId,
|
|
544
|
-
value: mixedColor.fmt('oklch'),
|
|
545
|
-
position
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
return interpolatedStops.sort((a, b) => a.position - b.position);
|
|
550
|
-
}
|
|
551
351
|
}
|
|
552
352
|
|
|
553
353
|
function createKeyframesMap(): KeyframesMap {
|
|
@@ -556,8 +356,9 @@ function createKeyframesMap(): KeyframesMap {
|
|
|
556
356
|
[KeyframeType.Position]: [],
|
|
557
357
|
[KeyframeType.BorderWidth]: [],
|
|
558
358
|
[KeyframeType.BorderRadius]: [],
|
|
359
|
+
[KeyframeType.Color]: [],
|
|
559
360
|
[KeyframeType.Rotation]: [],
|
|
560
|
-
[KeyframeType.
|
|
361
|
+
[KeyframeType.BorderColor]: [],
|
|
561
362
|
[KeyframeType.Opacity]: [],
|
|
562
363
|
[KeyframeType.Scale]: [],
|
|
563
364
|
[KeyframeType.Blur]: [],
|
|
@@ -565,7 +366,6 @@ function createKeyframesMap(): KeyframesMap {
|
|
|
565
366
|
[KeyframeType.LetterSpacing]: [],
|
|
566
367
|
[KeyframeType.WordSpacing]: [],
|
|
567
368
|
[KeyframeType.TextColor]: [],
|
|
568
|
-
[KeyframeType.FXParams]: []
|
|
569
|
-
[KeyframeType.Fill]: []
|
|
369
|
+
[KeyframeType.FXParams]: []
|
|
570
370
|
};
|
|
571
371
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function getStyleFromItemStateAndParams<T>(
|
|
2
|
-
stateValue:
|
|
1
|
+
export function getStyleFromItemStateAndParams<T extends string | number>(
|
|
2
|
+
stateValue: string | number | undefined,
|
|
3
3
|
paramsValue: T | undefined
|
|
4
4
|
): T | undefined {
|
|
5
5
|
return (stateValue as T) !== undefined
|
package/.idea/modules.xml
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ProjectModuleManager">
|
|
4
|
-
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/sdk-nextjs.iml" filepath="$PROJECT_DIR$/.idea/sdk-nextjs.iml" />
|
|
6
|
-
</modules>
|
|
7
|
-
</component>
|
|
8
|
-
</project>
|
package/.idea/sdk-nextjs.iml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="WEB_MODULE" version="4">
|
|
3
|
-
<component name="NewModuleRootManager">
|
|
4
|
-
<content url="file://$MODULE_DIR$">
|
|
5
|
-
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
|
6
|
-
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
|
7
|
-
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
|
8
|
-
</content>
|
|
9
|
-
<orderEntry type="inheritedJdk" />
|
|
10
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
11
|
-
</component>
|
|
12
|
-
</module>
|
package/.idea/vcs.xml
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.areFillsVisible = void 0;
|
|
4
|
-
const color_1 = require("@cntrl-site/color");
|
|
5
|
-
function areFillsVisible(fills) {
|
|
6
|
-
return fills.some(fill => {
|
|
7
|
-
switch (fill.type) {
|
|
8
|
-
case 'solid':
|
|
9
|
-
return color_1.CntrlColor.parse(fill.value).getAlpha() !== 0;
|
|
10
|
-
case 'linear-gradient':
|
|
11
|
-
return fill.colors.some(color => color_1.CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
12
|
-
case 'radial-gradient':
|
|
13
|
-
return fill.colors.some(color => color_1.CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
14
|
-
case 'conic-gradient':
|
|
15
|
-
return fill.colors.some(color => color_1.CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
16
|
-
case 'image':
|
|
17
|
-
return fill.opacity !== 0;
|
|
18
|
-
default:
|
|
19
|
-
return true;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
exports.areFillsVisible = areFillsVisible;
|
package/lib/utils/getFill.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getFill = void 0;
|
|
4
|
-
function getFill(fill) {
|
|
5
|
-
var _a;
|
|
6
|
-
if (fill.type === 'linear-gradient' && Array.isArray(fill.colors)) {
|
|
7
|
-
return `linear-gradient(${fill.angle}deg, ${fill.colors
|
|
8
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
9
|
-
.join(', ')})`;
|
|
10
|
-
}
|
|
11
|
-
if (fill.type === 'radial-gradient' && Array.isArray(fill.colors)) {
|
|
12
|
-
const center = fill.center
|
|
13
|
-
? `${fill.center[0] * 100}% ${fill.center[1] * 100}%`
|
|
14
|
-
: '50% 50%';
|
|
15
|
-
const diameter = fill.diameter;
|
|
16
|
-
return `radial-gradient(circle ${diameter * 100} at ${center}, ${fill.colors
|
|
17
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
18
|
-
.join(', ')})`;
|
|
19
|
-
}
|
|
20
|
-
if (fill.type === 'conic-gradient' && Array.isArray(fill.colors)) {
|
|
21
|
-
const center = fill.center
|
|
22
|
-
? `${fill.center[0] * 100}% ${fill.center[1] * 100}%`
|
|
23
|
-
: '50% 50%';
|
|
24
|
-
const angle = ((_a = fill.angle) !== null && _a !== void 0 ? _a : 0);
|
|
25
|
-
const hasMultipleStops = fill.colors.length > 1;
|
|
26
|
-
const lastStop = fill.colors[fill.colors.length - 1];
|
|
27
|
-
const shouldAppendWrapStop = hasMultipleStops && typeof lastStop.position === 'number' && lastStop.position < 100;
|
|
28
|
-
const colorsWithWrap = shouldAppendWrapStop
|
|
29
|
-
? [...fill.colors, { value: fill.colors[0].value, position: 100 }]
|
|
30
|
-
: fill.colors;
|
|
31
|
-
return `conic-gradient(from ${angle + 90}deg at ${center}, ${colorsWithWrap
|
|
32
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
33
|
-
.join(', ')})`;
|
|
34
|
-
}
|
|
35
|
-
if (fill.type === 'image' && fill.src) {
|
|
36
|
-
return `url(${fill.src})`;
|
|
37
|
-
}
|
|
38
|
-
if (fill.type === 'solid') {
|
|
39
|
-
return fill.value;
|
|
40
|
-
}
|
|
41
|
-
return 'transparent';
|
|
42
|
-
}
|
|
43
|
-
exports.getFill = getFill;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { areFillsVisible, FillLayer } from './areFillsVisible';
|
|
2
|
-
|
|
3
|
-
const solidFillVisible: FillLayer = {
|
|
4
|
-
type: 'solid',
|
|
5
|
-
value: 'rgba(0, 0, 0, 1)',
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const linearFillVisible: FillLayer = {
|
|
9
|
-
type: 'linear-gradient',
|
|
10
|
-
colors: [{ value: 'rgba(0, 0, 0, 1)' }, { value: 'rgba(255, 255, 255, 1)' }],
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const radialFillVisible: FillLayer = {
|
|
14
|
-
type: 'radial-gradient',
|
|
15
|
-
colors: [{ value: 'rgba(0, 0, 0, 1)' }, { value: 'rgba(255, 255, 255, 1)' }],
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const conicFillVisible: FillLayer = {
|
|
19
|
-
type: 'conic-gradient',
|
|
20
|
-
colors: [{ value: 'rgba(0, 0, 0, 1)' }, { value: 'rgba(255, 255, 255, 1)' }],
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const imageFillVisible: FillLayer = {
|
|
24
|
-
type: 'image',
|
|
25
|
-
opacity: 1,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const solidFillTransparent: FillLayer = {
|
|
29
|
-
type: 'solid',
|
|
30
|
-
value: 'rgba(0, 0, 0, 0)',
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const linearFillTransparent: FillLayer = {
|
|
34
|
-
type: 'linear-gradient',
|
|
35
|
-
colors: [{ value: 'rgba(0, 0, 0, 0)' }, { value: 'rgba(255, 255, 255, 0)' }],
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const radialFillTransparent: FillLayer = {
|
|
39
|
-
type: 'radial-gradient',
|
|
40
|
-
colors: [{ value: 'rgba(0, 0, 0, 0)' }, { value: 'rgba(255, 255, 255, 0)' }],
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const conicFillTransparent: FillLayer = {
|
|
44
|
-
type: 'conic-gradient',
|
|
45
|
-
colors: [{ value: 'rgba(0, 0, 0, 0)' }, { value: 'rgba(255, 255, 255, 0)' }],
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const imageFillTransparent: FillLayer = {
|
|
49
|
-
type: 'image',
|
|
50
|
-
opacity: 0,
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
describe('areFillsVisible', () => {
|
|
54
|
-
it('should return true if the fills are visible', () => {
|
|
55
|
-
expect(areFillsVisible([solidFillVisible, linearFillVisible, radialFillVisible, conicFillVisible, imageFillVisible])).toBe(true);
|
|
56
|
-
});
|
|
57
|
-
it('should return false if the fills are transparent', () => {
|
|
58
|
-
expect(areFillsVisible([solidFillTransparent, linearFillTransparent, radialFillTransparent, conicFillTransparent, imageFillTransparent])).toBe(false);
|
|
59
|
-
});
|
|
60
|
-
it('should return true if some fills are visible and some are transparent', () => {
|
|
61
|
-
expect(areFillsVisible([solidFillVisible, solidFillTransparent, linearFillVisible, linearFillTransparent, radialFillVisible, radialFillTransparent, conicFillVisible, conicFillTransparent, imageFillVisible, imageFillTransparent])).toBe(true);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { CntrlColor } from '@cntrl-site/color';
|
|
2
|
-
|
|
3
|
-
export function areFillsVisible(fills: FillLayer[]) {
|
|
4
|
-
return fills.some(fill => {
|
|
5
|
-
switch (fill.type) {
|
|
6
|
-
case 'solid':
|
|
7
|
-
return CntrlColor.parse(fill.value).getAlpha() !== 0;
|
|
8
|
-
case 'linear-gradient':
|
|
9
|
-
return fill.colors.some(color => CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
10
|
-
case 'radial-gradient':
|
|
11
|
-
return fill.colors.some(color => CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
12
|
-
case 'conic-gradient':
|
|
13
|
-
return fill.colors.some(color => CntrlColor.parse(color.value).getAlpha() !== 0);
|
|
14
|
-
case 'image':
|
|
15
|
-
return fill.opacity !== 0;
|
|
16
|
-
default:
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type FillLayer = {
|
|
23
|
-
type: 'solid';
|
|
24
|
-
value: string;
|
|
25
|
-
} | {
|
|
26
|
-
type: 'linear-gradient';
|
|
27
|
-
colors: { value: string; }[];
|
|
28
|
-
} | {
|
|
29
|
-
type: 'radial-gradient';
|
|
30
|
-
colors: { value: string; }[];
|
|
31
|
-
} | {
|
|
32
|
-
type: 'conic-gradient';
|
|
33
|
-
colors: { value: string; }[];
|
|
34
|
-
} | {
|
|
35
|
-
type: 'image';
|
|
36
|
-
opacity: number;
|
|
37
|
-
}
|
package/src/utils/getFill.ts
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { FillLayer } from '@cntrl-site/sdk/dist/types/article/Item';
|
|
2
|
-
|
|
3
|
-
export function getFill(fill: FillLayer) {
|
|
4
|
-
if (fill.type === 'linear-gradient' && Array.isArray(fill.colors)) {
|
|
5
|
-
return `linear-gradient(${fill.angle}deg, ${fill.colors
|
|
6
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
7
|
-
.join(', ')})`;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
if (fill.type === 'radial-gradient' && Array.isArray(fill.colors)) {
|
|
11
|
-
const center = fill.center
|
|
12
|
-
? `${fill.center[0] * 100}% ${fill.center[1] * 100}%`
|
|
13
|
-
: '50% 50%';
|
|
14
|
-
const diameter = fill.diameter;
|
|
15
|
-
return `radial-gradient(circle ${diameter * 100} at ${center}, ${fill.colors
|
|
16
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
17
|
-
.join(', ')})`;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (fill.type === 'conic-gradient' && Array.isArray(fill.colors)) {
|
|
21
|
-
const center = fill.center
|
|
22
|
-
? `${fill.center[0] * 100}% ${fill.center[1] * 100}%`
|
|
23
|
-
: '50% 50%';
|
|
24
|
-
const angle = (fill.angle ?? 0);
|
|
25
|
-
const hasMultipleStops = fill.colors.length > 1;
|
|
26
|
-
const lastStop = fill.colors[fill.colors.length - 1];
|
|
27
|
-
const shouldAppendWrapStop = hasMultipleStops && typeof lastStop.position === 'number' && lastStop.position < 100;
|
|
28
|
-
const colorsWithWrap = shouldAppendWrapStop
|
|
29
|
-
? [...fill.colors, { value: fill.colors[0].value, position: 100 }]
|
|
30
|
-
: fill.colors;
|
|
31
|
-
|
|
32
|
-
return `conic-gradient(from ${angle + 90}deg at ${center}, ${colorsWithWrap
|
|
33
|
-
.map(c => `${c.value} ${c.position}%`)
|
|
34
|
-
.join(', ')})`;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (fill.type === 'image' && fill.src) {
|
|
38
|
-
return `url(${fill.src})`;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (fill.type === 'solid') {
|
|
42
|
-
return fill.value;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return 'transparent';
|
|
46
|
-
}
|