pxengine 0.1.10 → 0.1.11

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.cjs CHANGED
@@ -37512,6 +37512,27 @@ var renderNotFoundError = (componentName, key) => {
37512
37512
  key
37513
37513
  );
37514
37514
  };
37515
+ var normalizeProps = (props) => {
37516
+ const normalized = {};
37517
+ Object.entries(props).forEach(([key, value]) => {
37518
+ if (value === "true") {
37519
+ normalized[key] = true;
37520
+ return;
37521
+ }
37522
+ if (value === "false") {
37523
+ normalized[key] = false;
37524
+ return;
37525
+ }
37526
+ if (typeof value === "string" && value.trim() !== "" && !isNaN(Number(value)) && // Don't convert strings that are purely numeric but might be IDs or phone numbers
37527
+ // A simple heuristic: if it's a small integer or a float, it's likely a prop number
37528
+ (value.includes(".") || value.length < 10 && !value.startsWith("0") || value === "0")) {
37529
+ normalized[key] = Number(value);
37530
+ return;
37531
+ }
37532
+ normalized[key] = value;
37533
+ });
37534
+ return normalized;
37535
+ };
37515
37536
  var PXEngineRenderer = ({
37516
37537
  schema,
37517
37538
  onAction
@@ -37537,11 +37558,30 @@ var PXEngineRenderer = ({
37537
37558
  } = component;
37538
37559
  const componentName = name || type || componentType;
37539
37560
  if (!componentName || typeof componentName !== "string") return null;
37540
- const finalProps = { ...remainingProps, ...props };
37561
+ const rawProps = { ...remainingProps, ...props };
37562
+ const finalProps = normalizeProps(rawProps);
37563
+ if (process.env.NODE_ENV === "development") {
37564
+ const propTypes = Object.fromEntries(
37565
+ Object.entries(finalProps).map(([k, v]) => [k, typeof v])
37566
+ );
37567
+ console.log(
37568
+ `[PXEngineRenderer] Final props for ${componentName}:`,
37569
+ finalProps,
37570
+ "Types:",
37571
+ propTypes
37572
+ );
37573
+ }
37541
37574
  if (id && !finalProps.id) {
37542
37575
  finalProps.id = id;
37543
37576
  }
37544
37577
  const uniqueKey = id || `${componentName}-${index || Math.random().toString(36).substr(2, 9)}`;
37578
+ if (process.env.NODE_ENV === "development") {
37579
+ console.log(`[PXEngineRenderer] Rendering ${componentName}`, {
37580
+ id,
37581
+ props: finalProps,
37582
+ childrenCount: Array.isArray(children) ? children.length : children ? 1 : 0
37583
+ });
37584
+ }
37545
37585
  const normalizedName = componentName.charAt(0).toUpperCase() + componentName.slice(1);
37546
37586
  const resolveComponent = (identifier) => {
37547
37587
  const normalized = identifier.charAt(0).toUpperCase() + identifier.slice(1);
@@ -37582,6 +37622,12 @@ var PXEngineRenderer = ({
37582
37622
  return renderNotFoundError(componentName, uniqueKey);
37583
37623
  }
37584
37624
  }
37625
+ if (process.env.NODE_ENV === "development") {
37626
+ console.log(
37627
+ `[PXEngineRenderer] Resolved ${componentName} to component`,
37628
+ TargetComponent.displayName || TargetComponent.name || "Anonymous"
37629
+ );
37630
+ }
37585
37631
  const resolvedNormalized = resolvedIdentifier.charAt(0).toUpperCase() + resolvedIdentifier.slice(1);
37586
37632
  const atomName = resolvedNormalized.endsWith("Atom") ? resolvedNormalized : `${resolvedNormalized}Atom`;
37587
37633
  const isAtomWithRenderProp = atomName in atoms_exports;
package/dist/index.js CHANGED
@@ -37247,6 +37247,27 @@ var renderNotFoundError = (componentName, key) => {
37247
37247
  key
37248
37248
  );
37249
37249
  };
37250
+ var normalizeProps = (props) => {
37251
+ const normalized = {};
37252
+ Object.entries(props).forEach(([key, value]) => {
37253
+ if (value === "true") {
37254
+ normalized[key] = true;
37255
+ return;
37256
+ }
37257
+ if (value === "false") {
37258
+ normalized[key] = false;
37259
+ return;
37260
+ }
37261
+ if (typeof value === "string" && value.trim() !== "" && !isNaN(Number(value)) && // Don't convert strings that are purely numeric but might be IDs or phone numbers
37262
+ // A simple heuristic: if it's a small integer or a float, it's likely a prop number
37263
+ (value.includes(".") || value.length < 10 && !value.startsWith("0") || value === "0")) {
37264
+ normalized[key] = Number(value);
37265
+ return;
37266
+ }
37267
+ normalized[key] = value;
37268
+ });
37269
+ return normalized;
37270
+ };
37250
37271
  var PXEngineRenderer = ({
37251
37272
  schema,
37252
37273
  onAction
@@ -37272,11 +37293,30 @@ var PXEngineRenderer = ({
37272
37293
  } = component;
37273
37294
  const componentName = name || type || componentType;
37274
37295
  if (!componentName || typeof componentName !== "string") return null;
37275
- const finalProps = { ...remainingProps, ...props };
37296
+ const rawProps = { ...remainingProps, ...props };
37297
+ const finalProps = normalizeProps(rawProps);
37298
+ if (process.env.NODE_ENV === "development") {
37299
+ const propTypes = Object.fromEntries(
37300
+ Object.entries(finalProps).map(([k, v]) => [k, typeof v])
37301
+ );
37302
+ console.log(
37303
+ `[PXEngineRenderer] Final props for ${componentName}:`,
37304
+ finalProps,
37305
+ "Types:",
37306
+ propTypes
37307
+ );
37308
+ }
37276
37309
  if (id && !finalProps.id) {
37277
37310
  finalProps.id = id;
37278
37311
  }
37279
37312
  const uniqueKey = id || `${componentName}-${index || Math.random().toString(36).substr(2, 9)}`;
37313
+ if (process.env.NODE_ENV === "development") {
37314
+ console.log(`[PXEngineRenderer] Rendering ${componentName}`, {
37315
+ id,
37316
+ props: finalProps,
37317
+ childrenCount: Array.isArray(children) ? children.length : children ? 1 : 0
37318
+ });
37319
+ }
37280
37320
  const normalizedName = componentName.charAt(0).toUpperCase() + componentName.slice(1);
37281
37321
  const resolveComponent = (identifier) => {
37282
37322
  const normalized = identifier.charAt(0).toUpperCase() + identifier.slice(1);
@@ -37317,6 +37357,12 @@ var PXEngineRenderer = ({
37317
37357
  return renderNotFoundError(componentName, uniqueKey);
37318
37358
  }
37319
37359
  }
37360
+ if (process.env.NODE_ENV === "development") {
37361
+ console.log(
37362
+ `[PXEngineRenderer] Resolved ${componentName} to component`,
37363
+ TargetComponent.displayName || TargetComponent.name || "Anonymous"
37364
+ );
37365
+ }
37320
37366
  const resolvedNormalized = resolvedIdentifier.charAt(0).toUpperCase() + resolvedIdentifier.slice(1);
37321
37367
  const atomName = resolvedNormalized.endsWith("Atom") ? resolvedNormalized : `${resolvedNormalized}Atom`;
37322
37368
  const isAtomWithRenderProp = atomName in atoms_exports;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pxengine/ui",
3
3
  "version": "1.0.0",
4
- "lastUpdated": "2026-02-03T11:03:34.911Z",
4
+ "lastUpdated": "2026-02-03T12:31:23.566Z",
5
5
  "components": {
6
6
  "AccordionAtom": {
7
7
  "name": "AccordionAtom",
@@ -330,13 +330,13 @@
330
330
  "disabled": {
331
331
  "type": "boolean",
332
332
  "required": false,
333
- "defaultValue": "false",
333
+ "defaultValue": false,
334
334
  "description": ""
335
335
  },
336
336
  "isLoading": {
337
337
  "type": "boolean",
338
338
  "required": false,
339
- "defaultValue": "false",
339
+ "defaultValue": false,
340
340
  "description": ""
341
341
  },
342
342
  "id": {
@@ -357,7 +357,7 @@
357
357
  "label": "Get Started",
358
358
  "variant": "purple",
359
359
  "size": "lg",
360
- "className": "shadow-lg border border-primary/20 hover:scale-[1.05] transition-all bg-primary font-bold px-8 text-white"
360
+ "className": "shadow-lg border border-primary/20 hover:scale-[1.05] transition-all bg-primary font-bold px-8 text-black"
361
361
  }
362
362
  }
363
363
  },
@@ -402,7 +402,7 @@
402
402
  "component": "CalendarAtom",
403
403
  "props": {
404
404
  "mode": "single",
405
- "selectedDate": "2026-02-03T11:03:34.911Z",
405
+ "selectedDate": "2026-02-03T12:31:23.567Z",
406
406
  "className": "shadow-2xl border border-border bg-card rounded-[28px] p-6 ring-1 ring-border/5"
407
407
  }
408
408
  }
@@ -546,19 +546,19 @@
546
546
  "showTooltip": {
547
547
  "type": "boolean",
548
548
  "required": false,
549
- "defaultValue": "true",
549
+ "defaultValue": true,
550
550
  "description": ""
551
551
  },
552
552
  "showLegend": {
553
553
  "type": "boolean",
554
554
  "required": false,
555
- "defaultValue": "true",
555
+ "defaultValue": true,
556
556
  "description": ""
557
557
  },
558
558
  "stacked": {
559
559
  "type": "boolean",
560
560
  "required": false,
561
- "defaultValue": "false",
561
+ "defaultValue": false,
562
562
  "description": ""
563
563
  },
564
564
  "id": {
@@ -645,7 +645,7 @@
645
645
  "defaultOpen": {
646
646
  "type": "boolean",
647
647
  "required": false,
648
- "defaultValue": "false",
648
+ "defaultValue": false,
649
649
  "description": ""
650
650
  },
651
651
  "id": {
@@ -911,7 +911,7 @@
911
911
  "required": {
912
912
  "type": "boolean",
913
913
  "required": false,
914
- "defaultValue": "false",
914
+ "defaultValue": false,
915
915
  "description": ""
916
916
  },
917
917
  "inputType": {
@@ -973,7 +973,7 @@
973
973
  "required": {
974
974
  "type": "boolean",
975
975
  "required": false,
976
- "defaultValue": "false",
976
+ "defaultValue": false,
977
977
  "description": ""
978
978
  },
979
979
  "options": {
@@ -1034,13 +1034,13 @@
1034
1034
  "required": {
1035
1035
  "type": "boolean",
1036
1036
  "required": false,
1037
- "defaultValue": "false",
1037
+ "defaultValue": false,
1038
1038
  "description": ""
1039
1039
  },
1040
1040
  "rows": {
1041
1041
  "type": "number",
1042
1042
  "required": false,
1043
- "defaultValue": "3",
1043
+ "defaultValue": 3,
1044
1044
  "description": ""
1045
1045
  }
1046
1046
  },
@@ -1279,13 +1279,13 @@
1279
1279
  "hasNext": {
1280
1280
  "type": "boolean",
1281
1281
  "required": false,
1282
- "defaultValue": "true",
1282
+ "defaultValue": true,
1283
1283
  "description": ""
1284
1284
  },
1285
1285
  "hasPrev": {
1286
1286
  "type": "boolean",
1287
1287
  "required": false,
1288
- "defaultValue": "true",
1288
+ "defaultValue": true,
1289
1289
  "description": ""
1290
1290
  },
1291
1291
  "id": {
@@ -1428,13 +1428,13 @@
1428
1428
  "max": {
1429
1429
  "type": "number",
1430
1430
  "required": false,
1431
- "defaultValue": "5",
1431
+ "defaultValue": 5,
1432
1432
  "description": ""
1433
1433
  },
1434
1434
  "readonly": {
1435
1435
  "type": "boolean",
1436
1436
  "required": false,
1437
- "defaultValue": "false",
1437
+ "defaultValue": false,
1438
1438
  "description": ""
1439
1439
  },
1440
1440
  "id": {
@@ -1676,19 +1676,19 @@
1676
1676
  "max": {
1677
1677
  "type": "number",
1678
1678
  "required": false,
1679
- "defaultValue": "100",
1679
+ "defaultValue": 100,
1680
1680
  "description": ""
1681
1681
  },
1682
1682
  "min": {
1683
1683
  "type": "number",
1684
1684
  "required": false,
1685
- "defaultValue": "0",
1685
+ "defaultValue": 0,
1686
1686
  "description": ""
1687
1687
  },
1688
1688
  "step": {
1689
1689
  "type": "number",
1690
1690
  "required": false,
1691
- "defaultValue": "1",
1691
+ "defaultValue": 1,
1692
1692
  "description": ""
1693
1693
  },
1694
1694
  "disabled": {
@@ -2135,25 +2135,25 @@
2135
2135
  "autoplay": {
2136
2136
  "type": "boolean",
2137
2137
  "required": false,
2138
- "defaultValue": "false",
2138
+ "defaultValue": false,
2139
2139
  "description": ""
2140
2140
  },
2141
2141
  "controls": {
2142
2142
  "type": "boolean",
2143
2143
  "required": false,
2144
- "defaultValue": "true",
2144
+ "defaultValue": true,
2145
2145
  "description": ""
2146
2146
  },
2147
2147
  "muted": {
2148
2148
  "type": "boolean",
2149
2149
  "required": false,
2150
- "defaultValue": "false",
2150
+ "defaultValue": false,
2151
2151
  "description": ""
2152
2152
  },
2153
2153
  "loop": {
2154
2154
  "type": "boolean",
2155
2155
  "required": false,
2156
- "defaultValue": "false",
2156
+ "defaultValue": false,
2157
2157
  "description": ""
2158
2158
  },
2159
2159
  "id": {
@@ -3038,7 +3038,7 @@
3038
3038
  "pageSize": {
3039
3039
  "type": "number",
3040
3040
  "required": false,
3041
- "defaultValue": "10",
3041
+ "defaultValue": 10,
3042
3042
  "description": ""
3043
3043
  },
3044
3044
  "id": {
@@ -3246,7 +3246,7 @@
3246
3246
  "showSearch": {
3247
3247
  "type": "boolean",
3248
3248
  "required": false,
3249
- "defaultValue": "true",
3249
+ "defaultValue": true,
3250
3250
  "description": ""
3251
3251
  },
3252
3252
  "id": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pxengine",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "type": "module",
5
5
  "description": "Shadcn-based UI component library for agent-driven interfaces",
6
6
  "main": "./dist/index.cjs",
@@ -30,8 +30,8 @@
30
30
  "author": "PXEngine Team",
31
31
  "license": "MIT",
32
32
  "peerDependencies": {
33
- "react": "^18.0.0",
34
- "react-dom": "^18.0.0",
33
+ "react": "^18.0.0 || ^19.0.0",
34
+ "react-dom": "^18.0.0 || ^19.0.0",
35
35
  "tailwindcss": "^3.4.0",
36
36
  "@types/react": "^19.0.2",
37
37
  "@types/react-dom": "^19.0.2"
@@ -176,6 +176,46 @@ const renderNotFoundError = (
176
176
  );
177
177
  };
178
178
 
179
+ /**
180
+ * Normalizes props by converting stringified booleans and numbers back to their proper types.
181
+ * This is necessary because some systems (like our registry generator) might stringify everything.
182
+ */
183
+ const normalizeProps = (props: Record<string, any>): Record<string, any> => {
184
+ const normalized: Record<string, any> = {};
185
+
186
+ Object.entries(props).forEach(([key, value]) => {
187
+ // 1. Handle stringified booleans
188
+ if (value === "true") {
189
+ normalized[key] = true;
190
+ return;
191
+ }
192
+ if (value === "false") {
193
+ normalized[key] = false;
194
+ return;
195
+ }
196
+
197
+ // 2. Handle stringified numbers (if they look like actual numbers)
198
+ if (
199
+ typeof value === "string" &&
200
+ value.trim() !== "" &&
201
+ !isNaN(Number(value)) &&
202
+ // Don't convert strings that are purely numeric but might be IDs or phone numbers
203
+ // A simple heuristic: if it's a small integer or a float, it's likely a prop number
204
+ (value.includes(".") ||
205
+ (value.length < 10 && !value.startsWith("0")) ||
206
+ value === "0")
207
+ ) {
208
+ normalized[key] = Number(value);
209
+ return;
210
+ }
211
+
212
+ // 3. Keep as is
213
+ normalized[key] = value;
214
+ });
215
+
216
+ return normalized;
217
+ };
218
+
179
219
  export const PXEngineRenderer: React.FC<PXEngineRendererProps> = ({
180
220
  schema,
181
221
  onAction,
@@ -218,7 +258,20 @@ export const PXEngineRenderer: React.FC<PXEngineRendererProps> = ({
218
258
 
219
259
  // Merge explicit props with flattened props (remainingProps)
220
260
  // Priority: explicit props > flattened props
221
- const finalProps = { ...remainingProps, ...props };
261
+ const rawProps = { ...remainingProps, ...props };
262
+ const finalProps = normalizeProps(rawProps);
263
+
264
+ if (process.env.NODE_ENV === "development") {
265
+ const propTypes = Object.fromEntries(
266
+ Object.entries(finalProps).map(([k, v]) => [k, typeof v]),
267
+ );
268
+ console.log(
269
+ `[PXEngineRenderer] Final props for ${componentName}:`,
270
+ finalProps,
271
+ "Types:",
272
+ propTypes,
273
+ );
274
+ }
222
275
 
223
276
  // Also pass ID if not already in props
224
277
  if (id && !finalProps.id) {
@@ -230,6 +283,18 @@ export const PXEngineRenderer: React.FC<PXEngineRendererProps> = ({
230
283
  id ||
231
284
  `${componentName}-${index || Math.random().toString(36).substr(2, 9)}`;
232
285
 
286
+ if (process.env.NODE_ENV === "development") {
287
+ console.log(`[PXEngineRenderer] Rendering ${componentName}`, {
288
+ id,
289
+ props: finalProps,
290
+ childrenCount: Array.isArray(children)
291
+ ? children.length
292
+ : children
293
+ ? 1
294
+ : 0,
295
+ });
296
+ }
297
+
233
298
  // Normalize name to PascalCase for the *primary* identifier
234
299
  const normalizedName =
235
300
  componentName.charAt(0).toUpperCase() + componentName.slice(1);
@@ -302,6 +367,13 @@ export const PXEngineRenderer: React.FC<PXEngineRendererProps> = ({
302
367
  }
303
368
  }
304
369
 
370
+ if (process.env.NODE_ENV === "development") {
371
+ console.log(
372
+ `[PXEngineRenderer] Resolved ${componentName} to component`,
373
+ TargetComponent.displayName || TargetComponent.name || "Anonymous",
374
+ );
375
+ }
376
+
305
377
  // Calculate atom name for the *resolved* component to check for render props
306
378
  const resolvedNormalized =
307
379
  resolvedIdentifier.charAt(0).toUpperCase() + resolvedIdentifier.slice(1);