@devvit/public-api 0.11.0-next-2024-07-09-907b3322a.0 → 0.11.0-next-2024-07-09-2412ac001.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,108 @@
1
+ import { BlockSizeUnit, BlockStackDirection } from '@devvit/protos';
2
+ // eslint-disable-next-line security/detect-unsafe-regex
3
+ const SIZE_UNIT_REGEX = /^(\d+(?:\.\d+)?)(px|%)?$/;
4
+ export const makeDimensionValue = (size, maxDimension) => {
5
+ if (size == null)
6
+ return undefined;
7
+ const pxValue = stackDimensionToPx(size, maxDimension);
8
+ return pxValue != null ? { value: pxValue, unit: BlockSizeUnit.SIZE_UNIT_PIXELS } : undefined;
9
+ };
10
+ export const calculateMaxDimensions = (props, parentMaxDimensions, stackDirection, childrenCount) => {
11
+ if (!props)
12
+ return parentMaxDimensions;
13
+ const paddingOffset = stackPaddingToPx(props.padding, parentMaxDimensions.fontScale) * 2;
14
+ const borderOffset = stackBorderToPx(props.border, props.borderColor) * 2;
15
+ const gapSize = stackGapToPx(props.gap);
16
+ // Calculate height
17
+ let childMaxHeight = parentMaxDimensions.height;
18
+ const hasHeightDefined = props.height != null || props.minHeight != null || props.maxHeight != null;
19
+ if (hasHeightDefined) {
20
+ childMaxHeight = getMaxForDimension(props.height, props.minHeight, props.maxHeight, parentMaxDimensions.height);
21
+ }
22
+ let heightOffset = paddingOffset + borderOffset;
23
+ if (stackDirection === BlockStackDirection.STACK_VERTICAL && gapSize && childrenCount > 0) {
24
+ heightOffset = heightOffset + gapSize * (childrenCount - 1);
25
+ }
26
+ // Calculate width
27
+ let childMaxWidth = parentMaxDimensions.width;
28
+ const hasWidthDefined = props.width != null || props.minWidth != null || props.maxWidth != null;
29
+ if (hasWidthDefined) {
30
+ childMaxWidth = getMaxForDimension(props.width, props.minWidth, props.maxWidth, parentMaxDimensions.width);
31
+ }
32
+ let widthOffset = paddingOffset + borderOffset;
33
+ if (stackDirection === BlockStackDirection.STACK_HORIZONTAL && gapSize && childrenCount > 0) {
34
+ widthOffset = widthOffset + gapSize * (childrenCount - 1);
35
+ }
36
+ return {
37
+ ...parentMaxDimensions,
38
+ height: childMaxHeight - heightOffset,
39
+ width: childMaxWidth - widthOffset,
40
+ };
41
+ };
42
+ /* As a result of DX-6656, all percent dimension values will be converted to px values. */
43
+ const stackDimensionToPx = (value, maxDimension) => {
44
+ if (value == null)
45
+ return undefined;
46
+ if (typeof value === 'number') {
47
+ return (maxDimension * value) / 100;
48
+ }
49
+ else {
50
+ const parts = value.match(SIZE_UNIT_REGEX);
51
+ if (parts == null)
52
+ return undefined;
53
+ const dimensions = Number.parseFloat(parts[1]);
54
+ if (parts?.at(2) === '%') {
55
+ return (maxDimension * dimensions) / 100;
56
+ }
57
+ return dimensions;
58
+ }
59
+ };
60
+ const stackPaddingToPx = (padding, fontScale = 1 // fontScale is web only and refers to window browser font scaling, default to 1
61
+ ) => {
62
+ switch (padding) {
63
+ case 'xsmall':
64
+ return 4 * fontScale;
65
+ case 'small':
66
+ return 8 * fontScale;
67
+ case 'medium':
68
+ return 16 * fontScale;
69
+ case 'large':
70
+ return 32 * fontScale;
71
+ default:
72
+ return 0;
73
+ }
74
+ };
75
+ const stackGapToPx = (gap) => {
76
+ switch (gap) {
77
+ case 'small':
78
+ return 8;
79
+ case 'medium':
80
+ return 16;
81
+ case 'large':
82
+ return 32;
83
+ }
84
+ return 0;
85
+ };
86
+ const stackBorderToPx = (borderWidth, color) => {
87
+ if (!borderWidth && !color)
88
+ return 0;
89
+ switch (borderWidth) {
90
+ case 'none':
91
+ return 0;
92
+ case 'thin':
93
+ return 1;
94
+ case 'thick':
95
+ return 2;
96
+ default:
97
+ // Default to a thin border when a color was set, but no borderWidth.
98
+ return 1;
99
+ }
100
+ };
101
+ const getMaxForDimension = (value, min, max, maxDimension) => {
102
+ const pxValue = stackDimensionToPx(value, maxDimension) || 0;
103
+ const pxMin = stackDimensionToPx(min, maxDimension) || 0;
104
+ const pxMax = stackDimensionToPx(max, maxDimension) || 0;
105
+ const upperBound = Math.min(pxMax, pxValue);
106
+ const lowerBound = Math.max(pxMin, pxValue);
107
+ return Math.max(upperBound, lowerBound);
108
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformContext.test.d.ts","sourceRoot":"","sources":["../../../../src/devvit/internals/blocks/transformContext.test.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,+BAA+B"}
package/meta.json CHANGED
@@ -11783,6 +11783,11 @@
11783
11783
  ],
11784
11784
  "format": "esm"
11785
11785
  },
11786
+ "../shared-types/dist/dimensions.js": {
11787
+ "bytes": 108,
11788
+ "imports": [],
11789
+ "format": "esm"
11790
+ },
11786
11791
  "src/apis/ui/helpers/getEffectsFromUIClient.ts": {
11787
11792
  "bytes": 368,
11788
11793
  "imports": [],
@@ -11809,8 +11814,19 @@
11809
11814
  ],
11810
11815
  "format": "esm"
11811
11816
  },
11817
+ "src/devvit/internals/blocks/transformContext.ts": {
11818
+ "bytes": 4619,
11819
+ "imports": [
11820
+ {
11821
+ "path": "../protos/dist/index.js",
11822
+ "kind": "import-statement",
11823
+ "original": "@devvit/protos"
11824
+ }
11825
+ ],
11826
+ "format": "esm"
11827
+ },
11812
11828
  "src/devvit/internals/blocks/BlocksTransformer.ts": {
11813
- "bytes": 28076,
11829
+ "bytes": 28949,
11814
11830
  "imports": [
11815
11831
  {
11816
11832
  "path": "../protos/dist/index.js",
@@ -11827,6 +11843,11 @@
11827
11843
  "kind": "import-statement",
11828
11844
  "original": "../helpers/color.js"
11829
11845
  },
11846
+ {
11847
+ "path": "src/devvit/internals/blocks/transformContext.ts",
11848
+ "kind": "import-statement",
11849
+ "original": "./transformContext.js"
11850
+ },
11830
11851
  {
11831
11852
  "path": "<runtime>",
11832
11853
  "kind": "import-statement",
@@ -11836,13 +11857,18 @@
11836
11857
  "format": "esm"
11837
11858
  },
11838
11859
  "src/devvit/internals/blocks/BlocksReconciler.ts": {
11839
- "bytes": 19366,
11860
+ "bytes": 19878,
11840
11861
  "imports": [
11841
11862
  {
11842
11863
  "path": "../protos/dist/index.js",
11843
11864
  "kind": "import-statement",
11844
11865
  "original": "@devvit/protos"
11845
11866
  },
11867
+ {
11868
+ "path": "../shared-types/dist/dimensions.js",
11869
+ "kind": "import-statement",
11870
+ "original": "@devvit/shared-types/dimensions.js"
11871
+ },
11846
11872
  {
11847
11873
  "path": "../shared-types/dist/Header.js",
11848
11874
  "kind": "import-statement",
@@ -12465,13 +12491,18 @@
12465
12491
  "format": "esm"
12466
12492
  },
12467
12493
  "src/devvit/internals/blocks/handler/BlocksHandler.ts": {
12468
- "bytes": 18262,
12494
+ "bytes": 18665,
12469
12495
  "imports": [
12470
12496
  {
12471
12497
  "path": "@devvit/protos",
12472
12498
  "kind": "import-statement",
12473
12499
  "external": true
12474
12500
  },
12501
+ {
12502
+ "path": "../shared-types/dist/dimensions.js",
12503
+ "kind": "import-statement",
12504
+ "original": "@devvit/shared-types/dimensions.js"
12505
+ },
12475
12506
  {
12476
12507
  "path": "../../node_modules/lodash.isequal/index.js",
12477
12508
  "kind": "import-statement",
@@ -14353,6 +14384,9 @@
14353
14384
  "src/devvit/internals/app-settings.ts": {
14354
14385
  "bytesInOutput": 614
14355
14386
  },
14387
+ "../shared-types/dist/dimensions.js": {
14388
+ "bytesInOutput": 98
14389
+ },
14356
14390
  "src/apis/ui/helpers/getEffectsFromUIClient.ts": {
14357
14391
  "bytesInOutput": 69
14358
14392
  },
@@ -14365,11 +14399,14 @@
14365
14399
  "src/devvit/internals/helpers/color.ts": {
14366
14400
  "bytesInOutput": 5194
14367
14401
  },
14402
+ "src/devvit/internals/blocks/transformContext.ts": {
14403
+ "bytesInOutput": 3618
14404
+ },
14368
14405
  "src/devvit/internals/blocks/BlocksTransformer.ts": {
14369
- "bytesInOutput": 22653
14406
+ "bytesInOutput": 23029
14370
14407
  },
14371
14408
  "src/devvit/internals/blocks/BlocksReconciler.ts": {
14372
- "bytesInOutput": 14179
14409
+ "bytesInOutput": 14530
14373
14410
  },
14374
14411
  "src/devvit/internals/custom-post.ts": {
14375
14412
  "bytesInOutput": 697
@@ -14396,7 +14433,7 @@
14396
14433
  "bytesInOutput": 3085
14397
14434
  },
14398
14435
  "src/devvit/internals/blocks/handler/BlocksHandler.ts": {
14399
- "bytesInOutput": 15311
14436
+ "bytesInOutput": 15750
14400
14437
  },
14401
14438
  "../shared-types/dist/useForm.js": {
14402
14439
  "bytesInOutput": 162
@@ -14519,7 +14556,7 @@
14519
14556
  "bytesInOutput": 4450
14520
14557
  }
14521
14558
  },
14522
- "bytes": 14973768
14559
+ "bytes": 14991189
14523
14560
  }
14524
14561
  }
14525
14562
  }
package/meta.min.json CHANGED
@@ -3071,6 +3071,11 @@
3071
3071
  ],
3072
3072
  "format": "esm"
3073
3073
  },
3074
+ "../shared-types/dist/dimensions.js": {
3075
+ "bytes": 108,
3076
+ "imports": [],
3077
+ "format": "esm"
3078
+ },
3074
3079
  "src/apis/ui/helpers/getEffectsFromUIClient.ts": {
3075
3080
  "bytes": 368,
3076
3081
  "imports": [],
@@ -3097,8 +3102,19 @@
3097
3102
  ],
3098
3103
  "format": "esm"
3099
3104
  },
3105
+ "src/devvit/internals/blocks/transformContext.ts": {
3106
+ "bytes": 4619,
3107
+ "imports": [
3108
+ {
3109
+ "path": "@devvit/protos",
3110
+ "kind": "import-statement",
3111
+ "external": true
3112
+ }
3113
+ ],
3114
+ "format": "esm"
3115
+ },
3100
3116
  "src/devvit/internals/blocks/BlocksTransformer.ts": {
3101
- "bytes": 28076,
3117
+ "bytes": 28949,
3102
3118
  "imports": [
3103
3119
  {
3104
3120
  "path": "@devvit/protos",
@@ -3115,6 +3131,11 @@
3115
3131
  "kind": "import-statement",
3116
3132
  "original": "../helpers/color.js"
3117
3133
  },
3134
+ {
3135
+ "path": "src/devvit/internals/blocks/transformContext.ts",
3136
+ "kind": "import-statement",
3137
+ "original": "./transformContext.js"
3138
+ },
3118
3139
  {
3119
3140
  "path": "<runtime>",
3120
3141
  "kind": "import-statement",
@@ -3124,13 +3145,18 @@
3124
3145
  "format": "esm"
3125
3146
  },
3126
3147
  "src/devvit/internals/blocks/BlocksReconciler.ts": {
3127
- "bytes": 19366,
3148
+ "bytes": 19878,
3128
3149
  "imports": [
3129
3150
  {
3130
3151
  "path": "@devvit/protos",
3131
3152
  "kind": "import-statement",
3132
3153
  "external": true
3133
3154
  },
3155
+ {
3156
+ "path": "../shared-types/dist/dimensions.js",
3157
+ "kind": "import-statement",
3158
+ "original": "@devvit/shared-types/dimensions.js"
3159
+ },
3134
3160
  {
3135
3161
  "path": "../shared-types/dist/Header.js",
3136
3162
  "kind": "import-statement",
@@ -3753,13 +3779,18 @@
3753
3779
  "format": "esm"
3754
3780
  },
3755
3781
  "src/devvit/internals/blocks/handler/BlocksHandler.ts": {
3756
- "bytes": 18262,
3782
+ "bytes": 18665,
3757
3783
  "imports": [
3758
3784
  {
3759
3785
  "path": "@devvit/protos",
3760
3786
  "kind": "import-statement",
3761
3787
  "external": true
3762
3788
  },
3789
+ {
3790
+ "path": "../shared-types/dist/dimensions.js",
3791
+ "kind": "import-statement",
3792
+ "original": "@devvit/shared-types/dimensions.js"
3793
+ },
3763
3794
  {
3764
3795
  "path": "../../node_modules/lodash.isequal/index.js",
3765
3796
  "kind": "import-statement",
@@ -4689,7 +4720,7 @@
4689
4720
  "imports": [],
4690
4721
  "exports": [],
4691
4722
  "inputs": {},
4692
- "bytes": 1168831
4723
+ "bytes": 1178681
4693
4724
  },
4694
4725
  "dist/public-api.min.js": {
4695
4726
  "imports": [
@@ -4798,6 +4829,11 @@
4798
4829
  "kind": "import-statement",
4799
4830
  "external": true
4800
4831
  },
4832
+ {
4833
+ "path": "@devvit/protos",
4834
+ "kind": "import-statement",
4835
+ "external": true
4836
+ },
4801
4837
  {
4802
4838
  "path": "@devvit/protos",
4803
4839
  "kind": "import-statement",
@@ -5326,7 +5362,10 @@
5326
5362
  "bytesInOutput": 350
5327
5363
  },
5328
5364
  "src/devvit/internals/blocks/BlocksReconciler.ts": {
5329
- "bytesInOutput": 7153
5365
+ "bytesInOutput": 7323
5366
+ },
5367
+ "../shared-types/dist/dimensions.js": {
5368
+ "bytesInOutput": 50
5330
5369
  },
5331
5370
  "src/apis/ui/helpers/getEffectsFromUIClient.ts": {
5332
5371
  "bytesInOutput": 34
@@ -5335,7 +5374,7 @@
5335
5374
  "bytesInOutput": 101
5336
5375
  },
5337
5376
  "src/devvit/internals/blocks/BlocksTransformer.ts": {
5338
- "bytesInOutput": 12253
5377
+ "bytesInOutput": 11875
5339
5378
  },
5340
5379
  "src/devvit/internals/semanticColors.ts": {
5341
5380
  "bytesInOutput": 11055
@@ -5343,6 +5382,9 @@
5343
5382
  "src/devvit/internals/helpers/color.ts": {
5344
5383
  "bytesInOutput": 3463
5345
5384
  },
5385
+ "src/devvit/internals/blocks/transformContext.ts": {
5386
+ "bytesInOutput": 1319
5387
+ },
5346
5388
  "src/devvit/internals/installation-settings.ts": {
5347
5389
  "bytesInOutput": 401
5348
5390
  },
@@ -5368,7 +5410,7 @@
5368
5410
  "bytesInOutput": 260
5369
5411
  },
5370
5412
  "src/devvit/internals/blocks/handler/BlocksHandler.ts": {
5371
- "bytesInOutput": 6990
5413
+ "bytesInOutput": 7130
5372
5414
  },
5373
5415
  "src/devvit/internals/blocks/handler/UIClient.ts": {
5374
5416
  "bytesInOutput": 974
@@ -5485,7 +5527,7 @@
5485
5527
  "bytesInOutput": 2135
5486
5528
  }
5487
5529
  },
5488
- "bytes": 249359
5530
+ "bytes": 250660
5489
5531
  }
5490
5532
  }
5491
5533
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devvit/public-api",
3
- "version": "0.11.0-next-2024-07-09-907b3322a.0",
3
+ "version": "0.11.0-next-2024-07-09-2412ac001.0",
4
4
  "license": "BSD-3-Clause",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,8 +30,8 @@
30
30
  },
31
31
  "types": "./index.d.ts",
32
32
  "dependencies": {
33
- "@devvit/protos": "0.11.0-next-2024-07-09-907b3322a.0",
34
- "@devvit/shared-types": "0.11.0-next-2024-07-09-907b3322a.0",
33
+ "@devvit/protos": "0.11.0-next-2024-07-09-2412ac001.0",
34
+ "@devvit/shared-types": "0.11.0-next-2024-07-09-2412ac001.0",
35
35
  "base64-js": "1.5.1",
36
36
  "clone-deep": "4.0.1",
37
37
  "core-js": "3.27.2",
@@ -39,9 +39,9 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@ampproject/filesize": "4.3.0",
42
- "@devvit/eslint-config": "0.11.0-next-2024-07-09-907b3322a.0",
43
- "@devvit/repo-tools": "0.11.0-next-2024-07-09-907b3322a.0",
44
- "@devvit/tsconfig": "0.11.0-next-2024-07-09-907b3322a.0",
42
+ "@devvit/eslint-config": "0.11.0-next-2024-07-09-2412ac001.0",
43
+ "@devvit/repo-tools": "0.11.0-next-2024-07-09-2412ac001.0",
44
+ "@devvit/tsconfig": "0.11.0-next-2024-07-09-2412ac001.0",
45
45
  "@microsoft/api-extractor": "7.41.0",
46
46
  "@reddit/faceplate-ui": "11.3.3",
47
47
  "@types/clone-deep": "4.0.1",
@@ -64,5 +64,5 @@
64
64
  }
65
65
  },
66
66
  "source": "./src/index.ts",
67
- "gitHead": "d60d8455e5abc81fa293f2c697afc9b3f83a73d9"
67
+ "gitHead": "be7fc1259d1499e7dbdc209d7779e2e7541afba2"
68
68
  }